首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用核心音频/音频工具箱从咖啡馆文件中读取头块

如何使用核心音频/音频工具箱从咖啡馆文件中读取头块
EN

Stack Overflow用户
提问于 2012-06-18 12:38:39
回答 1查看 1.2K关注 0票数 0

我正在使用AudioToolbox的扩展音频文件 API在OSX上读取一个CAF文件.

打开文件很好,但是,我需要访问UUID块,并且我找不到关于如何这样做的任何参考(或者如何访问文件的任何头块)。

当然,必须有一种方法可以做到这一点,而无需解析文件本身。

PS:我已经可以用libsndfile来做这件事了,但是我想找到一种方法,用OSX附带的组件来完成这个任务。

我已经尝试过调用ExtAudioFileGetProperty(),并将ExtAudioFilePropertyID设置为'uuid‘,但这似乎不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-19 07:19:25

事实证明,诀窍是不要使用UUID API来访问像UUID块这样的低级别功能。(如果您需要通过ExtAudio API访问文件,则可以从AudioFileID创建一个ExtAudioHandle。)

最后我用了这样的方法:

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11083077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档