【问题标题】:Is there a way to make midi sounds in my Android app?有没有办法在我的 Android 应用程序中发出 midi 声音?
【发布时间】:2011-06-16 17:03:18
【问题描述】:

我正在尝试制作一个可以同时播放不同 MIDI 文件的应用。这些文件不会流式传输,我想将它们包含在 apk 中。

最多可以同时播放 12 个...Mp3 或两者的组合也是合适的替代品,但现在 midi 是理想的。

这有可能吗?提前感谢堆栈溢出天才! :)

-EltMrx

【问题讨论】:

    标签: android audio mp3 midi


    【解决方案1】:

    播放单个声音的一种简单方法是使用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

    【讨论】:

      【解决方案2】:

      正如@uncheck 所说,您可以使用标准的 Android MediaPlayer 类来播放 MP3,但同时播放多个频道有点棘手。

      Android 没有内置合成器,所以如果你想通过某种乐器播放纯 MIDI 文件,最好的办法是使用libpd for Android。在那之后,你可能会找到一个PD patch,它的合成器可以满足你对给定声音的需求。

      【讨论】:

      • 好吧,libpd 很好,但 android 确实有一个由 MediaPlayer 使用的 midi 合成器。它使用内置的 Sonivox midisynth。但是,此合成器只能通过MediaPlayer 访问,不能直接用于流式传输 MIDI 事件等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多