[英]writing to a wav file using libsndfile
我無法將短緩沖區寫入我的 HD 上的 wav 文件。 我遵循了一些教程,但它們都提供了不同的方法。 無論如何,這是我實現它的方式,但由於某種原因它不起作用。 當我嘗試打印outfile
的結果時,我得到0
,並且沒有任何內容寫入磁盤。 另外,我嘗試了不同的路徑,有時有文件名,有時沒有文件名。
更新:當我改變的路徑,唯一的文件名(例如hello.wav
和不~/Documents/hello.wav
),打印出outfile
返回一個存儲器位置,如0x2194000
。
void gilbertAnalysis::writeWAV(float * buffer, int bufferSize){
SF_INFO sfinfo ;
sfinfo.channels = 1;
sfinfo.samplerate = 44100;
sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
const char* path = "~/Documents/hello.wav";
SNDFILE * outfile = sf_open(path, SFM_WRITE, &sfinfo);
sf_count_t count = sf_write_float(outfile, &buffer[0], bufferSize) ;
sf_write_sync(outfile);
sf_close(outfile);
}
從 libsndfile 文檔:
成功時, sf_open 函數返回一個非 NULL 指針,該指針應作為第一個參數傳遞給處理該音頻文件的所有后續 libsndfile 調用。 失敗時, sf_open 函數返回一個 NULL 指針。 可以通過將 NULL 傳遞給 sf_strerror 來獲得對錯誤的解釋。
如果outfile是 0x2194000 並且不為空,那么您可能正確打開了文件。
嘗試使用 sf_strerror() 來查看在提供完整文件路徑而不僅僅是文件名時出現了什么錯誤。
文件名中的波浪號 (~) 通過 shell 擴展到主目錄。 對於庫函數,文件路徑必須是完整的,無論是絕對的還是相對的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.