gpt4 book ai didi

java - Android MediaPlayer - 切换到下一首歌曲

转载 作者:行者123 更新时间:2023-11-30 04:06:09 24 4
gpt4 key购买 nike

我生成一个 midi 文件并这样写:

File output = new File("exampleout.mid");

我想我可能需要更改它,所以它在正确的文件夹中(只是一个可读/可写的文件夹,也许是 Music/)

接下来我想用 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,非常感谢任何帮助!

最佳答案

我将文件存储在缓存目录中,有效!

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();
}

关于java - Android MediaPlayer - 切换到下一首歌曲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11628777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com