Android SoundPool 不播放 wav 格式的声音
Posted
技术标签:
【中文标题】Android SoundPool 不播放 wav 格式的声音【英文标题】:Android SoundPool is not playing wav format sound 【发布时间】:2019-10-08 21:01:39 【问题描述】:当我单击按钮时,我正在尝试从原始资源文件播放 .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 模拟器和真实设备中尝试过,但它不起作用。
【问题讨论】:
【参考方案1】:将声音文件加载到内存中需要时间,因此将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
方法来检查这一点。
【讨论】:
以上是关于Android SoundPool 不播放 wav 格式的声音的主要内容,如果未能解决你的问题,请参考以下文章