Android MediaPlayer - 切换到下一首歌曲

时间:2012-07-24 10:20:34

标签: java android audio media-player midi

我生成一个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,非常感谢任何帮助!

2 个答案:

答案 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)

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

据我所知你可以做到以下几点。

  1. 使用midiReady(midi文件的uri)方法设计界面
  2. 此界面由包含mediaplayer
  3. 的活动实施
  4. midi文件生成完成后调用midiReady方法(midi文件的uri)
  5. 现在,由于您的活动实现了界面回调,您的活动会调用它,您可以设置媒体播放器播放midi文件,因为在回调中你有你的midi文件。
  6. 上述元素点只是一个微弱的想法,你可以做什么。有了上述微弱的想法,你可以继续实施。

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