我有68个钢琴样本,每个大约一个。 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
,当同时播放2个(或更多)声音 时,有时无法同时启动它们,它们的开始时间略有不同肯定可以被听到。但是,大部分时间都可以。
还有一个问题就是停止...有时候一对“持续”的时间更长,但是,通常它会在我想要的时候结束。
最后,真的奇怪的是:每个.play()
之后的第一个:
... 不会发出声音!
Android是否为我们提供了更可靠的(就时序一致性而言)声池实现?
如果我创造了68个线程,每个声音一个,它可能会更好吗?...我不这么认为。
答案 0 :(得分:4)
Thiago Rosa writes,他已经克服了SoundPool
(...)通过循环播放静音(...)
经过几次测试后,我注意到有时“play”功能需要8ms才能执行,有时会立即执行。
结论,似乎当没有播放时,SoundPool正在重置,当它再次播放时,初始化需要时间。
但我真的不相信。它有效吗?电池怎么样?
我的测试表明肯定值得一试。现在样本一直在播放,在几百次测试中只有3-4次有点关闭时间。 其他两个问题(根本没有播放和不一致的停止时间)现在也已经消失了!
然而,电池问题依然存在......