オーディオデータをWAVファイルに保存しようとしています-通常RemoteIOで使用しているオーディオデータがありますが、データを保存する関数を実装しようとしています。オーディオデータが有効であることがわかっているので、それは問題ではありません。正しい長さの空のWAVファイルを設定できれば、後でデータを入力できます。
現在、コードはファイルを作成し、バイト単位で正しい長さのように見えますが、OSX、QuickTime、iTunesなどがファイルを認識できないため(ファイルを表示し、ファイルを判別できないため、正しくフォーマットされていないようです)長さ、またはそれを再生します)
NSURL * tvarFilename = [savePanel URL];
NSLog(@"doSaveAs filename = %@",tvarFilename);
//try to create an audio file there
AudioFileID mRecordFile;
AudioStreamBasicDescription audioFormat;
audioFormat.mSampleRate = 44100.00;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 2;
audioFormat.mBitsPerChannel = 16;
audioFormat.mBytesPerPacket = 4;
audioFormat.mBytesPerFrame = 4;
OSStatus status = AudioFileCreateWithURL((CFURLRef)tvarFilename, kAudioFileWAVEType, &audioFormat, kAudioFileFlags_EraseFile, &mRecordFile);
int beatsToRecord = 4; //temporary
int bpm = 120;
double intervalInSamples = (double) 60 / bpm;
intervalInSamples *= (double)44100;
int inNumberFrames = (intervalInSamples * beatsToRecord);
UInt32 frameBuffer[inNumberFrames];
int sampleTime = 0;
UInt32 thisSubBuffer[inNumberFrames];
for (int i = 0; i < inNumberFrames; i++) { frameBuffer[i] = 0; }
UInt32 bytesToWrite = inNumberFrames * sizeof(UInt32);
status = AudioFileWriteBytes(mRecordFile, false, 0, &bytesToWrite, &frameBuffer);