【问题标题】:How to Sync Sounds using SoundPool如何使用 SoundPool 同步声音
【发布时间】:2010-12-03 04:32:50
【问题描述】:

我一直在尝试同时播放一些声音;目前我正在使用 SoundPool 的共享实例。我希望同时播放 1、2 或 3 种声音而没有延迟。

当连续调用 SoundPool.play(...) X 次时,声音会按照人们想象的顺序播放。什么是正确的方法来实现这一点,我可以准备同时播放所有声音,然后将它们作为一个播放?

须藤代码:

SoundPool _soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

_soundPool.load(_context, soundId1, 1);
_soundPool.load(_context, soundId2, 1);
_soundPool.load(_context, soundId3, 1);

_soundPool.play(soundId1, vol, vol, 1, 0, 1f);
_soundPool.play(soundId2, vol, vol, 1, 0, 1f);
_soundPool.play(soundId3, vol, vol, 1, 0, 1f);

【问题讨论】:

  • @Patrick,我尝试了线程方法,起初我认为它有效,或者当你只有两个线程时至少足够接近。但是,当您采用相同的想法并将其扩展为说 4 个线程都在做同样的事情时,您就会再次回来,并且会稍有延迟。也许下一步是潜入混合声音......我真的不想走这么远,但在这一点上我没有看到很多其他选择。
  • 我认为混音是最好的方法。您是否在手机上尝试过,而不仅仅是像詹姆斯在另一个线程中所说的那样在模拟器上尝试过?如果你知道你想要混合播放什么声音,你可以在应用程序生命周期的开始进行设置,这样你就不必在想要播放声音时混合它,这有望提供更好的流动。
  • @Patrick,我确实尝试将它安装在我的 Droid X 上,结果与模拟器相同。我确信我可以预混这些声音。我希望今天晚些时候有时间阅读混音;我以前从未做过任何事情,但我相信这将是一个有趣的练习。如果我找到一个好的答案,我一定会更新这篇文章。

标签: android audio soundpool android-audiomanager


【解决方案1】:

我有时为一种声音完成了声音池,它可能会对您有所帮助。 Android:sound pool and service

谢谢

【讨论】:

    【解决方案2】:

    您需要了解SoundPool.load 方法是异步的,因此当您连续调用它3 次,然后调用play 时,并不能保证这听起来实际加载了。所以你需要等到所有声音都加载完毕。为此使用OnLoadCompleteListener:

    fun loadAndPlay(soundPool: SoundPool, context: Context, resIds: IntArray) {
        val soundIds = IntArray(resIds.size) {
            soundPool.load(context, resIds[it], 1)
        }
    
        var numLoaded: Int = 0
    
        soundPool.setOnLoadCompleteListener { sPool, sampleId, status ->
            numLoaded++
    
            if (numLoaded == resIds.size) {
                soundPool.setOnLoadCompleteListener(null)
    
                for (id in soundIds) {
                    soundPool.play(id, 1f, 1f, 1, 0, 1f)
                }
            }
        }
    }
    

    使用方法:

    loadAndPlay(soundPool, context, intArrayOf(R.raw.sound_1, R.raw.sound_2, R.raw.sound_3))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多