ExtAudioFileWrite を使用して、ファイルを開いてデータを追加しようとしています。現在、作成/初期書き込み(作成時)/変換は問題なく機能しますが、残念ながら、後で書き込みのためにファイルを開くことができないようです。ファイルを開くように見える関数は 1 つExAudioFileOpenURL
だけです。ただし、読み取り専用です。では、書き込み用にファイルを開くことができない場合、ファイルの最後に書き込むにはどうすればよいでしょうか?
質問する
951 次
1 に答える
0
私が間違っているか、あなたの質問を完全に理解していない可能性があります。ただし、ExtAudioFileWrite を使用してファイルへの書き込みを開始すると、ExtAudioFileWrite を再度呼び出すことで書き込みを続けることができます。コンパイラを使わないコーディングに挑戦しようとしています。
例:
....variables declaration and your logic.....
//1.Create File to write output
ExtAudioFileRef outputFile;
//+++++++ LOOP to append as many files as you want +++++++//
//2.Create file reference to files you want to merge
ExtAudioFileRef audioFileObject = 0;
//3.open the first file
ExtAudioFileOpenURL (firstFileURL, &audioFileObject);
//4.get file properties
AudioStreamBasicDescription AudioFileFormat = 0;
UInt64 numberOfPacketsToReadInCurrentFile = 0;
ExtAudioFileGetProperty(audioFileObject,
kExtAudioFileProperty_FileLengthFrames,
sizeof(numberOfPacketsToReadInCurrentFile),
&numberOfPacketsToReadInCurrentFile
);
ExtAudioFileGetProperty(audioFileObject,
kExtAudioFileProperty_FileDataFormat,
sizeof(AudioFileFormat),
&AudioFileFormat
);
//5.Set destination ASBD
ExtAudioFileSetProperty(audioFileObject,
kExtAudioFileProperty_ClientDataFormat,
sizeof (importFormat),
&importFormat
);
//6.Set/Create/Allocate Some Buffers
//use AudioFileFormat to setup your buffers accordingly
AudioBufferList theBufferList = 0 // bufferList setup (I dont remember that)
//7.Read the file into the buffer
ExtAudioFileRead(audioFileObject,&numberOfPacketsToReadInCurrentFile,theBufferList);
//8.Write the buffer to a File
ExtAudioFileWrite(outputFile, numberOfPacketsToReadInCurrentFile, theBufferList);
free(theBufferList);
//if you want to append more files go to point 2 with the next file URL
//+++++++CLOSE LOOP+++++++++//
//once you are done.. just dispose the file and clean up everything left
ExtAudioFileDispose(outputFile);
これはコンパイルされません。しかし、うまくいけば、アイデアを得るのに役立ちます。
于 2012-10-22T10:31:58.927 に答える