请注意这不是链接的其他问题的副本。这使用了我找不到的类,如下面的问题所述。
我正在尝试将 wma 文件转换为 mp3。我需要一个可以集成到我的代码库中的解决方案,而不是依赖于外部资源,因此使用 ffmpeg 不是一种选择。我一直在尝试 NAudio,但没有任何成功。
一个问题是周围似乎有两个版本的 NAudio,而且似乎都不完整。你从 Nuget 得到的那个不包括 WMAFileReader 类,所以没有办法(我可以看到)读取 wma 文件。github上的版本包含 WMAFileReader 类,但似乎不包含 Mp3Writer 类,也不包含我在许多示例中看到的 WaveLib 类。
那么,有谁知道我怎样才能得到可以完成这项工作的东西?我已经浪费了几个小时尝试不同的代码示例,但它们似乎都不适用于我能找到的任一版本的 NAudio。
理想情况下,我想在内存中执行此操作,但如果我必须写入临时磁盘文件,这并不是世界末日。
编辑我刚刚发现有更多的 NAudio nuget 包扩展了基本的包。有一个用于 Lame,一个用于 WMA,但即使在安装它们之后,我也无法让任何代码工作。
看起来很简单...
创建一个新的控制台项目,用于nuget添加NAudio.Lame包(我创建它是为了封装LAMEMP3 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);
}
}
Run Code Online (Sandbox Code Playgroud)
使用 WMA 文件的文件名(或AudioFileReader该类可读的任何其他音频文件)和要保存到的文件名调用它并让它运行:
static void Main(string[] args)
{
ConvertToMP3(@"C:\temp\test.wma", @"C:\temp\test_transcode.mp3");
}
Run Code Online (Sandbox Code Playgroud)
当您的输入文件采用 MP3 编码器不支持的格式时,这可能会遇到问题。奇怪的通道数、样本格式或采样率都可能导致 MP3 写入器出现故障。我的测试文件在解码时是 44.1KHz Mono IEEE-float 格式,Lame 编解码器很乐意使用这种格式。如果您发现它不起作用,那么您必须进行一些示例转换才能将输入数据转换为兼容的格式。
此外,您可能想在LameMP3FileWriter构造函数中使用质量参数。有多种预设(如 LAME 编码器本身所定义),或者如果您愿意,可以尝试直接指定每秒千位。 NAudio.Lame.LAMEPreset.STANDARD产生一个 128Kbps 的文件。
| 归档时间: |
|
| 查看次数: |
4132 次 |
| 最近记录: |