在 C++ 中连接 .wav 文件
Posted
技术标签:
【中文标题】在 C++ 中连接 .wav 文件【英文标题】:Concatenate .wav files in C++ 【发布时间】:2016-03-07 01:23:18 【问题描述】:我怎样才能使用函数、库以及任何我需要的东西来连接两个 .wav 文件?输入应该是绝对路径,而输出应该是在某处创建并放置(不仅仅是播放)的音频文件,在哪里并不重要。
我正在用 XCode 6 编写一个 Mac 命令行应用程序。
【问题讨论】:
通过fopen()
打开文件,通过getc()
或fread()
读取文件,然后计算新的头值和数据,然后通过putc()
或fwrite()
输出。另外不要忘记通过fclose()
关闭文件。
我不知道这些是什么,我会阅读它们并尝试一下。
【参考方案1】:
.wav
文件格式是一种非常简单的格式,由定义音频文件属性的固定标头组成;即字节序、通道数和采样率。它的文档在 intertubes 上得到了广泛的定义。
我不记得是否有任何通用库提供了一种方便的方法来做到这一点(值得通过libsndfile's API documentation 寻找适合该法案的东西)。
在任何情况下,读取两个 WAV 文件的标题、检查它们的格式,然后创建输出文件应该不会太难。如果两个 WAV 文件具有相同的字节序、通道数和采样率,则该过程很简单,否则您必须至少重新采样/重新混合其中一个文件。
【讨论】:
我可以用什么来做到这一点?会是 MikeCAT 所说的吗? 是的,除了这是 C++,所以它是 std::ifstream 和 std::ofstream。【参考方案2】:有一个非常简单、轻量级和成熟的开源C API 库for reading-writing several common audio file formats。我已经有一段时间没有使用它了,如果我没记错的话,它具有打开声音文件进行写入、寻找结尾、从另一个文件附加数据和更新标题的例程。我希望这会有所帮助。
【讨论】:
以上是关于在 C++ 中连接 .wav 文件的主要内容,如果未能解决你的问题,请参考以下文章
wav 文件中的数据在 -1 和 1 之间,c++,sndfile
在 C++ 中使用 libsndfile 从 WAV 文件中提取原始音频数据