使用libsndfile写入wav文件

writing to a wav file using libsndfile

本文关键字:文件 wav 写入 libsndfile 使用      更新时间:2023-10-16

我在我的HD上将一个短缓冲区写入wav文件时遇到麻烦。我遵循了一些教程,但它们都给出了不同的方法。无论如何,这是我实现它的方式,但由于某种原因,它不起作用。当我试图打印出outfile的结果时,我得到的是0,并且没有向磁盘写入任何内容。此外,我尝试了不同的路径,有时带文件名,有时不带文件名。

UPDATE:当我将路径更改为仅文件名(例如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);
}

From libsndfile docs:

如果成功,sf_open函数返回一个非null指针,该指针应该作为第一个参数传递给所有后续处理该音频文件的libsndfile调用。如果失败,sf_open函数返回NULL指针。可以通过将NULL传递给sf_strerror来获得错误的解释。

如果outfile是0x2194000而不是null,那么您可能正确打开了文件。

尝试使用sf_strerror()查看当您提供完整的文件路径而不仅仅是文件名时出现的错误。

文件名中的波浪号(~)通过shell扩展到主目录。对于库函数,文件路径必须是完整的,可以是绝对的,也可以是相对的。