C# 使用NAudio for.NET如何删除mp3文件末尾的静默波?

C# 使用NAudio for.NET如何删除mp3文件末尾的静默波?,c#,.net,audio,mp3,naudio,C#,.net,Audio,Mp3,Naudio,我正在开发一个C#WPF应用程序,它将一组单词(约17000个单词)组合在一起,并生成一个与mp3文件匹配的播放列表(每个mp3文件都是一个单词) 目前,每个mp3文件在其波形结束时都有一个1秒到30秒之间的随机静音 我希望能够以编程方式从文件末尾删除静默波 使用NAudio for.NET如何删除mp3文件结尾的静音波?有两种方法可以修剪mp3文件。第一种方法是使用Mp3FileReader以WAV格式读取音频,并且仅使用WaveFileWriter将所需的量写入新的WAV文件。然后,您可以使

我正在开发一个C#WPF应用程序,它将一组单词(约17000个单词)组合在一起,并生成一个与mp3文件匹配的播放列表(每个mp3文件都是一个单词)

目前,每个mp3文件在其波形结束时都有一个1秒到30秒之间的随机静音

我希望能够以编程方式从文件末尾删除静默波


使用NAudio for.NET如何删除mp3文件结尾的静音波?

有两种方法可以修剪mp3文件。第一种方法是使用Mp3FileReader以WAV格式读取音频,并且仅使用WaveFileWriter将所需的量写入新的WAV文件。然后,您可以使用LAME.exe等工具将其转换回MP3,因为NAudio不包含MP3编码器

第二种是丢弃MP3帧,其优点是不需要解码和重新编码。MP3文件由一系列MP3帧组成(可选地在开始或结束处具有元数据,如ID3标记)。然后,您可以创建一个新的MP3文件,只需将所需的MP3帧附加到一个新文件中,跳过最后的帧(并可以选择确保截断文件中包含ID3标记)。查看Mp3FileReader的源代码,了解如何从MP3文件中逐个读取Mp3Frames。

我使用

SoX沉默文件:

SoX静默文件的Stackoverflow帮助参考:

使用C#执行命令行:

当前,每个mp3文件在其波形结束时都有一个随机的静默时间,介于1秒到30秒之间。
您如何知道要跳过多少帧?!我猜OP是在确定静默帧之后:)每个Mp3Frame都有一个SampleCount属性,从中可以计算出它的持续时间。检测静默是另一个问题-您可以通过使用Mp3FileReader转换为PCM来获取样本值,但通常当人们说“静默”时,他们的意思是低于某个音量阈值,因此您需要检查每个样本的值,并确定它是否在您的阈值范围内,我正在查看您的代码(naudio)现在我有几个问题。我需要从音频文件中删除“静默”(例如,格式不重要,因为我可以使用SoX转换格式)。SoX运作良好,但是。。。我不仅需要从音频文件中删除静默,还需要设置用于删除部件的特殊标记,并将这些标记写入文件。您能给我一些建议吗?确定“什么是静默?”:NAudio文档中的trim示例:这里有一个基本的实现,可以很容易地用于截断文件中的静默。我还想在此指出,您可以使用。