Pat*_*ick 6 audio android signal-processing soundpool
SoundPool的Android文档说"应用程序还可以通过实时调整多普勒或合成效果的回放速率来改变音高".所以我尝试这样做,使用setRate方法从一个音符平滑地变化到另一个音符,但结果很糟糕:声音变化非常粗糙.这是我试过的代码.请告诉我是否有更好的方法.
int streamId = soundPool.play (soundId, 1, 1, 1, 0, 1.0f);
for (float x = 0; x < 1; x += 0.005) {
SystemClock.sleep (10);
soundPool.setRate (streamId, 1 + x);
}
Run Code Online (Sandbox Code Playgroud)
MBo*_*ber 13
即使Androids文档建议你可以setRate()用来产生多普勒效应,我也不会依赖于每个Android设备上的快速或足够好的实现.
经济实惠的音频IC需要44kHz或48kHz的固定采样率.因此,采样率转换(即音调修改)必须在软件中完成.因为这包括低级数字运算,我确信这是由设备制造商实现的,而不是由Google实现的.鉴于各种Android设备制造商和通常使用的低成本硬件,当然有很多采样率转换实现.有些更快,有些更慢.有些光滑,有些衣衫褴褛.
在播放期间更改转换率时会发生什么?如果算法不能精确匹配各个部分,则音频播放可能会出现短暂的裂缝.您每10毫秒更改一次转换率.如果每隔10ms有一个裂缝,则对应于100Hz的频率,这是一个音调本身.这可能是你听到的"衣衫褴褛的".
总而言之,我认为使用高级Android API在各种Android设备上实时模拟乐器是不可能的.本机应用程序可能足够快.
| 归档时间: |
|
| 查看次数: |
10662 次 |
| 最近记录: |