1

我生成一个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");

它不起作用,因为 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,非常感谢任何帮助!

4

2 回答 2

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();
    }
于 2012-07-25T12:03:21.220 回答
0

您必须很好地设计应用程序的架构,然后才能实现您所要求的。

根据我的说法,您可以执行以下操作。

  1. 使用 midiReady(midi 文件的 uri) 方法设计接口
  2. 此接口由包含媒体播放器的活动实现
  3. 一旦 midi 文件生成完成,调用方法 midiReady(midi 文件的 uri)
  4. 现在,由于您的活动实现了接口回调,因此在您的活动上调用接口回调,您可以设置媒体播放器以播放 midi 文件,因为在回调中,您拥有 midi 文件的 uri。

以上metinoed点只是一个模糊的想法,你可以做什么。有了上面的模糊想法,你可以继续实施。

希望这会有所帮助。谢谢。

于 2012-07-24T10:33:22.273 回答