本文概述
- 要求
- A.使用Mp3FileReader类
- B.使用MediaFoundationReader类
- C.在NLayer中使用Mp3FileReader类
你可以使用广为人知的NAudio库轻松地将MP3文件转换为WAV, 这是本文提供的任何选项之后的.NET的音频和MIDI库。它们非常简单, 我们在具有单个按钮的简单表单的WinForms应用程序上下文中使用它们。当用户单击附加在button1_Click事件上的按钮时, 将执行将MP3文件转换为WAV的代码。它们全部遵循以下逻辑:使用Mp3FileReader打开MP3文件, 然后将其传递给WaveFileWriter.CreateWaveFile, 以将转换后的PCM音频写入WAV文件。这通常是44.1kHz 16位立体声, 但是使用MP3解码器发出的任何格式。
要求 你将需要使用NuGet程序包管理器在项目中安装NAudio库。打开你的Winforms C#项目, 然后在解决方案资源管理器中打开NuGet程序包管理器:
文章图片
转到浏览选项卡并搜索NAudio:
文章图片
从列表中, 选择Mark Heath提供的NAudio软件包, 然后单击” 安装” 按钮即可进行安装。安装完成后, 你将可以在要使用它的类中导入NAudio的Wave命名空间, 如下所示:
using NAudio.Wave;
如果你已经安装了NAudio, 则可以使用以下任一选项继续转换MP3文件:
注意 你需要使用的选项完全取决于运行代码的主机。例如, Mp3FileReader类使用Windows的几乎所有消费者版本上都存在的ACM MP3编解码器。但是, 请务必注意, 某些Windows Server版本在未安装” 桌面体验” 组件的情况下未安装此编解码器。
A.使用Mp3FileReader类 【如何在WinForms C#中使用NAudio将MP3文件转换为WAV】将MP3文件转换为WAV的最简单方法是使用Mp3FileReader类, 该类期望将要转换的文件的路径作为第一个参数。这将返回该类的读取器实例, 这是转换文件的重要部分所需的WaveFileWrite类, 该类提供了一个静态方法, 即发生转换魔术的CreateWaveFile。此方法将目标文件路径和WAV文件的名称作为第一个参数, 将MP3文件的读取器作为第二个参数(提供应在新文件中存储哪些内容):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// Import Wave of NAudio to use the Mp3FileReaderusing NAudio.Wave;
namespace Sandbox{public partial class Form1 : Form{public Form1(){InitializeComponent();
}private void Form1_Load(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){// Store the path of the file that you want to convert into a wav// as well its new path and name with extensionstring InputAudioFilePath = @"C:\Users\sdkca\Desktop\song.mp3";
string OutputAudioFilePath = @"C:\Users\sdkca\Desktop\song_converted.wav";
// Use the Mp3FileReader to obtain the content of the audio and use the wavfilewriter// to create the new file in wav format in the providen path with the content of the fileusing (Mp3FileReader reader = new Mp3FileReader(InputAudioFilePath)){WaveFileWriter.CreateWaveFile(OutputAudioFilePath, reader);
}}}}
B.使用MediaFoundationReader类 MediaFoundationReader是一个灵活的类, 它使你可以读取Media Foundation支持的任何音频文件格式。它通常在大多数Windows消费者版本上都包含MP3, 但通常还支持WMA, AAC, MP4等。因此, 除非你需要支持Windows XP或未安装任何Media Foundation的Windows版本, 否则这是一个不错的选择。逻辑与Mp3Reader类几乎相同, 创建一个读取器并将其提供为WaveFileWriter类的CreateWaveFile方法的第二个参数:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// Import Wave of NAudio to use the MediaFoundationReaderusing NAudio.Wave;
namespace Sandbox{public partial class Form1 : Form{public Form1(){InitializeComponent();
}private void Form1_Load(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){// Store the path of the file that you want to convert into a wav// as well its new path and name with extensionstring InputAudioFilePath = @"C:\Users\sdkca\Desktop\song.mp3";
string OutputAudioFilePath = @"C:\Users\sdkca\Desktop\song_converted.wav";
// Use the MediaFoundationReader class to obtain the content of the audio and use the wavfilewriter// to create the new file in wav format in the providen path with the content of the fileusing (MediaFoundationReader reader = new MediaFoundationReader(InputAudioFilePath)){WaveFileWriter.CreateWaveFile(OutputAudioFilePath, reader);
}}}}
C.在NLayer中使用Mp3FileReader类 如果要使用NLayer(完全托管的MP3到WAV解码器), 则还需要使用NuGet软件包管理器进行安装:
文章图片
安装后, 你将能够导入我们将在转换过程中使用的NLayer的NAudioSupport类。该逻辑遵循前面示例的逻辑, 但是Mp3FileReader类实例将在构造函数中接收带有新的Mp3FrameDecompressor类实例的lambda表达式作为第二个参数:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// Import Wave of NAudio to use the MediaFoundationReaderusing NAudio.Wave;
using NLayer.NAudioSupport;
namespace Sandbox{public partial class Form1 : Form{public Form1(){InitializeComponent();
}private void Form1_Load(object sender, EventArgs e){}private void button1_Click(object sender, EventArgs e){// Store the path of the file that you want to convert into a wav// as well its new path and name with extensionstring InputAudioFilePath = @"C:\Users\sdkca\Desktop\song.mp3";
string OutputAudioFilePath = @"C:\Users\sdkca\Desktop\song_converted.wav";
// Use the MediaFoundationReader class to obtain the content of the audio and use the wavfilewriter// to create the new file in wav format in the providen path with the content of the fileusing (Mp3FileReader reader = new Mp3FileReader(InputAudioFilePath, wf =>
new Mp3FrameDecompressor(wf))){WaveFileWriter.CreateWaveFile(OutputAudioFilePath, reader);
}}}}
编码愉快!
推荐阅读
- 如何在Windows中使Visual Studio代码窗口透明
- 如何在Symfony中使用FOSUserBundle和FOSOAuthServerBundle启用电子邮件和用户名登录
- 如何使用Twig获取路径,实际路由和主机域的规范URL
- Web Api(Symfony 2或3和预检的Angular响应具有无效的HTTP状态代码403)
- 如何在Symfony 3中创建依赖选择(依赖下拉列表)
- 如何使用PHP根据日期计算年龄
- IN3026 游戏技术
- android studio NDK上的turbo c ++ graphics.h程序
- Android Things(支持NDK吗( [关闭]))