点击播放随机语音文件

时间:2012-10-22 19:13:48

标签: android audio random resources playback

我有这个非常基本的应用程序,它有1个按钮和X个语音文件。语音文件位于raw /.

下的res /文件夹中

点击按钮后,我希望该应用播放随机语音文件。这是我到目前为止所做的:

Button playNasr = (Button) findViewById(R.id.button1);
    playNasr.setOnClickListener(new OnClickListener() {

        public void onClick(View arg0) {
            rand = randomGenerator.nextInt(6) + 1;
            // here's where I'm at a loss, I want to be able to concatenate
            // the random number to the "voice00" string to form
            // "voice001/2/3/etc..." in correspondence to how my voice files
            // are named.
            mp = MediaPlayer.create(Main.this, R.raw.voice00) + rand;
            mp.start();
        }
    });

感谢任何帮助,提前谢谢

1 个答案:

答案 0 :(得分:2)

你应该尝试这样的事情:

String voiceStr = "voice00";
MediaPlayer mp = new MediaPlayer();
Resources res = getResources();
String pkgName = getPackageName();

playNasr.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        rand = randomGenerator.nextInt(6) + 1;
        // "voice00x"
        String id = voiceStr + rand;
        // Get raw resource ID
        int identifier = res.getIdentifier(id, "raw", pkgName);
        AssetFileDescriptor afd = res.openRawResourceFd(identifier);

        // Reuse MediaPlayer or else you will exhaust resources
        mp.reset();
        mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength();
        mp.prepare();
        mp.start();
    }
}

通过这种方式,您可以重复使用MediaPlayer实例(如果您还没有遇到错误,请尝试重复按下按钮 - 最终会出错)并且可以动态设置数据源。您可能希望对此进行优化以将整数格式化为“001”,“001”等,并且能够处理“010”,但我只是为了示例而硬编码。

相关问题