【发布时间】:2011-06-16 17:03:18
【问题描述】:
我正在尝试制作一个可以同时播放不同 MIDI 文件的应用。这些文件不会流式传输,我想将它们包含在 apk 中。
最多可以同时播放 12 个...Mp3 或两者的组合也是合适的替代品,但现在 midi 是理想的。
这有可能吗?提前感谢堆栈溢出天才! :)
-EltMrx
【问题讨论】:
我正在尝试制作一个可以同时播放不同 MIDI 文件的应用。这些文件不会流式传输,我想将它们包含在 apk 中。
最多可以同时播放 12 个...Mp3 或两者的组合也是合适的替代品,但现在 midi 是理想的。
这有可能吗?提前感谢堆栈溢出天才! :)
-EltMrx
【问题讨论】:
播放单个声音的一种简单方法是使用MediaPlayer。将您的声音文件放在 /res/raw 文件夹中,然后使用 R 常量调用以下方法,例如playSound(R.raw.sound_file_name) 其中playSound 看起来像这样:
private void playSound(int soundResId) {
MediaPlayer mp = MediaPlayer.create(context, soundResId);
if (mp == null) {
Log.warn("playSound", "Error creating MediaPlayer object to play sound.");
return;
}
mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.e("playSound", "Found an error playing media. Error code: " + what);
mp.release();
return true;
}
});
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
mp.start();
}
现在,同时播放多个声音有点复杂,但有一个很好的解决方案here。
【讨论】:
正如@uncheck 所说,您可以使用标准的 Android MediaPlayer 类来播放 MP3,但同时播放多个频道有点棘手。
Android 没有内置合成器,所以如果你想通过某种乐器播放纯 MIDI 文件,最好的办法是使用libpd for Android。在那之后,你可能会找到一个PD patch,它的合成器可以满足你对给定声音的需求。
【讨论】:
MediaPlayer 使用的 midi 合成器。它使用内置的 Sonivox midisynth。但是,此合成器只能通过MediaPlayer 访问,不能直接用于流式传输 MIDI 事件等。