Android Kotlin-添加更多变体-声音池

Android Kotlin-添加更多变体-声音池,android,kotlin,audio,action,soundpool,Android,Kotlin,Audio,Action,Soundpool,请帮忙。我需要添加2个声音ogg到一个行动,这将随机改变。我该怎么做?我不知道怎么做。多谢各位 Thread(Runnable { val assets = context.resources.assets sounds[SOUND_DIE] = soundPool.load(assets.openFd("die.ogg"), 1) sounds[SOUND_HIT] = soundPoo

请帮忙。我需要添加2个声音ogg到一个行动,这将随机改变。我该怎么做?我不知道怎么做。多谢各位

        Thread(Runnable {
            val assets = context.resources.assets
            sounds[SOUND_DIE] = soundPool.load(assets.openFd("die.ogg"), 1)
            sounds[SOUND_HIT] = soundPool.load(assets.openFd("hit.ogg"), 1)
            sounds[SOUND_POINT] = soundPool.load(assets.openFd("point.ogg"), 1)
            sounds[SOUND_SWOOSHING] = soundPool.load(assets.openFd("swooshing.ogg"), 1)
            sounds[SOUND_WING] = soundPool.load(assets.openFd("wing.ogg"), 1)
        }).start()
    }
您可以对集合调用
.random()
,以获取随机项。因此,不要将每种声音类型(如
sound\u HIT
)映射到一种声音,而是将每种声音映射到一个列表(如果这是您的全部内容,则可以包含一项)。然后,对于您加载的每个声音,只需将其添加到相应的列表中即可

这样,当你想播放声音时,你可以去
播放(sounds[sound\u SWOOSHING].random())
,它只会从该声音类型的列表中选择一个

你可以按现在的方式来设置

sounds = mapOf(
    SOUND_DIE to listOf(
        soundPool.load(assets.openFd("die.ogg"), 1),
        soundPool.load(assets.openFd("yargh.ogg"), 1)
    ),
    SOUND_HIT to ...
)
但我建议添加一个函数来处理所有加载:

fun loadSound(filename: String) = soundPool.load(assets.openFd(filename), 1)

sounds = mapOf(
    SOUND_DIE to listOf(
        loadSound("die.ogg"),
        loadSound("yargh.ogg")
    ),
    SOUND_HIT to ...
)
或者如果你想变得更花哨

val filenamesToTypes = mapOf(
    "die.ogg" to SOUND_DIE,
    "yargh.ogg" to SOUND_DIE,
    "point.ogg" to SOUND_POINT,
   ...
)

// build your sounds collection by grouping all the filenames
// with the same sound type, and transform each filename to a
// loaded sound, so you get a map of SoundType -> List<Sound>
sounds = filenamesToTypes.entries.groupBy(
    keySelector = { it.value },
    valueTransform = { loadSound(it.key) }
)
val filenamesToTypes=mapOf(
“去死吧,去死吧”,
“啊,ogg”听起来像死了,
“point.ogg”到SOUND_point,
...
)
//通过对所有文件名进行分组来构建声音集合
//使用相同的声音类型,并将每个文件名转换为
//已加载声音,因此您可以获得SoundType->List的地图
sounds=filenamesToTypes.entries.groupBy(
keySelector={it.value},
valueTransform={loadSound(it.key)}
)

如果感觉太复杂,不要担心,前两个例子足够简洁,希望很容易理解!我只是喜欢当你可以快速地组织东西时:)

你能帮我修改代码的样子吗?