如何使用NAudio从wma转换为mp3

时间:2015-07-05 15:59:38

标签: c# mp3 naudio wma

请注意这不是链接的其他问题的副本。这使用了我找不到的课程,详见下面的问题。

我正在尝试将wma文件转换为mp3。我需要一个可以集成到我的代码库中的解决方案,而不是依赖外部资源,所以使用ffmpeg不是一个选项。我一直在尝试NAudio,但没有任何成功。

一个问题是,似乎有两个版本的NAudio,似乎都不完整。你从Nuget得到的那个不包括WMAFileReader类,所以没有办法(我可以看到)读取wma文件。 version on github包含WMAFileReader类,但似乎不包括Mp3Writer类,也不包括我在许多示例中看​​到的WaveLib类。

那么,任何人都知道如何获得能够完成这项工作的东西吗?我浪费了几个小时尝试不同的代码示例,但它们似乎都不适用于我能找到的任何版本的NAudio。

理想情况下,我想在内存中执行此操作,但如果我必须写入临时磁盘文件,那么它不是世界末日。

编辑我刚刚发现有更多的NAudio nuget软件包扩展了基本软件包。有一个用于Lame,一个用于WMA,但即使在安装它们之后,我也无法获得任何代码。

1 个答案:

答案 0 :(得分:4)

看起来很简单......

创建一个新的控制台项目,使用nuget添加NAudio.Lame包(我创建它来封装LAME MP3 DLL)。我在本例中直接使用nuget自己的包。

在某处添加以下方法:

static void ConvertToMP3(string sourceFilename, string targetFilename)
{
    using (var reader = new NAudio.Wave.AudioFileReader(sourceFilename))
    using (var writer = new NAudio.Lame.LameMP3FileWriter(targetFilename, reader.WaveFormat, NAudio.Lame.LAMEPreset.STANDARD))
    {
        reader.CopyTo(writer);
    }
}

使用您的WMA文件的文件名(或AudioFileReader类可读的任何其他音频文件)和您要保存的文件名调用它并让它运行:

static void Main(string[] args)
{
    ConvertToMP3(@"C:\temp\test.wma", @"C:\temp\test_transcode.mp3");
}

如果您的输入文件采用MP3编码器不支持的格式,则可能遇到问题。奇怪的通道数,样本格式或采样率都可能导致MP3编写器失败。我的测试文件在解码时是44.1KHz Mono IEEE-float格式,Lame编解码器非常乐意使用。如果您找到一个不起作用的地方,那么您必须进行一些示例转换,以便将输入数据转换为兼容格式。

您也可以在LameMP3FileWriter构造函数中使用quality参数。有各种预设(如LAME编码器本身所定义)或者您可以尝试直接指定每秒千比特(如果您愿意)。 NAudio.Lame.LAMEPreset.STANDARD生成一个128Kbps的文件。

相关问题