SoundPool.Builder 向新手解释
SoundPool.Builder explained to a newbie
我已经用 Kotlin 语言搜索并阅读了几个 SoundPool 问题以及如何在 Android Studio 中构建它至少一个小时,但我不明白,也无法让它工作。这些视频通常只是编写代码,并没有解释每个部分的作用,因此很难为我的应用程序重写代码。
谁能一步一步地为我解释一下,或者至少给我一个可以的网站或视频?
由于我是新手,所以我需要了解所有步骤。
这就是我想要做的:
当用户到达胜利 activity 时,我想播放一个短的 wav 文件。当用户回答正确导致获胜的问题时,我还想播放一个简短的 wav 文件 activity。
因此,“正确答案”声音将在我的 playerCard 函数中播放,而“您赢了”声音将在获胜 activity 开始时播放。
我在我的 res 中创建了一个原始资源文件,并将 wav 文件复制到那里。
如果你想看代码这是我的 github : https://github.com/Noccis/TonisApp.git
感谢您的帮助。
/托尼
我没用过SoundPool
但我可以尝试给你一些帮助。首先,如果您还没有查看 the docs - 在介绍的底部附近,他们描述了您正在做的事情。看起来您基本上需要做的是:
- 调用
SoundPool.Builder().build()
(默认设置看起来很适合测试)
- 获取结果
SoundPool
并为每个要添加的文件调用 load
方法之一
- 对其调用
play
,传递声音的 ID(load
调用为您提供)
应该 很容易工作 - 我将它设置在一个 activity 中,这样你就可以测试它,也许添加一个按钮,当你点击它。你最大的问题可能是加载声音 - 就个人而言,我会把它们放在 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()
。这意味着如果您不希望在不久的将来播放声音,例如游戏结束时,或者如果您的应用程序进入后台(所以在 onPause
或 [=24= 中调用 release
]).再次需要时重新创建声音池。
请记住,如果您切换活动,并且游泳池在另一个活动中举行,那会消失(应该是 release
d!),您需要创建一个新活动。首先只关注一个简单的测试,让它工作,然后让它适合你的应用程序需要做的事情
我已经用 Kotlin 语言搜索并阅读了几个 SoundPool 问题以及如何在 Android Studio 中构建它至少一个小时,但我不明白,也无法让它工作。这些视频通常只是编写代码,并没有解释每个部分的作用,因此很难为我的应用程序重写代码。
谁能一步一步地为我解释一下,或者至少给我一个可以的网站或视频? 由于我是新手,所以我需要了解所有步骤。
这就是我想要做的: 当用户到达胜利 activity 时,我想播放一个短的 wav 文件。当用户回答正确导致获胜的问题时,我还想播放一个简短的 wav 文件 activity。
因此,“正确答案”声音将在我的 playerCard 函数中播放,而“您赢了”声音将在获胜 activity 开始时播放。 我在我的 res 中创建了一个原始资源文件,并将 wav 文件复制到那里。 如果你想看代码这是我的 github : https://github.com/Noccis/TonisApp.git
感谢您的帮助。 /托尼
我没用过SoundPool
但我可以尝试给你一些帮助。首先,如果您还没有查看 the docs - 在介绍的底部附近,他们描述了您正在做的事情。看起来您基本上需要做的是:
- 调用
SoundPool.Builder().build()
(默认设置看起来很适合测试) - 获取结果
SoundPool
并为每个要添加的文件调用load
方法之一 - 对其调用
play
,传递声音的 ID(load
调用为您提供)
应该 很容易工作 - 我将它设置在一个 activity 中,这样你就可以测试它,也许添加一个按钮,当你点击它。你最大的问题可能是加载声音 - 就个人而言,我会把它们放在 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()
。这意味着如果您不希望在不久的将来播放声音,例如游戏结束时,或者如果您的应用程序进入后台(所以在 onPause
或 [=24= 中调用 release
]).再次需要时重新创建声音池。
请记住,如果您切换活动,并且游泳池在另一个活动中举行,那会消失(应该是 release
d!),您需要创建一个新活动。首先只关注一个简单的测试,让它工作,然后让它适合你的应用程序需要做的事情