2

我已经搜索并阅读了几个 SoundPool 问题以及如何在 Android Studio 中用 Kotlin 语言构建它至少一个小时,但我不明白,我无法让它工作。这些视频通常只是编写代码,并没有解释每个部分的作用,因此很难为我的应用程序重写代码。

有人可以为我一步一步地解释它,或者至少将我指向一个可以的网站或视频吗?我需要了解所有步骤,因为我是新手。

这就是我想要做的: 当用户到达 win 活动时,我想播放一个短的 wav 文件。当用户正确回答导致获胜活动的问题时,我还想播放一个简短的 wav 文件。

所以“正确答案”的声音会在我的 playerCard 函数中播放,“你赢了”的声音会在获胜活动开始时播放。我在我的 res 中创建了一个原始资源文件并在那里复制了 wav 文件。如果您想查看代码,这是我的 github:https ://github.com/Noccis/TonisApp.git

我很感谢任何帮助。/托尼

4

1 回答 1

0

我没有用过SoundPool,但我可以尝试给你一些帮助。首先,如果您还没有查看文档,请查看文档- 在介绍的底部附近,它们描述了您正在做的事情。看起来你基本上需要做的是:

  • 调用SoundPool.Builder().build()(默认值看起来很适合测试)
  • 获取结果并为要添加的每个文件SoundPool调用其中一种方法load
  • 调用play它,传递声音的 ID(load调用给你)

应该很容易工作 - 我会在一个活动中设置它,这样你就可以测试它,也许添加一个按钮,当你点击它时会发出声音。您最大的问题可能是加载声音 - 就个人而言,我会将它们插入assets并使用需要AssetFileDescriptor

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。再次需要时重新创建声音池。onPauseonStop

请记住,如果您切换活动,并且池在另一个活动中,那已经消失了(应该是released!),您需要创建一个新活动。不过,只需先专注于一个简单的测试,让它工作,然后让它适合你的应用程序需要做的事情

于 2021-09-27T16:53:32.677 回答