概述
libsonic是一個(gè)支持音頻倍速播放的開源庫挟秤。支持大于2倍速的播放贰剥。有ANSI C的版本瞻讽,也有純Java的版本鸳吸。能夠方便的集成進(jìn)你的應(yīng)用中。
項(xiàng)目主頁:https://android.googlesource.com/platform/external/sonic/+/master/doc/index.md
與其它解決方案相比速勇,sonic在播放語音方面有更好的效果(視頻播放大多屬于這樣的場景)晌砾。SoundTouch是一個(gè)常用的替代方案,在播放music方面效果更好烦磁。如果要支持高于兩倍速的播放养匈,sonic應(yīng)該是目前最好的選擇。
Sonic使用整數(shù)運(yùn)算完成所有CPU密集型工作都伪,并且在沒有FPU的ARM CPU上運(yùn)行良好呕乎。它支持多聲道(立體聲),并且能改變聲音的音高陨晶。它適用于流式音頻應(yīng)用猬仁,可以處理16位有符號整數(shù),32位浮點(diǎn)或8位無符號格式的聲音流先誉。 源代碼是普通的ANSI C.簡而言之湿刽,方便應(yīng)用于實(shí)際的產(chǎn)品。
libsonic的使用
參照實(shí)例代碼(SonicTest.java)褐耳,我們可以很容易的在我們的程序中使用sonic诈闺。比較不好理解的可能是幾個(gè)參數(shù)的設(shè)置,具體作用是什么铃芦?
文檔中的說明:
speed為2.0意味著語速加倍雅镊。pitch為0.95意味著音調(diào)降低約5%把曼。
volume為1.4表示采樣乘以1.4,如果超過16位整數(shù)的最大范圍漓穿,則截?cái)唷?br>rate可以改變播放速度。設(shè)置為2.0會讓你聽起來像花栗鼠說話速度非匙⒂快晃危。0.7的值會讓你聽起來像巨人說話一樣,慢悠悠的老客。
聲音的高低叫做音調(diào)僚饭,頻率決定音調(diào)。物體振動的快胧砰,發(fā)出聲音的音調(diào)就高鳍鸵。振動的慢,發(fā)出聲音的音調(diào)就低
看完這個(gè)尉间,我一直有一個(gè)疑問偿乖,我如果就是想要播放速度加倍,到底應(yīng)該怎么樣設(shè)置呢哲嘲?是設(shè)置speed贪薪,還是設(shè)置rate呢?看來文檔中是找不到答案了眠副。只能寫個(gè)應(yīng)用實(shí)際看看画切。
實(shí)際測試效果:
改變pitch,rate都會使聲音聽起來不是同一個(gè)人的囱怕。同時(shí)調(diào)整pitch霍弹,rate也可以起到改變語速的作用(音色不變)。
只是調(diào)整語速娃弓,設(shè)置speed就可以了典格。
pitch:2.0 rate:0.5 等價(jià)于 speed:0.5
調(diào)用setChordPitch(true); 設(shè)置pitch也可以達(dá)到保持音色不變的效果。然而忘闻,這只對pitch的值變化不大有效果钝计,pitch的值變化太多也會失真。
speed, pitch, rate這些參數(shù)是可以隨時(shí)改變的齐佳,不需要刷新或重現(xiàn)創(chuàng)建Sonic私恬。