1

我无法将短缓冲区写入 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);
}
4

2 回答 2

2

从 libsndfile 文档:

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

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

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

于 2014-03-20T11:36:48.313 回答
0

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

于 2020-12-06T06:00:09.520 回答