使用libsndfile写入wav文件

时间:2014-03-20 10:46:41

标签: c++ libsndfile

我在将HD缓冲区写入我的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);
}

2 个答案:

答案 0 :(得分:2)

来自libsndfile docs:

  

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

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

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

答案 1 :(得分:0)

文件名中的连字符(〜)通过shell扩展到主目录。对于库函数,文件路径必须完整,绝对或相对。