2012-04-17 55 views
2

某些函數(如ExtAudioFileOpenURL)只接受URL作爲文件的路徑。這很好,但如果你的文件在一個容器或一個內存緩衝區中,那麼又有可能創建一個指向這個的URL?Cocoa:如何創建CFUrl/NSUrl從ExtAudioFileOpenURL的內存緩衝區讀取

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

或我必須將數據提取到一個臨時文件,並創建一個URL來的?

回答

3

想必,你首先會創建一個AudioFileInitializeWithCallbacksAudioFileID,然後換用ExtAudioFileWrapAudioFileIDExtAudioFile的API,你需要的結果。使用這種方法不需要CF/NS-URL來創建/讀取內存中的文件。

+1

我認爲這是從內存緩衝區讀取的正確方法。事實證明,對我來說,最好是對文件數據進行流式傳輸,以便最終使用AudioToolbox的AudioFileStream和AudioConverter的組合 - 完全跳過ExtAudioFile。 – 2012-04-18 02:43:05

0

您無法創建內存區域的URL。

爲了您的特定目的,您必須執行Justin建議的操作或使用Audio Queue Services