VIAL0.34でMIDIファイル出力が正常に動作していないことが判明。
調べてみたら、どうもこちらのロジックの問題ではなくCoreAudio/MusicPlayer側の問題のよう。
[サンプル]
- (void)awakeFromNib
{
MusicSequence seq = nil;
NSData *inSmf = nil;
CFDataRef outSmf = nil;
inSmf = [NSData dataWithContentsOfFile:@"/Users/koki_m/Documents/Xcode/CATest/test.mid"];
NewMusicSequence(&seq);
MusicSequenceLoadSMFData(seq, (CFDataRef)inSmf);
MusicSequenceSaveSMFData(seq, &outSmf, 0);
[((NSData *)outSmf) writeToFile:@"/Users/koki_m/Documents/Xcode/CATest/test2.mid" atomically:TRUE];
DisposeMusicSequence(seq);
}
このサンプルは正常に機能しない。MusicSequenceSaveSMFData関数に問題があることが分かる。
情報を探してみたら、CoreAudioメーリングリストに以下のものがあった。
http://lists.apple.com/archives/coreaudio-api/2006/Nov/msg00034.html
Intel製CPUはリトルエンディアンでメモリにデータを保存するが、それをそのままファイルに書き出している。
CoreAudioはこの違いを吸収していないよう。
この投稿は今月9日のもので、アーカイブにはまだ返信がない。
VIALのMIDIエクスポート機能をどうするか・・・
なお、この問題はPowerPCのMacでは発生しない。(iBook G3/366MHz + MacOS X 10.3.9で確認)
調べてみたら、どうもこちらのロジックの問題ではなくCoreAudio/MusicPlayer側の問題のよう。
[サンプル]
- (void)awakeFromNib
{
MusicSequence seq = nil;
NSData *inSmf = nil;
CFDataRef outSmf = nil;
inSmf = [NSData dataWithContentsOfFile:@"/Users/koki_m/Documents/Xcode/CATest/test.mid"];
NewMusicSequence(&seq);
MusicSequenceLoadSMFData(seq, (CFDataRef)inSmf);
MusicSequenceSaveSMFData(seq, &outSmf, 0);
[((NSData *)outSmf) writeToFile:@"/Users/koki_m/Documents/Xcode/CATest/test2.mid" atomically:TRUE];
DisposeMusicSequence(seq);
}
このサンプルは正常に機能しない。MusicSequenceSaveSMFData関数に問題があることが分かる。
情報を探してみたら、CoreAudioメーリングリストに以下のものがあった。
http://lists.apple.com/archives/coreaudio-api/2006/Nov/msg00034.html
Intel製CPUはリトルエンディアンでメモリにデータを保存するが、それをそのままファイルに書き出している。
CoreAudioはこの違いを吸収していないよう。
この投稿は今月9日のもので、アーカイブにはまだ返信がない。
VIALのMIDIエクスポート機能をどうするか・・・
なお、この問題はPowerPCのMacでは発生しない。(iBook G3/366MHz + MacOS X 10.3.9で確認)