gpt4 book ai didi

Android SoundPool 不播放 wav 格式的声音

转载 作者:行者123 更新时间:2023-11-29 00:52:13 25 4
gpt4 key购买 nike

当我点击按钮时,我正在尝试播放来自原始资源文件的 .wav 格式声音,但是当我点击按钮时没有任何反应,并且没有 logcat 错误。

我的 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)
}

}

编辑:我已经在 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 那么它就完全加载了。您也可以使用 SoundPoolsetOnLoadCompleteListener 方法来检查这一点。

关于Android SoundPool 不播放 wav 格式的声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58294035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com