我試圖打開一個文件並使用ExtAudioFileWrite將數據追加到它。現在,創建/初始寫入(創建時)/轉換工作很好,但不幸的是,我似乎無法打開文件以供後來寫入。只有一個函數似乎打開文件:ExAudioFileOpenURL
,但僅用於閱讀。那麼,如果我無法打開文件進行寫入,我該如何在文件末尾編寫代碼?使用ExtAudioFileWrite在文件末尾寫入
回答
我可能是錯的,或不完全理解你的問題。但是,一旦使用ExtAudioFileWrite開始寫入文件,您可以通過再次調用ExtAudioFileWrite來繼續寫入文件。我要冒險進入沒有編譯器的編碼,希望你會得到的想法
例子:
....variables declaration and your logic.....
//1.Create File to write output
ExtAudioFileRef outputFile;
//+++++++ LOOP to append as many files as you want +++++++//
//2.Create file reference to files you want to merge
ExtAudioFileRef audioFileObject = 0;
//3.open the first file
ExtAudioFileOpenURL (firstFileURL, &audioFileObject);
//4.get file properties
AudioStreamBasicDescription AudioFileFormat = 0;
UInt64 numberOfPacketsToReadInCurrentFile = 0;
ExtAudioFileGetProperty(audioFileObject,
kExtAudioFileProperty_FileLengthFrames,
sizeof(numberOfPacketsToReadInCurrentFile),
&numberOfPacketsToReadInCurrentFile
);
ExtAudioFileGetProperty(audioFileObject,
kExtAudioFileProperty_FileDataFormat,
sizeof(AudioFileFormat),
&AudioFileFormat
);
//5.Set destination ASBD
ExtAudioFileSetProperty(audioFileObject,
kExtAudioFileProperty_ClientDataFormat,
sizeof (importFormat),
&importFormat
);
//6.Set/Create/Allocate Some Buffers
//use AudioFileFormat to setup your buffers accordingly
AudioBufferList theBufferList = 0 // bufferList setup (I dont remember that)
//7.Read the file into the buffer
ExtAudioFileRead(audioFileObject,&numberOfPacketsToReadInCurrentFile,theBufferList);
//8.Write the buffer to a File
ExtAudioFileWrite(outputFile, numberOfPacketsToReadInCurrentFile, theBufferList);
free(theBufferList);
//if you want to append more files go to point 2 with the next file URL
//+++++++CLOSE LOOP+++++++++//
//once you are done.. just dispose the file and clean up everything left
ExtAudioFileDispose(outputFile);
這將無法編譯,我猜。但希望能幫助你明白這個想法。
是的,如果你保持文件打開,它會工作得很好。但是,如果關閉它然後再次打開它將從頭開始寫入。我通過直接使用AudioFile解決了問題,我不認爲擴展版本具有此功能。 –
如果你讀到一個緩衝區,就像在你的例子中,內存將在某個時候是一個問題(這是在我的情況) –
就像我說的,我可能不完全理解你需要什麼。我很高興你知道了。對不起,我不能有任何幫助。 – Dan1one
- 1. 在文件末尾寫入
- 2. 通過opencsv在文件末尾寫入
- 3. 在文件的末尾寫入新行
- 4. 如何使用stream aws s3 php在文件末尾寫入?
- 5. ExtAudioFileWrite只寫入文件的第一位
- 6. 如何在文本的末尾寫入新的數字文件
- 7. 我如何寫文件在文件末尾的文件在c + +
- 8. 如何在文件末尾的特定地址寫入
- 9. 如何防止在文件末尾寫入「\ n」
- 10. 寫入文件,但不只是在末尾
- 11. 如何停止在csv文件末尾寫入空行 - pandas
- 12. ofstream不寫入到C++現有文本文件的末尾
- 13. 使用VIM從文件末尾搜索
- 14. 寫在xml的末尾
- 15. 如何在C#中的文本框的末尾寫入文本?
- 16. 將字符串寫入文件末尾(C++)
- 17. XmL文件,需要寫入「通道」元素的末尾
- 18. 「已解決」末尾帶空格的寫入文件
- 19. 如果兩個東西不匹配,寫入文件末尾
- 20. DeflaterOutputStream:寫入超出流末尾
- 21. 使用ExtAudioFileWrite將Streamed mp3數據包的緩衝區寫入wav文件ios
- 22. 在URL末尾添加文本輸入
- 23. 在寫入文本文件之前刪除字符串末尾的空行?
- 24. 如何在每行末尾的文本文件中寫入內容
- 25. 寫入文件結尾
- 26. mmap超出文件末尾
- 27. 文件末尾要求
- 28. HTML文件末尾的CSS
- 29. 文檔末尾的事件
- 30. 在末尾插入鏈表
你試過'AudioFileOpenURL'然後'ExtAudioFileWrapAudioFileID'嗎? – sbooth