合并现有音频文件并从中生成新的音频文件

时间:2014-06-21 16:29:11

标签: c# audio

我有两个样本的wavfiles。

我想将它们组合成一个输出wav,如下所示:

播放第一个wav,等待x秒播放第二个wav,然后将结果保存为新的wav文件。

我并不特别喜欢wav格式,如果有必要,我很乐意使用另一种格式。

从我的研究中看起来我需要将wavs转换为PCM,然后创建一个新的输出缓冲区并将第一个文件写入输出缓冲区。然后以某种方式为x秒创建一个空间,然后将第二个PCM写入

我将如何做到这一点?

1 个答案:

答案 0 :(得分:1)

首先,你需要解决你所说的问题

WAV是一种RIFF,它将声波编码为PCM

基本上PCM表示波的离散值存储在某个sample rate通常为44 kHz

每个样本可能包含有关一个或多个渠道的信息(通常为2

每个样本的值都存储为固定大小的整数或浮点数。 (通常为16位整数

这些属性存储在WAV header

要合并两个单独的WAV文件,您需要读取两个文件的标题,如果幸运的话,它们将具有相同的ByteRate(== samplerate * channel count * bits / sample / 8),那么您只需需要将第二个文件连续减去第一个文件的末尾,并将第二个文件的长度添加到第一个文件的“长度”字段中。

在任何其他情况下,我建议您使用某种重新编码的library

如果你有时间和冥想,你可以自己进行重新编码。

如果您根本不想打扰这些东西,请尝试使用完成您所需要的完整程序(即sox)。

Btw。:如果每个样本的这些位都是有符号的,则静音为0,如果它们是无符号的,则为最大值的一半(通常仅在8位整数中找到)。

所以要获得4秒的静音,你需要n = 4 *采样率*通道数*(位/秒)/ 8倍0

琐事:你可以使用任何常数值而不是0来进行沉默