我正在使用 AudioTrack 类并在我的 Android 应用程序中生成了我自己的音调。但是,我希望能够控制播放速度,但我不知道该怎么做。
我看到了 setLoopPoints 方法,但它似乎并没有达到我想要的效果(如果有人使用过它并且可以向我解释该方法那就太好了,api 文档对我帮助不大)。
我想做的事情:
随着一个点(此处为屏幕上的触摸)越来越接近屏幕上的目标,我想提高生成音调的速度。例如,在较远的地方,我会让音调在 1 秒内播放 1 次,但在离目标很近的地方,在 1 秒内播放 5 次。我正在努力寻找使用 Android 声音(生成的音调甚至保存到我的 res/raw 的 .wav 文件)执行此操作的最佳方法。
如有任何帮助,我们将不胜感激!
沙尼
最佳答案
你想为此使用 setPlaybackRate
方法:
http://developer.android.com/reference/android/media/AudioTrack.html
结合 setLoopPoints
。但是,我认为可以加快文件“自然”播放速率的速度可能有一个限制,这个限制可能是 48 kHz(不过我不确定,这可能取决于设备)。
因此,如果您有一个以 8000 Hz 的频率录制的文件,要获得您想要的效果,您可以将循环计数设置为 4(以便它连续播放 5 次)并设置播放速率到 40,000 (5 * 8000)。
由于(可能)播放速率有上限,您最好的方法可能是以高频录制原始声音,并根据需要放慢播放速度以达到您想要的效果。
更新:setLoopPoints 允许您在文件中指定两个任意位置,这样当播放到达结束循环点时,音频引擎将返回到开始循环点。要循环整个文件,您可以将开始循环点设置为 0,将结束循环点设置为文件中的最后一帧(每个帧的大小取决于文件的格式 - 因此每个样本使用 2 个字节的立体声文件将具有帧大小为 4,因此最后一帧就是音频数据的字节大小除以 4)。
要让文件连续播放 5 次,您可以将循环计数设置为 4(循环计数为 0 表示文件播放一次;-1 表示它将永远循环播放)。
更新 2: 请多阅读文档 - setPlaybackRate
的上限记录为 getNativeOutputSampleRate
返回速率的两倍,它大多数设备可能是 44,100 或 48,000 Hz。这意味着标准 CD 质量的 WAV 文件只能以正常速度的两倍播放。一个 22,050 Hz 的文件最多可以以其正常速度的 4 倍播放,等等。
关于android - 如何为android生成的音调设置播放速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083975/