android - 從資產目錄播放音頻文件




audio android-mediaplayer (2)

此功能將正常工作:)

// MediaPlayer m; /*assume, somewhere in the global scope...*/

public void playBeep() {
    try {
        if (m.isPlaying()) {
            m.stop();
            m.release();
            m = new MediaPlayer();
        }

        AssetFileDescriptor descriptor = getAssets().openFd("beepbeep.mp3");
        m.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
        descriptor.close();

        m.prepare();
        m.setVolume(1f, 1f);
        m.setLooping(true);
        m.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我有以下代碼:

AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor());
player.prepare();
player.start();

問題是,當我運行這段代碼時,它開始按照字母順序播放資產目錄中的所有音頻文件,而不是只播放我請求的音頻文件。 我究竟做錯了什麼? 有沒有更好的方法來播放資產目錄中的音頻文件?

後續問題:將音頻文件保存在資產目錄中並將它們保存在res / raw目錄中是否有區別? 除了他們在資產目錄中沒有獲得ID的事實。 如果我將音頻文件移動到res / raw文件夾,那麼我在重新使用MediaPlayer遇到問題,因為setDataSource()沒有id參數。 我無法找到處理這類問題的良好指導方針。


player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());

如果資產目錄中只有一個文件,則您的版本可以正常工作。 資產目錄內容實際上不是磁盤上的“真實文件”。 他們都是一個接一個地放在一起。 因此,如果您不指定從何處開始以及要讀取多少字節,則播放器將讀取到最後(即將繼續播放資產目錄中的所有文件)





android-assets