请注意这不是链接的其他问题的副本。这使用了我找不到的课程,详见下面的问题。
我正在尝试将wma文件转换为mp3。我需要一个可以集成到我的代码库中的解决方案,而不是依赖外部资源,所以使用ffmpeg不是一个选项。我一直在尝试NAudio,但没有任何成功。
一个问题是,似乎有两个版本的NAudio,似乎都不完整。你从Nuget得到的那个不包括WMAFileReader类,所以没有办法(我可以看到)读取wma文件。 version on github包含WMAFileReader类,但似乎不包括Mp3Writer类,也不包括我在许多示例中看到的WaveLib类。
那么,任何人都知道如何获得能够完成这项工作的东西吗?我浪费了几个小时尝试不同的代码示例,但它们似乎都不适用于我能找到的任何版本的NAudio。
理想情况下,我想在内存中执行此操作,但如果我必须写入临时磁盘文件,那么它不是世界末日。
编辑我刚刚发现有更多的NAudio nuget软件包扩展了基本软件包。有一个用于Lame,一个用于WMA,但即使在安装它们之后,我也无法获得任何代码。
答案 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的文件。