как воспроизвести миди-файл на андроиде с помощью fmod

Я пытаюсь воспроизвести миди-файл с помощью fmod. Но есть ошибка, говорящая о том, что: ресурс, который требует плагин, не может быть найден (т.е. файл DLS для воспроизведения MIDI)

Я искал результаты для подобных проблем и ссылался на файлы fmod.h. Кажется, мне нужен файл с именем «gs_instrument.dls», но я не могу найти его на своем Mac, а также в файловой системе симулятора Android. Я также искал ресурсы в Интернете, также безрезультатно.

Итак, что мне делать, если я хочу воспроизвести миди-файл на Android с помощью fmod.

Надеюсь, вы можете мне помочь!

Спасибо!


person mingzhu    schedule 10.08.2011    source источник


Ответы (3)


Я не знаю насчет fmod, но Android может воспроизводить MIDI-файлы прямо из коробки. Вот упрощенная версия того, что работает для меня:

MediaPlayer mediaPlayer = new MediaPlayer();
File f = [... my MIDI file ...];
FileInputStream fis = new FileInputStream(f);
FileDescriptor fd = fis.getFD();
mediaPlayer.setDataSource( fd );
mediaPlayer.prepare();
mediaPlayer.start();
person Sparky    schedule 10.08.2011

Вы указываете местоположение файла DLS с помощью члена dlsname структуры FMOD_CREATESOUNDEXINFO, переданного в System::createSound.

Вы должны сами предоставить фактический файл и поместить его на SD-карту, чтобы вы могли указать его местоположение. В Windows файл DLS по умолчанию находится в папке «C:\Windows\System32\drivers\gm.dls» или «C:\Windows\System32\drivers\etc\gm.dls». В качестве альтернативы на Mac он находится в «/System/Library/Components/CoreAudio.component/Contents/Resources/gs_instruments.dls». При этом я не могу говорить о законности использования этих файлов в проекте Android, вам может потребоваться получить свой собственный «бесплатный» файл dls из другого места.

person Mathew Block    schedule 10.08.2011

Вы можете использовать вот так. Вы можете вызвать следующий метод, где вы хотите воспроизвести миди-файл.

public void  myRingCtone()
        {
            Uri path = Uri.parse("android.resource://com.PackageName/raw/MIDI_RingToneName");
            RingtoneManager.setActualDefaultRingtoneUri(getApplicationContext(), 
                                                            RingtoneManager.TYPE_RINGTONE, path);
            Log .i("TESTT", "Ringtone Set to Resource: "+ path.toString());
            RingtoneManager.getRingtone(getApplicationContext(), path).play();
        }
person Balaji Khadake    schedule 10.08.2011