Android開發(fā)中播放聲音的兩種方法分析
本文實例講述了Android開發(fā)中播放聲音的兩種方法。分享給大家供大家參考,具體如下:
在Android中,音頻、視頻等多媒體元素的加入,使得應(yīng)用程序的用戶體驗更好??梢哉f,現(xiàn)在的手機,已經(jīng)遠遠不只作為通信工具,更成為娛樂、辦公的必備產(chǎn)品。
Android提供了簡單的音頻API。一般大家使用的是MediaPlayer播放音頻,這也是最常見的一種播放聲音的工具。這種工具在互聯(lián)網(wǎng)上有大量的實例,因此在此只做簡單的介紹。
對播放行為的控制是三個大家非常熟悉的方法:start()、stop()和pause()。
通過static MediaPlayer create(Context, Uri)這個方法,可以獲得一個新創(chuàng)建的MediaPlayer對象。
在播放過程中,有幾個可以監(jiān)聽播放過程的監(jiān)聽器,如:
setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
監(jiān)聽音頻播放結(jié)束;
setOnErrorListener(MediaPlayer.OnErrorListener listener)
監(jiān)聽播放過程中的錯誤事件;
setOnPreparedListener(MediaPlayer.OnPreparedListener listener)
當(dāng)prepare()被調(diào)用時觸發(fā)。
然而,使用MediaPlayer播放時,也有一些問題。我們知道MediaPlayer在創(chuàng)建和銷毀時都會耗費大量的系統(tǒng)資源,且創(chuàng)建和銷毀的時間相對較長。此外,如果我們需要在同一時刻播放很多聲音,MediaPlayer是不支持的。
因此,我們需要一個更加輕量級的聲音播放工具。
Android提供了另外一種,叫做SoundPool,它適合播放那些需要反復(fù)播放,但時間較短的音效。它支持同時播放多種聲音,這些聲音在系統(tǒng)開始時會加載到列表中,按照這些聲音的id,我們可以調(diào)用這些音效。
下面我們進入一個實例看看SoundPool到底是怎么工作的。
例如,現(xiàn)在在一個五子棋游戲中,我們需要在棋子落盤的時候播放一段聲音。我們可以利用SoundPool,因為它時間很短,而且需要反復(fù)播放,并且我們不希望聲音占用太大資源。
先看看代碼:
private SoundPool soundPool; soundPool= newSoundPool(10,AudioManager.STREAM_SYSTEM,5); soundPool.load(this,R.raw.collide,1); soundPool.play(1,1, 1, 0, 0, 1);
代碼非常簡單,第一行是聲明了一個SoundPool對象,這個一般是作為類的成員屬性出現(xiàn)的。第二行將soundPool實例化,第一個參數(shù)為soundPool可以支持的聲音數(shù)量,這決定了Android為其開設(shè)多大的緩沖區(qū),第二個參數(shù)為聲音類型,在這里標識為系統(tǒng)聲音,除此之外還有AudioManager.STREAM_RING以及AudioManager.STREAM_MUSIC等,系統(tǒng)會根據(jù)不同的聲音為其標志不同的優(yōu)先級和緩沖區(qū),最后參數(shù)為聲音品質(zhì),品質(zhì)越高,聲音效果越好,但耗費更多的系統(tǒng)資源。
第三行,系統(tǒng)為soundPool加載聲音,第一個參數(shù)為上下文參數(shù),第二個參數(shù)為聲音的id,一般我們將聲音信息保存在res的raw文件夾下,如下圖所示。

第三個參數(shù)為聲音的優(yōu)先級,當(dāng)多個聲音沖突而無法同時播放時,系統(tǒng)會優(yōu)先播放優(yōu)先級高的。
第四行就是播放了,第一個參數(shù)為id,id即為放入到soundPool中的順序,比如現(xiàn)在collide.wav是第一個,因此它的id就是1。第二個和第三個參數(shù)為左右聲道的音量控制。第四個參數(shù)為優(yōu)先級,由于只有這一個聲音,因此優(yōu)先級在這里并不重要。第五個參數(shù)為是否循環(huán)播放,0為不循環(huán),-1為循環(huán)。最后一個參數(shù)為播放比率,從0.5到2,一般為1,表示正常播放。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android開發(fā)入門與進階教程》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android數(shù)據(jù)庫操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計有所幫助。
相關(guān)文章
Android 模仿QQ側(cè)滑刪除ListView功能示例
這篇文章主要介紹了Android 模仿QQ側(cè)滑刪除ListView功能示例,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03
Android自定義Dialog實現(xiàn)加載對話框效果
這篇文章將介紹如何定制當(dāng)今主流的對話框,通過自定義dialog實現(xiàn)加載對話框效果,具體實現(xiàn)代碼大家通過本文學(xué)習(xí)吧2018-05-05
Android EditText限制輸入字數(shù)的方法
這篇文章主要介紹了Android EditText限制輸入字數(shù)的方法,涉及Android針對EditText文本與字符串操作相關(guān)技巧,需要的朋友可以參考下2016-01-01
Android實現(xiàn)調(diào)用系統(tǒng)分享功能示例的總結(jié)
這篇文章主要介紹了通過Android調(diào)用系統(tǒng)分享文本信息、單張圖片、多個文件和指定分享到微信、QQ,同時分享圖片和文字的功能示例,小編覺得挺不錯,一起跟隨小編過來看看吧2018-05-05
activity 獲取rootView 設(shè)置backGroundColor的方法
下面小編就為大家?guī)硪黄猘ctivity 獲取rootView 設(shè)置backGroundColor的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
使用Android原生WebView+Highcharts實現(xiàn)可左右滑動的折線圖
折線圖是Android開發(fā)中經(jīng)常會碰到的效果,但由于涉及自定義View的知識,對許多剛?cè)腴T的小白來說會覺得很高深,下面這篇文章主要給大家介紹了關(guān)于如何使用Android原生WebView+Highcharts實現(xiàn)可左右滑動的折線圖的相關(guān)資料,需要的朋友可以參考下2022-05-05

