使用libsndfile写入wav文件
writing to a wav file using libsndfile
我在我的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扩展到主目录。对于库函数,文件路径必须是完整的,可以是绝对的,也可以是相对的。
相关文章:
- 尝试使用来自 Win32 WASAPI C++的"捕获流"创建 wav 文件
- 如何从wav文件中获取采样率?
- 写入 wav 文件时定期创建静音
- 在不打开应用程序的情况下在MinGW c++中播放声音(.wav)文件
- 如何使用curl c ++源代码发布wav文件数据,如何使用c ++使用--data-binary?
- 为什么 XAudio2 仅在系统暂停时播放.wav文件?
- 处理文件期间输出失真.wav
- webRTC : 如何通过从WAV文件获得的样本将webRTC的VAD应用于音频
- WAV文件停止功能
- 如何从特定点播放.WAV文件(例如30秒)
- 通过C(或C )中的WAV文件循环
- 开放式阅读WAV文件lib
- 使用C++ / Python的wav文件的FFT
- 在mbed中打开的wav文件数量是否有限制
- 音频编程 SDL - 如何使用 wav 文件在命令行中指定频率切割
- 无法使用两种不同的频率填充 *.wav 文件的缓冲区
- 禁用在使用QAudioRecorder时创建wav文件
- 无论如何,我可以从WAV文件中打印Sox即可打印幅度值
- WAV文件的数据在-1和1之间,C ,SNDFILE
- 在黑莓10(原生)上分割音频文件(wav)