1

我正在尝试使用 fmod 播放 midi 文件。但是有一个错误说:找不到插件需要的资源,(即用于MIDI播放的DLS文件)

我已经搜索了类似问题的结果,并参考了 fmod.h 文件。似乎我需要一个名为“gs_instrument.dls”的文件,但我在我的 mac 以及 android 模拟器文件系统中都找不到它。我也搜索了网上的资源,也没有结果。

那么如果我想使用fmod在android中播放midi文件我该怎么办。

希望你能帮我!

谢谢!

4

3 回答 3

4

我不知道 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();
于 2011-08-10T12:46:16.980 回答
1

您可以使用传递给 System::createSound 的 FMOD_CREATESOUNDEXINFO 结构的 dlsname 成员指定 DLS 文件的位置。

您必须自己提供实际文件并将其放在 sdcard 上,以便您可以传递它的位置。在 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 文件。

于 2011-08-10T23:55:10.577 回答
0

你可以这样使用。您可以在要播放 MIDI 文件的地方调用以下方法。

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();
        }
于 2011-08-10T14:13:22.460 回答