首先建立assets目錄描孟,復(fù)制音效文件(mp3)進去酌壕。SoundPool適合用來播放簡短的音效推捐,不適合播放長音頻。
點擊按鈕播放音頻的代碼如下(MainActivity):
package com.starock.testjetplayer
import android.media.AudioAttributes
import android.media.SoundPool
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var mSoundPool: SoundPool? = null
var audioAttributes: AudioAttributes? = null
var soundId = 0
audioAttributes = AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.setUsage(AudioAttributes.USAGE_MEDIA)
.build()
mSoundPool = SoundPool.Builder()
.setMaxStreams(3)
.setAudioAttributes(audioAttributes)
.build()
soundId = mSoundPool.load(assets.openFd("CLAP.mp3"), 1)
bPlay.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View?) {
println("play")
mSoundPool.play(soundId, 1F, 1F, 0, 0, 1F);
}
})
}
}
SoundPool提供了如下4個load方法:
//從 resld 所對應(yīng)的資源加載聲音。
int load(Context context, int resld, int priority)
//加載 fd 所對應(yīng)的文件的offset開始衫画、長度為length的聲音毫炉。
int load(FileDescriptor fd, long offset, long length, int priority)
//從afd 所對應(yīng)的文件中加載聲音。
int load(AssetFileDescriptor afd, int priority)
//從path 對應(yīng)的文件去加載聲音削罩。
int load(String path, int priority)
上面4個方法在加載聲音之后碘箍,都會返回該聲音的ID,以后程序就可以通過該聲音的ID來播放指定聲音鲸郊。
SoundPool提供的播放指定聲音的方法:
int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
參數(shù)soundID:指定播放哪個聲音丰榴;
參數(shù)leftVolume、rightVolume:指定左秆撮、右的音量:
參數(shù)priority:指定播放聲音的優(yōu)先級四濒,數(shù)值越大,優(yōu)先級越高职辨;
參數(shù)loop:指定是否循環(huán)盗蟆,0:不循環(huán),-1:循環(huán)舒裤,其他值表示要重復(fù)播放的次數(shù)喳资;
參數(shù)rate:指定播放的比率,數(shù)值可從0.5到2腾供, 1為正常比率仆邓。