【问题标题】:Combine existing audio files and generate new audio file from them合并现有的音频文件并从中生成新的音频文件
【发布时间】:2014-08-12 04:12:38
【问题描述】:

我有 2 个示例 wavfile。

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

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

我不是特别喜欢 wav 格式,如果有必要,我很乐意使用其他格式。

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

我该怎么做呢?

【问题讨论】:

    标签: c# audio


    【解决方案1】:

    首先你需要明白你在说什么

    WAVRIFF 的一种,它将声波编码为PCM

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

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

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

    这些属性存储在WAVheader

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

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

    如果你有时间和灵感,你可以自己重新编码。

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

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

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

    琐事:您可以使用任何常量值而不是 0 来表示静音

    【讨论】:

    • 感谢您的澄清,这些东西对我来说都是全新的。是的,我一直在研究库,我想我会尝试使用 NAudio 库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-08
    • 2015-04-03
    相关资源
    最近更新 更多