2011-02-22 23 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