美文网首页
kotlin使用SoundPool播放mp3的简单例子

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

作者: StormerX | 来源:发表于2020-04-16 21:41 被阅读0次

    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为正常比率。

    相关文章

      网友评论

          本文标题:kotlin使用SoundPool播放mp3的简单例子

          本文链接:https://www.haomeiwen.com/subject/xhrjvhtx.html