Android的SoundPool停顿,停滞,有时根本无法播放

Mic*_*Rus 5 audio time android soundpool

用例

我有68个钢琴样品,每个大约。174 kB,Ogg数据,Vorbis音频,立体声,s16、44100 Hz,352 kb / s,4秒。

我需要同时发挥他们的不同组合(音乐术语:谐波和弦/间隔),例如1st + 7th14th + 22nd等等。

另外:当前的“播放”需要一个选项来在t毫秒后停止播放。

我尝试过的

一个明显的解决方案似乎是使用SoundPool。设置好之后maxStreams = 20,我将.load()所有样本都放入了。对于每个播放请求,future都会创建一个线程(确实是:Scala的),等待给定t millis,然后停止所有声音。

似乎正常工作。

问题

  • 这样SoundPool,当同时播放2个(或更多)声音,有时可能无法完全同时启动它们,当然可以听到它们的开始时间略有不同。但是,大多数时候都可以。

  • 停止还有一个问题,有时一双可以“持续”更长的时间,但同样,通常在我想要的时候结束。

  • 最后,真正奇怪的是:每.play()一个都是第一个之后的:

    • 关闭(或什至仅变暗!)显示或
    • 应用启动...

    ... 不会发出声音

Android是否向我们提供了更可靠(就时序一致性而言)使用的声音池实现?

如果我创建68个线程(每个声音一个线程),也许会更好?...我不这么认为。

Mic*_*Rus 4

编辑:可能的解决方案(不是那么优雅?)

\n\n

蒂亚戈·罗莎 (Thiago Rosa) 写道,他克服了SoundPool

\n\n
\n

(...) 通过循环播放静音 (...)

\n\n

经过几次测试,我注意到有时 \xe2\x80\x9cplay\xe2\x80\x9d 函数需要 8ms 才能执行,有时会立即执行。

\n\n

结论,看来当没有播放任何内容时,SoundPool正在重置,当再次播放时,需要时间来初始化。

\n
\n\n

但我不太相信。有效率吗?电池呢?

\n\n

我的测试表明它绝对值得一试。现在样本播放一致,在几百次测试中只有 3-4 次出现了一点停顿。另外两个问题(根本不播放和停止时间不一致)现在也消失了!

\n\n

然而,电池问题仍然悬而未决......

\n