我產生一個MIDI文件,並把它寫這樣的:的Android的MediaPlayer - 切換到下一首歌曲
File output = new File("exampleout.mid");
我想我可能需要改變這一點,所以它是在正確的文件夾(只是一個可讀/寫文件夾,也許音樂/)
接下來我想用MediaPlayer播放這個MIDI文件,但我無法弄清楚如何加載文件。
mediaPlayer = MediaPlayer.create(this, R.raw.test3);
只從只讀目錄/ res/raw加載。但如果我嘗試這樣的:
mediaPlayer = MediaPlayer.create(this, "file://exampleout");
它不起作用,因爲創建需要一個整數作爲輸入。我試用了AssetFileDescriptor,但還沒有弄明白。
同時,我想生成一個新的midi文件並將其加載到mediaPlayer(鏈接)中,以便在第一個文件播放完畢時播放。
MediaPlayer mediaPlayer = MediaPlayer.create(Activity.this,R.raw.a1);
mediaPlayer.setOnCompletionListener(new musicCompletionListener());
mediaPlayer.start();
private class musicCompletionListener implements OnCompletionListener {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.setDataSource(WHATTOPUTHERE)
mediaPlayer.release();
}
}
我的問題真的是如何調用該文件。我不能使用字符串,r.raw目錄是不可能的,因爲它的只讀性質。我覺得這個解決方案並不難,但我只是從C++中簡化了java,任何幫助都非常感謝!
只是一句話。我嘗試setDataSource(字符串),但這給了我和IOerror,如http://stackoverflow.com/questions/9625680/mediaplayer-setdatasource-better-to-use-path-or-filedescriptor中所述所以我想我需要一個方式就像,AssetManager assetManager = Context.getAssets(); AssetFileDescriptor fileDescriptor = assetManager.openFd(「a2.mp3」); mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor()); – dorien 2012-07-24 13:26:43
您必須在setDataSource中傳遞Uri,您可以按照以下方式獲取它。 String path =「你存儲動態生成的midi文件的路徑」; Uri midiUri = Uri.parse(path); 希望這會解決你的問題。 – 2012-07-25 06:22:53
@Android_Crazy謝謝。我嘗試過這個。它給了我'Uri無法在'setDataSource(Uri)'上解析成變量''。我這樣做:'String path =「/data/data/com.example.optimuse/exampleout.mid」; \t \t Uri midiUri = Uri.parse(path); \t \t \t \t // String filePath = topDirFile.getAbsolutePath()+ File.separator +「exampleout.mid」; \t嘗試{ \t \t \t mediaPlayer.setDataSource(Uri); \t \t //mediaPlayer.setDataSource("/res/raw/test3「); \t \t} catch(Exception e1){ \t \t \t e1.printStackTrace(); \t} – dorien 2012-07-25 09:55:34