【问题标题】:SoundPool.Builder explained to a newbieSoundPool.Builder 向新手解释
【发布时间】:2021-11-19 11:12:13
【问题描述】:

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

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

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

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

感谢您的帮助。 /托尼

【问题讨论】:

    标签: android-studio kotlin soundpool soundeffect


    【解决方案1】:

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

    • 调用SoundPool.Builder().build()(默认设置看起来很适合测试)
    • 获取生成的SoundPool 并为您要添加的每个文件调用load 方法之一
    • 调用play,传递声音的ID(load 调用给你)

    应该很容易工作 - 我会在单个活动中设置它,以便您可以测试它,也许添加一个按钮,当您单击它时会发出声音。您最大的问题可能是加载声音 - 就个人而言,我会将它们粘贴在 assets 并使用 the load call that takes an 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()。这意味着如果您不希望在不久的将来播放声音,例如游戏结束,或者您的应用程序进入后台(因此请在 onPauseonStop 中调用 release)。再次需要时重新创建声音池。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-30
      • 2017-10-03
      • 2020-02-18
      • 2015-08-15
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多