簡體   English   中英

使用 libsndfile 寫入 wav 文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM