我产生一个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