繁体   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