kotlin使用SoundPool播放mp3的简单例子

SoundPool适合用来播放简短的音效,不适合播放长音频。

首先建立assets目录,复制音效文件(mp3)进去。

首界面加个按钮

点击按钮播放音频的代码如下(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为正常比率。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容