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