我生成一个midi文件并按如下方式编写:
File output = new File("exampleout.mid");
我想我可能需要更改它,因此它位于正确的文件夹中(只是一个可读/可写的文件夹,也许是音乐/)
接下来我想用MediaPlayer播放这个midi文件,但我无法弄清楚如何加载文件。
mediaPlayer = MediaPlayer.create(this, R.raw.test3);
仅从只读目录/ res / raw加载。但是,如果我尝试类似的东西:
mediaPlayer = MediaPlayer.create(this, "file://exampleout");
它不起作用,因为create需要一个整数作为输入。我尝试使用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,非常感谢任何帮助!
答案 0 :(得分:1)
我将文件存储在缓存目录中,这有效!
File output = new File(getCacheDir() + "/exampleout.mid");
然后调用文件:
String filePath = null;
File file = null;
FileInputStream inputStream = null;
try {
filePath = getCacheDir() + "/exampleout.mid";
file = new File(filePath);
inputStream = new FileInputStream(file);
if(inputStream.getFD().valid())
{
System.out.println("Valid!");
}
} catch (Exception e1) {
e1.printStackTrace();
System.exit(-1);
}
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(inputStream.getFD());
inputStream.close();
} catch (Exception e1) {
e1.printStackTrace();
System.exit(-1);
}
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 1 :(得分:0)
你必须很好地设计你的应用程序的架构,然后才能实现你所要求的。
据我所知你可以做到以下几点。
上述元素点只是一个微弱的想法,你可以做什么。有了上述微弱的想法,你可以继续实施。
希望这会有所帮助。 感谢。