2011-02-22 18 views
1

我正在使用AudioTrack类,并在我的Android应用程序中生成了我自己的音调。不过,我希望能够控制播放的速度,但我无法弄清楚如何。如何设置android生成音调的播放速度

我看到setLoopPoints方法,但似乎没有做我想做的事情(如果任何人使用过它,并且可以向我解释那种方法,那很棒,但api文档对我没有多大帮助)。

我想要做什么:

作为一个点(这里,屏幕上的触摸)越接近目标在屏幕上,我想提高我生成音调的速度。例如,我想比较远的地方是,音调在1秒内播放1次,但非常接近目标,1秒内播放5次。我正在努力找出使用Android声音(生成的音调或甚至保存到我的资源/原始的.wav文件)的最佳方式。

任何帮助将不胜感激!

沙尼

回答

3

您要使用的setPlaybackRate方法是:

http://developer.android.com/reference/android/media/AudioTrack.html

setLoopPoints结合。不过,我相信可能会有多少限制,可以加快文件的“自然”播放速度,而限制可能是48 kHz(但我不确定,但可能取决于设备)。

因此,如果您有一个以8000Hz记录的文件,以获得您想要的效果,您可以将循环计数设置为4(以便它连续播放5次),并设置播放费率为40,000(5 * 8000)。

由于回放速率有(可能)上限,所以最好的方法可能是以高频率录制原始声音,并根据需要放慢播放速度以实现所需效果。

更新: setLoopPoints允许您在文件中指定两个任意位置,以便当播放到达结束循环时,音频引擎将绕回到开始循环点。要循环整个文件,你需要将开始循环点设置为0,并将结束循环点设置为文件的最后一帧(每帧的大小取决于文件的格式),因此每个样本使用2个字节的立体文件会有一个帧大小为4,所以最后一帧就是音频数据的大小(以字节除以4)。

要让文件连续播放5次,您需要将循环计数设置为4(loopcount为0表示该文件播放一次; -1表示该文件将永久循环播放)。

更新2:只是阅读一些的文档 - 为setPlaybackRate上限被记录为通过​​返回的速度的两倍,这对于大多数的设备可能是44,100或48000赫兹。这意味着标准的CD质量WAV文件只能以其正常速度的两倍播放。一个22,050赫兹的文件可以高达其正常速度的4倍播放,等等。

+0

谢谢你的提示和详细的回复 - 我会试试这个! – Shani 2011-02-22 23:14:07

+0

没问题 - 无论如何,学习这些东西都在我的TODO列表中。我知道Windows中的所有音频,但我是Android新手。你很幸运:'AudioTrack'是一个非常合理的API,它的使用相对简单直接。 – MusiGenesis 2011-02-22 23:19:36