>我正在尝试使用AudioToolbox的扩展音频文件API在OSX上读取CAF文件。
打开文件工作正常,但是,我需要访问UUID块,并且我找不到有关如何执行此操作(或如何访问文件的任何标头块)的任何参考
当然,必须有一种方法可以在不自己解析文件的情况下做到这一点。
PS:我已经可以用libsndfile做到这一点,但我想找到一种方法来做到这一点,只使用OSX附带的组件。
我已经尝试将ExtAudioFilePropertyID
设置为"uuid"来调用ExtAudioFileGetProperty()
,但这似乎不起作用。
事实证明,诀窍不是使用ExtAudio API来访问UUID块等低级功能。(如果您需要通过 ExtAudio API 访问文件,可以从 AudioFileID 创建 ExtAudioHandle。
最后我使用了这样的东西:
AudioFileID fileID;
ExtAudioFileRef extFile;
OSStatus err = AudioFileOpenURL((CFURLRef)inURL, kAudioFileReadPermission, 0, &fileID);
if(noErr!=err)return;
err = ExtAudioFileWrapAudioFileID (fileID, false, &extFile); // in case we *also* want to access the file via ExtAudio
if(noErr!=err)return;
for(index=0; ; index++) {
UInt32 size=0;
char*data=NULL;
OSStatus err = AudioFileGetUserDataSize (fileID,'uuid',index,&size);
if(noErr!=err)break; // check whether we were able to read the chunksize
if(0==size)continue; // check whether there is some payload in the uuid chunk
data=calloc(size, 1);
if(!data)continue;
err = AudioFileGetUserData (fileID, 'uuid', index, &size, data);
if(noErr!=err){free(data); break;} // check whether we were able to read the chunksize
/* ... */
free(data);
}
ExtAudioFileDispose(extFile);
AudioFileClose(fileID);