首先建立assets目录,复制音效文件(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 所对应的资源加载声音。
int load(Context context, int resld, int priority)
//加载 fd 所对应的文件的offset开始、长度为length的声音。
int load(FileDescriptor fd, long offset, long length, int priority)
//从afd 所对应的文件中加载声音。
int load(AssetFileDescriptor afd, int priority)
//从path 对应的文件去加载声音。
int load(String path, int priority)
上面4个方法在加载声音之后,都会返回该声音的ID,以后程序就可以通过该声音的ID来播放指定声音。
SoundPool提供的播放指定声音的方法:
int play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
参数soundID:指定播放哪个声音;
参数leftVolume、rightVolume:指定左、右的音量:
参数priority:指定播放声音的优先级,数值越大,优先级越高;
参数loop:指定是否循环,0:不循环,-1:循环,其他值表示要重复播放的次数;
参数rate:指定播放的比率,数值可从0.5到2, 1为正常比率。
网友评论