如何在不使用NAudio和.NET重新编码的情况下检测静音并剪切mp3文件

bos*_*art 7 naudio

我一直在寻找答案,我只能找到一些零碎的东西.我想要做的是加载多个mp3文件(暂时合并它们),然后使用静音检测将它们分割成碎片.

我的理解是我可以使用Mp3FileReader,但问题是:1.如何从mp3文件中读出20秒的音频?我是否需要阅读20次阅读器.WaveFormat.AverageBytesPerSecond?或者可能继续阅读框架,直到Mp3Frame.SampleCount/Mp3Frame.SampleRate的总和超过20秒?2.我如何真正发现沉默?我会查看相应数量的连续样本,以检查它们是否都低于某个阈值.但是我如何访问样本,无论它们是8位还是16位,单声道还是立体声等?我可以直接解码MP3帧吗?3.在示例10465处检测到静音后,如何将其映射回mp3帧索引以执行切割而无需重新编码?

ioc*_*lLR 2

在阅读以下内容之前:马克的答案更容易实现,而且您几乎肯定会对结果感到满意。这个答案是为那些愿意花费大量时间的人准备的。

话虽如此,基于静音切割 MP3 文件而不需要重新编码或完全解码实际上是可能的......基本上,您可以查看每个帧的侧面信息以及每个颗粒的增益和霍夫曼数据来“估计”静音。

  • 寻找沉默
  • 将静音之前的所有帧复制到新文件

现在它变得棘手......

  • 在静音后从帧中提取音频数据,跟踪哪个帧头与哪些音频数据对应。
  • 开始写入第二个新文件,但在写出帧时,更新 main_data_begin 字段,以便位存储库与音频数据的实际位置同步。