提问人:Noccis 提问时间:9/27/2021 更新时间:9/28/2021 访问量:937
SoundPool.Builder 向新手解释
SoundPool.Builder explained to a newbie
问:
我已经搜索并阅读了几个 SoundPool 问题以及如何在 Android Studio 中以 Kotlin 语言构建它至少一个小时,但我不明白,我无法让它工作。这些视频通常只是编写代码,并没有解释每个部分做什么,因此很难为我的应用程序重写代码。
有人可以为我一步一步地解释一下,或者至少给我指出一个可以的网站或视频吗? 我需要了解所有步骤,因为我是新手。
这是我想做的:我想在用户到达 win 活动时播放一个简短的 wav 文件。我还想在用户正确回答导致获胜活动的问题时播放一个简短的 wav 文件。
因此,“正确答案”的声音将在我的 playerCard 函数中播放,而“You won”声音将在获胜活动开始时播放。 我在我的 res 中创建了一个原始资源文件,并将 wav 文件复制到那里。 如果你想看代码,这是我的github:https://github.com/Noccis/TonisApp.git
我感谢任何帮助。 /托尼
答:
我没有使用过,但我可以尝试给你一些帮助。首先,如果您还没有,请查看文档 - 在介绍的底部附近,它们描述了您正在做的事情。看起来你基本上需要做的是:SoundPool
- 调用(默认值在测试中看起来不错)
SoundPool.Builder().build()
- 获取结果,并对要添加的每个文件调用其中一个方法
SoundPool
load
- 调用它,传递声音的 ID(调用给你)
play
load
这应该很容易工作 - 我会在单个活动中设置它,以便您可以测试它,也许添加一个按钮,当您单击它时会发出声音。你最大的问题可能是加载声音 - 就我个人而言,我会把它们放进去,并使用接受 AssetFileDescriptor
的加载调用assets
val assetManager = context.getAssets()
val winSoundFile = assetManager.openFd("sounds/winners.wav")
val winSoundID = soundPool.load(winSoundFile, 1)
但这更多的是为了便于组织——如果你愿意,你可以把它们留在里面,然后去做res/raw
val winSoundId = soundPool.load(context, R.raw.winners, 1)
文档中的其他内容是您需要关心的,例如,您应该在不使用声音池时调用它。这意味着,如果您不希望在不久的将来播放声音,例如游戏结束,或者您的应用程序进入后台(因此请拨打或)。当您再次需要时,请重新创建声音池。release()
release
onPause
onStop
请记住,如果您切换了活动,并且游泳池在另一个活动中举行,那么它就消失了(并且应该是 d!),您需要创建一个新的活动。不过,只需先专注于一个简单的测试,让它正常工作,然后让它适合您的应用程序需要做的事情release
评论