我有两个样本的wavfiles。
我想将它们组合成一个输出wav,如下所示:
播放第一个wav,等待x秒播放第二个wav,然后将结果保存为新的wav文件。
我并不特别喜欢wav格式,如果有必要,我很乐意使用另一种格式。
从我的研究中看起来我需要将wavs转换为PCM,然后创建一个新的输出缓冲区并将第一个文件写入输出缓冲区。然后以某种方式为x秒创建一个空间,然后将第二个PCM写入
我将如何做到这一点?
答案 0 :(得分:1)
首先,你需要解决你所说的问题
基本上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来进行沉默