goo blog サービス終了のお知らせ 

MIU-SOFT

プログラミング/システム開発ノート&音楽について

MusicSequence SMF出力のバグ(Intel mac)

2006-11-16 14:07:48 | CoreAudio
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で確認)