android - 加载多个音频文件的简单方法?

标签 android performance audio soundpool

我一直在尝试找到一种加载大量音频文件的好方法。
下面的代码可以正常工作,但是我需要加载更多文件,这就是我遇到问题的时候。

这是一个测验,当用户选择正确的答案时,应该播放新的声音。我必须加载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变得“太重”

最佳答案

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重置。

关于android - 加载多个音频文件的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29172648/

相关文章:

sql-server - SQL Server 与 Access 插入性能对比,尤其是在使用 GUID 时

MySQL 8.0 按性能分组

android - 在Android上播放声音

iphone - iPhone OS 3.0录音报错kAudioQueueErr_CannotStart

android - 按下特定按钮时播放特定声音

android - 从 android 上的 IP 摄像机接收视频流

android - 尝试使用 IntellIJ 运行应用程序时未指定 APK 路径

java - Android 套接字连接问题

Android ListView ScrollView 从蓝色改变边缘发光颜色

javascript - 文档上的 JQuery 触发事件性能