Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SoundPool未播放wav格式的声音_Android_Kotlin_Soundpool - Fatal编程技术网

Android SoundPool未播放wav格式的声音

Android SoundPool未播放wav格式的声音,android,kotlin,soundpool,Android,Kotlin,Soundpool,当我点击按钮时,我正在尝试播放原始资源文件中的.wav格式的声音,但当我点击按钮时,什么也没有发生,并且没有logcat错误 My MainActivity.kt: package com.example.exampleofmusicapp import android.media.AudioAttributes import android.media.AudioManager import android.media.SoundPool

当我点击按钮时,我正在尝试播放原始资源文件中的.wav格式的声音,但当我点击按钮时,什么也没有发生,并且没有logcat错误

My MainActivity.kt:

 package com.example.exampleofmusicapp

       import android.media.AudioAttributes
       import android.media.AudioManager
       import android.media.SoundPool
       import android.os.Build
       import androidx.appcompat.app.AppCompatActivity
       import android.os.Bundle
       import android.view.View


    class MainActivity : AppCompatActivity() {

    lateinit var soundPool: SoundPool

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            var audioAttrs: AudioAttributes = AudioAttributes.Builder()
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                .setUsage(AudioAttributes.USAGE_MEDIA)
                .build()

             soundPool = SoundPool.Builder()
                .setMaxStreams(2)
                .setAudioAttributes(audioAttrs)
                .build()
        }

        else{
            soundPool = SoundPool(2, AudioManager.STREAM_MUSIC, 0)
        }

    }

    fun playSound1(view: View) {
        val sound1 = soundPool.load(this, R.raw.sound1, 1)
        soundPool.play(sound1, 1.0f, 1.0f, 1, 0, 1.0f)
    }

    }

编辑:我在emulator 2和真实设备中尝试过这一点,但它不起作用。

将声音文件加载到内存需要时间,因此将
val sound1
更改为
var sound1
,使其全局化,并在
onCreate
方法末尾实例化,如下所示:

class MainActivity : AppCompatActivity() {

    lateinit var soundPool: SoundPool
    var sound1 : Int = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
            var audioAttrs: AudioAttributes = AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .setUsage(AudioAttributes.USAGE_MEDIA)
                    .build()

            soundPool = SoundPool.Builder()
                    .setMaxStreams(2)
                    .setAudioAttributes(audioAttrs)
                    .build()
        }

        else{
            soundPool = SoundPool(2, AudioManager.STREAM_MUSIC, 0)
        }
        sound1 = soundPool.load(this, R.raw.sound1, 1)

    }

    fun playSound1(view: View) {
        if(sound1 != 0) {
            soundPool.play(sound1, 1.0f, 1.0f, 1, 0, 1.0f)
        }
    }

}
然后您可以检查
sound1
值,如果它不等于
0
,则它将完全加载。您还可以使用
SoundPool
setOnLoadCompleteListener
方法来检查这一点