Есть ли способ сделать миди-звуки в моем приложении для Android?

Я пытаюсь создать приложение, которое может одновременно воспроизводить разные миди-файлы. Файлы не будут передаваться, и я хотел бы включить их в apk.

Одновременно будет воспроизводиться максимум 12... Mp3 или их комбинация также будут подходящей заменой, но на данный момент идеальным будет midi.

Это вообще возможно? Заранее спасибо гениям переполнения стека! :)

-ЭлтМркс


person EltMrx    schedule 14.06.2011    source источник


Ответы (2)


Один простой способ воспроизвести один звук — использовать 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();
    }

Теперь воспроизвести несколько звуков одновременно немного сложнее, но есть хорошее решение здесь.

person plowman    schedule 14.06.2011

Как отметил @uncheck, вы можете использовать стандартный класс Android MediaPlayer для MP3, хотя одновременное воспроизведение нескольких каналов немного сложно.

Android не имеет встроенного синтезатора, поэтому, если вы хотите воспроизводить чистые MIDI-файлы на каком-либо инструменте, лучше всего использовать libpd для Android. После этого вы, вероятно, сможете найти патч PD с синтезатором, который будет соответствовать вашим потребностям для данного звука, который ты после.

person Nik Reiman    schedule 16.06.2011
comment
Что ж, libpd — это хорошо, но в Android есть миди-синтезатор, который используется MediaPlayer. Он использует встроенный мидисинтезатор Sonivox. Однако этот синтезатор доступен только через MediaPlayer, а не напрямую для потоковой передачи миди-событий и т. д. - person Peterdk; 17.08.2011