【问题标题】:Cocoa: How to create CFUrl/NSUrl for reading from a memory buffer for ExtAudioFileOpenURLCocoa:如何创建 CFUrl/NSUrl 以从 ExtAudioFileOpenURL 的内存缓冲区中读取
【发布时间】:2012-04-28 10:08:54
【问题描述】:

某些函数,例如 ExtAudioFileOpenURL,只接受 URL 作为文件的路径。这很好,但是如果您的文件在容器或内存缓冲区中,是否仍然可以创建一个指向此的 URL?

例如

char * w = read_sample_bytes(...);
CFURLRef url = CFURLCreateForBuffer(..., w, ...);
ExtAudioFileOpenURL(url, &extAudioFile);
etc..

或者我必须将数据提取到一个临时文件并创建一个 url 吗?

【问题讨论】:

    标签: macos cocoa file url buffer


    【解决方案1】:

    您可能会首先使用AudioFileInitializeWithCallbacks 创建一个AudioFileID,然后使用ExtAudioFileWrapAudioFileID 为您需要的ExtAudioFile API 包装结果。使用这种方法在内存中创建/读取文件不需要 CF/NS-URL。

    【讨论】:

    • 我认为这是从内存缓冲区读取的正确方法。事实证明,对我来说,最好是流式传输文件数据,所以我最终使用了 AudioToolbox 的 AudioFileStream 和 AudioConverter 的组合——完全跳过了 ExtAudioFile。
    【解决方案2】:

    您不能创建指向内存区域的 URL。

    为了您的特定目的,您必须按照贾斯汀的建议或使用 Audio Queue Services

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-03
      • 2012-05-14
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      相关资源
      最近更新 更多