Android開發之SoundPool使用具體解釋

2021-09-07 05:26:15 字數 2322 閱讀 2827

使用

soundpool

mediaplayer

顯得有些不太適合了。由於

mediaplayer

存在例如以下缺點:

1)延時時間較長,且資源佔用率高。

2)android

中除了mediaplayer

soundpool

soundpool

使用音效池的概念來管理多個短促的音效,比如它能夠開始就載入

20個音效。以後在程式中按音效的id

soundpool

提供了乙個構造器,

該構造器能夠指定它總共支援多少個聲音(也就是池的大小)、聲音的品質等。構造器例如以下:

soundpool(int maxstreams, int streamtype, int srcquality)

:第乙個引數指定支援多少個聲音;第二個引數指定聲音型別:第三個引數指定聲音品質。

一旦得到了soundpool物件之後,接下來就可呼叫soundpool的多個過載的load方法來載入聲音了。

soundpool

提供了例如以下4個

load

方法:

int load(context context, int resld, int priority)

:從resld

所相應的資源載入聲音。

int load(filedescriptor fd, long offset, long length, int priority

):載入

fd 所相應的檔案的

offset

開始、長度為

length

的聲音。

int load(assetfiledescriptor afd, int priority)

:從afd

所相應的檔案裡載入聲音。

int load(string path, int priority):從

path

相應的檔案去載入聲音。

上面4個方法中都有乙個priority引數,該引數眼下還沒有不論什麼作用,android建議將該 引數設為1,保持和未來的相容性。

上面4個方法載入聲音之後,都會返回該聲音的的

id,以後程式就能夠通過該聲音的

id

soundpool

int play(int soundid, float leftvolume, float rightvolume, int priority, int loop, float rate)

leftvolume

、rightvolume

指定左、右的音量:

priority

loop

指定是否迴圈,

0為不迴圈,

-1為迴圈。

rate

0.5到2,

1為正常比率。

為了更好地管理soundpool所載入的每乙個聲音的1d,程式通常會使用乙個hashmap,integer>物件來管理聲音。

歸納起來,使用

soundpool

1)呼叫soundpool

的構造器建立

soundpool

的物件。

2)呼叫soundpool

物件的load()

方法從指定資源、檔案裡載入聲音。

最好使用hashmap< integer, integer>

來管理所載入的聲音。

3)呼叫soundpool

的play

以下的程式示範了怎樣使用

soundpool

程式**例如以下:

publicclasssoundpooldemoextendsactivity

} };

btn1

.setonclicklistener(listener);

btn2

.setonclicklistener(listener);

btn3

.setonclicklistener(listener);

} }程式執行效果圖:

實際使用

soundpool

soundpool

儘管能夠一次性載入多個聲音。但因為記憶體限制,因此應該避免使用

soundpool

soundpool

儘管soundpool

比mediaplayer

的效果好,但也不是絕對不存在延遲問題。尤其在那些效能不太好的手機中,

soundpool

的延遲問題會更嚴重。

Android開發之簡訊

1.sms主要結構 id 簡訊序號,如100 thread id 對話的序號,如100,與同乙個手機號互發的簡訊,其序號是相同的 person 發件人,如果發件人在通訊錄中則為具體姓名,陌生人為null date 日期,long型,如1346988516,可以對日期顯示格式進行設定 protocol...

Android開發之SparseArray簡介

1 定義 sparsearray,即稀疏陣列,這個物件和hashmap類似,也是乙個容器,但是它的key是整數型別。2 特點 sparsearray不需要對key和value進行auto boxing 將原始型別封裝為物件型別,比如把int型別封裝成integer型別 結構比hashmap簡單 sp...

Android開發之服務

建立服務時會自動繼承service類,service類中有乙個onbind 方法,這是唯一乙個抽象的方法,然後我們一般需要重寫oncreate onstartcommand ondestory 方法,其中oncreate 只在建立服務的時候才會呼叫,這一點和onstartcommand 是有區別的,...