播放資源目錄中的音頻文件我有以下代碼:AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");player = new MediaPlayer();player.setDataSource(afd.getFileDescriptor());player.prepare();player.start();問題是,當我運行這段代碼時,它會按字母順序開始播放資源目錄中的所有音頻文件,而不是只播放我請求的音頻文件。我究竟做錯了什么?有沒有更好的方法從資源目錄播放音頻文件?后續(xù)問題:將音頻文件保存在資源目錄中并將它們保存在res / raw目錄中是否有區(qū)別?除了他們沒有獲得ID,如果他們在資產(chǎn)目錄中的事實。如果我將音頻文件移動到res / raw文件夾,那么我有一個重用MediaPlayers 的問題,因為沒有id參數(shù)setDataSource()。我找不到處理這類問題的好指南。
3 回答

飲歌長嘯
TA貢獻1951條經(jīng)驗 獲得超3個贊
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
如果您在資源目錄中只有一個文件,那么您的版本將起作用。資產(chǎn)目錄內(nèi)容實際上不是磁盤上的“真實文件”。所有這些都是一個接一個地組合在一起。因此,如果您沒有指定從哪里開始以及要讀取多少字節(jié),則播放器將讀到最后(即,將繼續(xù)播放assets目錄中的所有文件)

ITMISS
TA貢獻1871條經(jīng)驗 獲得超8個贊
這個功能會正常工作:)
// 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(); }}

互換的青春
TA貢獻1797條經(jīng)驗 獲得超6個贊
這是我的靜態(tài)版本:
public static void playAssetSound(Context context, String soundFileName) { try { MediaPlayer mediaPlayer = new MediaPlayer(); AssetFileDescriptor descriptor = context.getAssets().openFd(soundFileName); mediaPlayer.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength()); descriptor.close(); mediaPlayer.prepare(); mediaPlayer.setVolume(1f, 1f); mediaPlayer.setLooping(false); mediaPlayer.start(); } catch (Exception e) { e.printStackTrace(); }}
- 3 回答
- 0 關(guān)注
- 660 瀏覽
添加回答
舉報
0/150
提交
取消