【问题标题】:How to concatenate WAV files in C#如何在 C# 中连接 WAV 文件
【发布时间】:2010-09-25 08:01:42
【问题描述】:

我有 2 个 wav 文件,我想将它们与两个音轨连接成一个文件。

是否有任何用于该任务的 api 或 .NET 中的一些内置命令,我可以以某种天才的方式使用这些命令来完成这项任务?

非常感谢您的帮助。 :)

【问题讨论】:

  • 您能否澄清一下您想合并两首曲目以便它们同步播放,还是要将一首曲目附加到另一首曲目的末尾?

标签: c# merge wav


【解决方案1】:

如果我没记错的话,您可以将第二个文件中的字节附加到第一个文件的末尾。如果有任何标题数据,您需要排除它(请参阅here

请注意,您可能会听到两个剪辑之间的咔嗒声或爆裂声,因为不会有混合。您可能可以通过淡化(逐渐将最后几毫秒的值降低到中心值)来解决这个问题。

【讨论】:

  • 这不起作用,因为播放器不会选择 wav 文件的新时间
【解决方案2】:

如果您只需要这样做一次,那么最好的办法是使用一些专门用于该任务的软件。 Praataudacity 将执行此操作(加入或合并两个轨道)。

Praat 也可以编写脚本,因此可以编写 Praat 脚本,然后从 .Net 应用程序中调用 Praat 和脚本。

罗伯

【讨论】:

  • hum :) 是的,我知道,问题是我有 60 个文件需要合并成 15 分钟的文件。而且很可能我必须不止一次这样做。我已经看过 sox 和 mancoder 作为你所说的一个例子,但它们似乎不是诀窍。
【解决方案3】:

直接的方法是解释 wav 文件头,提取样本并将两个文件中的样本交错到一个新的样本流中,然后将其写入新的 wav 文件。您还可以逐个样本添加两个源 wav 文件的样本值,以将两个文件“混合”到一个轨道中。 wav 文件格式并没有那么复杂,所以编写这段代码应该不会太难。此外,还有很多开源项目包含读写 wav 文件的代码。 请注意,由于两个源 wav 文件具有不同的采样率,事情会变得有些棘手。 查看this 了解 wav 格式的说明。

【讨论】:

    【解决方案4】:

    是的,您可以将第二个 wav 的数据(不包括其标头)附加为 sais Jon B,但您还必须修改第一个文件的标头以指示新长度,否则某些音频播放器将在最后停止第一部分。

    对于动态连接,由于您不知道开头总 wav 的大小,您可以在第一个文件的标题上放置一个假的长度,例如放置 10 小时的持续时间。

    然后音频播放器应该等到您附加每个数据。它至少适用于ffmpeg

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 2011-02-22
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多