【发布时间】:2011-12-17 20:56:44
【问题描述】:
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);
}
【问题讨论】:
-
将
1 + x更改为1.0f + x并且(也将0.005更改为0.005f -
你如何测试你的代码。如果您使用的是真实设备,则您的设备可能太慢而无法动态更改播放速率。如果您使用的是模拟器,则问题可能出在您主机的声卡上。更改播放速率并非易事,可能需要复杂的插值,尤其是在以非标准转换速率运行时。
-
我在设备 (Galaxy S) 和模拟器上都进行了测试。在设备上听起来更糟,但在模拟器中声音也被“切碎”了。
-
增加速率增量之间的时间是否会变得更好?说
SystemClock.sleep(100);? -
如果增量较慢,缺陷就不太明显,但这无济于事,因为我需要足够快地改变音高,以模拟乐器(例如吉他、小提琴)。
标签: android audio signal-processing soundpool