用例
我有68个钢琴 sample ,每个大约。 174 kB,Ogg数据,Vorbis音频,立体声,s16、44100 Hz,352 kb/s,4秒。
我需要同时 演奏它们的不同组合(音乐术语:和弦/音程),例如1st + 7th
,14th + 22nd
等。
另外:当前的“播放”需要一个选项在t
毫秒后停止播放。
我尝试过的
一个明显的解决方案似乎是使用SoundPool
。设置maxStreams = 20
后,我对所有示例进行.load()
。对于每个播放请求,都会创建一个线程(实际上是Scala的future
),等待给定的t millis
,然后停止所有声音。
通常,似乎可以工作。
问题
SoundPool
有时有时无法完全同时启动,因此肯定可以听到它们的开始时间略有不同。但是,大多数时候都可以。 .play()
在以下两个之后都是第一个:... 不会产生声音!
问题
Android是否为我们提供了更可靠(就时序一致性而言)使用的声音池实现?
如果我创建68个线程(每个声音一个线程),可能会更好?...我不这么认为。
最佳答案
编辑:可能的解决方案(不是那么优雅吗?)
Thiago Rosa writes,他克服了SoundPool
的落后
但是我并没有真正的说服力。有效率吗?电池呢?
我的测试表明,绝对值得一试。样本现在可以持续播放,在几百次测试中,只有3-4次少了关闭时间。 另外两个问题(根本不播放和停止时间不一致)现在也消失了!
但是,电池问题仍然存在。