加载多个音频文件的简单方法?
Posted
技术标签:
【中文标题】加载多个音频文件的简单方法?【英文标题】:Simple way to load multiple audio files? 【发布时间】:2015-03-20 17:38:53 【问题描述】:我一直在尝试找到一种加载大量音频文件的好方法。 下面的代码工作正常,但我需要加载更多文件,这就是我遇到问题的时候。
这是一个测验,当用户选择正确答案时,应该播放新的声音。我必须加载 50 多种声音。
我目前加载文件的方式:
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
spool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
Context myActivity = getApplicationContext();
primSounds.add(spool.load(myActivity, R.raw.int_prim_c_mel, 1));
primSounds.add(spool.load(myActivity, R.raw.int_prim_d_mel, 1));
primSounds.add(spool.load(myActivity, R.raw.int_prim_e_mel, 1));
kvintSounds.add(spool.load(myActivity, R.raw.int_kvint_c_mel, 1));
kvintSounds.add(spool.load(myActivity, R.raw.int_kvint_d_mel, 1));
kvintSounds.add(spool.load(myActivity, R.raw.int_kvint_e_mel, 1));
oktSounds.add(spool.load(myActivity, R.raw.int_okt_c_mel, 1));
oktSounds.add(spool.load(myActivity, R.raw.int_okt_d_mel, 1));
oktSounds.add(spool.load(myActivity, R.raw.int_okt_e_mel, 1));
...
问题是这种方式会使 onCreate “太重”
【问题讨论】:
您需要同时加载所有 50 个吗?你不能加载一些然后在使用后重新加载另一组吗? 也许,测验问题是随机的,所以加载速度必须很快 在展示之前,您能知道每次测验需要哪些音频吗?在这种情况下,您可以为每个测验加载音频。因此,在显示测验 a 之前:加载所有“a”音频当显示测验“a”时:加载测验 b 音频等等 测验使用最高难度的每个音频 【参考方案1】:Here你有一个可能的解决方法。
但在您的情况下,您将在某个时候一次加载 50 个声音。这意味着您将使用大量内存。 不得不在自己面前面对类似的情况,我认为您可以使用以下代码:
SoundtrackManager.java
public void prepareSoundtrack(int soundtrackId, Context context)
try
if (mMediaPlayer != null)
mMediaPlayer.release();
mMediaPlayer = null;
mMediaPlayer = MediaPlayer.create(context, soundtrackId);
catch (Exception e)
mMediaPlayer.release();
e.printStackTrace();
public void play()
if (mMediaPlayer != null)
try
mMediaPlayer.start();
catch (Exception e)
e.printStackTrace();
使用:
mSoundTrackManager.prepareSoundtrack(R.raw.the_sound, mContext);
mSoundTrackManager.play();
只要正在播放的声音不变,就可以调用 play()。
缺点是必须为每个声音创建一个 MediaPlayer。但是您不会同时将所有这些都存储在内存中。此外,它们会立即加载/播放。
编辑:
这可以通过在 SoundtrackManager 类中创建一个 MediaPlayer 对象的“池”来改进。因此,如果需要其中一种随机声音并且恰好位于该“池”中,则可以避免不断重新设置 MediaPlayer。
【讨论】:
谢谢!我认为 SoundPool 是一个更好的选择,因为音频文件是 midi 和 1-3 秒长。以上是关于加载多个音频文件的简单方法?的主要内容,如果未能解决你的问题,请参考以下文章
使用任何方法在 openTK 应用程序中播放音频的最简单方法