我正在使用AudioTrack类,并在我的Android应用程序中生成了自己的音调。但是,我希望能够控制播放的速度,我无法弄清楚如何。
我看到了setLoopPoints方法,但这似乎没有做我想要的(如果有人使用它并且可以向我解释那个方法很好,api文档对我没什么帮助)。
我想做什么:
作为一个点(这里,屏幕上的触摸)越接近屏幕上的目标,我想提高我正在生成的音调的速度。例如,更远的地方我会说,音调在1秒钟内播放1次,但非常接近目标,1秒内播放5次。我正在努力找到使用Android声音(生成的音调甚至.wav文件保存到我的res / raw)的最佳方法。
非常感谢任何帮助!
沙尼
答案 0 :(得分:3)
您希望使用setPlaybackRate
方法:
http://developer.android.com/reference/android/media/AudioTrack.html
与setLoopPoints
一起使用。但是,我相信你可以加快文件的“自然”播放速度,并且限制可能是48 kHz(但我不确定,它可能与设备有关)。 / p>
因此,如果您有一个以8000 Hz的速度录制的文件,以获得您想要的效果,您可以将循环计数设置为4(使其连续播放5次)并设置播放速率到40,000(5 * 8000)。
由于(可能)播放速率有上限,您最好的方法可能是以高频率录制原始声音,并根据需要减慢播放速度以达到您想要的效果。
更新: setLoopPoints允许您在文件中指定两个任意位置,这样当回放到达结束循环点时,音频引擎将回绕到起始循环点。要循环整个文件,您可以将起始循环点设置为0,将结束循环点设置为文件中的最后一帧(每个帧的大小取决于文件的格式 - 因此每个样本使用2个字节的立体声文件将具有帧大小为4,所以最后一帧只是音频数据的大小,以字节为单位除以4)。
要连续播放5个文件,你可以将循环次数设置为4(loopcount为0表示文件播放一次; -1表示它将永远循环播放。)
更新2:只是阅读了更多文档 - setPlaybackRate
的上限记录为getNativeOutputSampleRate
返回的两倍,大多数设备可能是44,100或48,000赫兹。这意味着标准CD质量的WAV文件只能以正常速度的两倍播放。一个22,050 Hz的文件可以以正常速度的4倍播放,等等。