首页 > 解决方案 > Android 资源 - 从语音包中检索随机语音线路

问题描述

对于我正在编程的一个小游戏,出于风味原因,我试图为用户提供一些语音线路。我已经录了好几行了,都是languageCode_packageName_name01.mp3.

由于我不想一直播放相同的几行,所以我打算录制几个版本,并在检索时随机选择一个。例如,两次检索“开始”的行可能会导致播放de_std_start01然后de_std_start06

由于我对 android 很陌生,所以我想就这个实现寻求帮助。我不确定我应该使用原始文件夹还是资产文件夹来完成此任务。如果可能的话,我想实现这样的文件夹结构,据我了解,这需要使用 assets 文件夹,以便能够简单地将新文件拖放到文件夹中,然后将其考虑在内用于随机选择。:

<root folder>
- de
-- std
--- start
---- start01.mp3
---- start02.mp3
...

当给定指定de,std和的参数时start,我将如何检索不同的文件并随机选择其中一个?谢谢你的帮助!

标签: javaandroidandroid-mediaplayerandroid-resources

解决方案


如果您将它们包含在 raw 文件夹中,您应该可以这样访问它们:

//from your activity

AudioService audioService = new AudioService;
int randomTune = audioService.getRandom();
MediaPlayer mediaPlayer = MediaPlayer.create(context, randomTune);
mediaplayer.start;

//From a seperate service class

Class AudioService {

    private int[] audioFiles = {
        R.raw.song1, R.raw.song2, R.raw.song3, R.raw.song4, R.raw.song5, R.raw.song6
    };

我相信您的文件夹结构会有些灵活,因为您使用 R 类包装实际资源并在代码中引用它。

public int getRandom(){
  // Here i am asking for a random number between 0 and 1, multiplying by 6, rounding 
  // it down, and explicitly casting to int.
  // Result will be random int between 0 and 5. This will be the array index that 
  // randomly chooses the song.  
    private int randomIndex;
    randomindex = (int) Math.floor(6 * Math.random);
    return this.audioFiles[randomIndex];
}

}


推荐阅读