次のコードを使用して、サウンドフォント サンプルを含む .mid (midi) ファイルを iOS で再生することに成功しました。
-(void) playMusic:(NSString*) name
{
NSString *presetURLPath = [[NSBundle mainBundle] pathForResource:@"GortsMiniPianoJ1" ofType:@"SF2"];
NSURL * presetURL = [NSURL fileURLWithPath:presetURLPath];
[self loadFromDLSOrSoundFont: (NSURL *)presetURL withPatch: (int)3];
NSString *midiFilePath = [[NSBundle mainBundle] pathForResource:name ofType:@"mid"];
NSURL * midiFileURL = [NSURL fileURLWithPath:midiFilePath];
NewMusicPlayer(&musicPlayer);
if (NewMusicSequence(&musicSequence) != noErr)
{
[NSException raise:@"play" format:@"Can't create MusicSequence"];
}
if(MusicSequenceFileLoad(musicSequence, (CFURLRef)midiFileURL, 0, 0 != noErr))
{
[NSException raise:@"play" format:@"Can't load MusicSequence"];
}
MusicPlayerSetSequence(musicPlayer, musicSequence);
MusicSequenceSetAUGraph(musicSequence, _processingGraph);
MusicPlayerPreroll(musicPlayer);
MusicPlayerStart(musicPlayer);
}
ただし、最初のファイルがまだ再生されているときに 2 番目のファイルを再生しようとすると、問題が発生します。
私は多くのバリエーションを試しました。まず、上記のコードは両方のトラックを同時に再生します。または、私は試しました:
DisposeMusicPlayer(musicPlayer);
DisposeMusicSequence(musicSequence);
の前NewMusicPlayer(&musicPlayer)
ですが、これにより、散発的な音符のみが再生される奇妙なバージョンの曲が生成されます。
このメソッドを単純に呼び出して、次のトラックを再生したいと思います。