我能够加入多个 CAF 文件,其中包含编码的 PCM 音频。首先,我从一个 CAF 文件中读取数据格式。
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
有人知道如何加入多个 CAF 文件,里面有 Apple Lossless 数据吗?