内部にエンコードされた PCM オーディオを含む複数の CAF ファイルを結合できます。まず、CAF ファイルの 1 つからデータ形式を読み込みます。
UInt32 size = sizeof(srcFormatDescription);
status = AudioFileGetProperty(srcAudioFile, kAudioFilePropertyDataFormat, &size, &srcFormatDescription);
PCMデータ形式の場合は次のようになります
[Line 7697] mSampleRate: 44100.000000
[Line 7698] mFormatID: 1819304813d
[Line 7699] mFormatFlags: 12d
[Line 7700] mBytesPerPacket: 2d
[Line 7701] mFramesPerPacket: 1d
[Line 7702] mBytesPerFrame: 2d
[Line 7703] mChannelsPerFrame: 1d
[Line 7704] mBitsPerChannel: 16d
[Line 7705] mReserved: 0d
次に、すべての CAF を含む宛先ファイルのデータ形式を設定します。
destFormatDescription = srcFormatDescription;
status = AudioFileCreateWithURL(dest, kAudioFileCAFType, &destFormatDescription, kAudioFileFlags_EraseFile, &destAudioFile);
次のステップでは、CAF からデータを読み取ります
status = AudioFileReadBytes(srcAudioFile,
FALSE,
currentStartForReading,
&bytesNumberToRead,
buffer);
destAudioFileに書き込みます
status = AudioFileWriteBytes(destAudioFile,
FALSE,
writePosition,
&bytesNumberToWrite,
buffer);
この手順はループで実行されます。それはうまくいきます。しかし、私は大きな問題を抱えています.ALAC形式のデータを含むCAFファイルに対して同じ手順を実行しようとしています. うまくいきません。AudioFileWriteBytes がエラーを返す操作はサポートされていません。
ALAC データ形式の場合は次のようになります
[Line 7697] mSampleRate: 44100.000000
[Line 7698] mFormatID: 1634492771d
[Line 7699] mFormatFlags: 1d
[Line 7700] mBytesPerPacket: 0d
[Line 7701] mFramesPerPacket: 4096d
[Line 7702] mBytesPerFrame: 0d
[Line 7703] mChannelsPerFrame: 1d
[Line 7704] mBitsPerChannel: 0d
[Line 7705] mReserved: 0d
内部に Apple Lossless データを含む複数の CAF ファイルを結合する方法を知っている人はいますか?