【问题标题】:how to read header-chunks from a CAF-file using core-audio/audiotoolbox如何使用 core-audio/audiotoolbox 从 CAF 文件中读取标题块
【发布时间】:2012-06-20 10:28:21
【问题描述】:

我正在尝试使用 AudioToolbox 的 Extended Audio File API 在 OSX 上读取 CAF 文件。

打开文件工作正常,但是,我需要访问UUID chunk,我找不到任何有关如何执行此操作的参考(或如何访问文件的 any 标题块)

肯定有一种方法可以做到这一点,而无需我自己解析文件。

PS:我已经可以使用 libsndfile 执行此操作,但我想找到一种仅使用 OSX 附带的组件的方法。

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

【问题讨论】:

    标签: macos core-audio audiotoolbox caf


    【解决方案1】:

    事实证明,诀窍是不要使用 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多