我是非常新的音频或MP3的东西,一直在寻找一种方式,以分离一个MP3文件在C#,asp.net的功能。在没有太多帮助的情况下,Google搜索了三天的好消息后,我希望这里的某个人能够指引我一个正确的方向。NAudio拆分MP3文件
我可以使用NAudio来实现吗?有没有任何示例代码?提前致谢。
我是非常新的音频或MP3的东西,一直在寻找一种方式,以分离一个MP3文件在C#,asp.net的功能。在没有太多帮助的情况下,Google搜索了三天的好消息后,我希望这里的某个人能够指引我一个正确的方向。NAudio拆分MP3文件
我可以使用NAudio来实现吗?有没有任何示例代码?提前致谢。
我在c#中分割mp3文件的最终解决方案是使用NAudio。这里是一个示例脚本,希望它可以帮助社区中的某个人:
string strMP3Folder = "<YOUR FOLDER PATH>";
string strMP3SourceFilename = "<YOUR SOURCE MP3 FILENAMe>";
string strMP3OutputFilename = "<YOUR OUTPUT MP3 FILENAME>";
using (Mp3FileReader reader = new Mp3FileReader(strMP3Folder + strMP3SourceFilename))
{
int count = 1;
Mp3Frame mp3Frame = reader.ReadNextFrame();
System.IO.FileStream _fs = new System.IO.FileStream(strMP3Folder + strMP3OutputFilename, System.IO.FileMode.Create, System.IO.FileAccess.Write);
while (mp3Frame != null)
{
if (count > 500) //retrieve a sample of 500 frames
return;
_fs.Write(mp3Frame.RawData, 0, mp3Frame.RawData.Length);
count = count + 1;
mp3Frame = reader.ReadNextFrame();
}
_fs.Close();
}
感谢Mark Heath对此的建议。
所需的命名空间是NAudio.Wave。
你为什么要关闭并重新打开每个帧的文件流?这将表现不佳。 – BrokenGlass 2011-05-24 03:35:39
这只是为了在NAudio上进行快速测试。你是对的,它不应该继续打开和关闭文件流,编辑代码。 – 2011-05-24 05:44:42
这将是有益的Alvas Audio(商业)和ffmpeg
感谢您的评论,我会先给NAudio一试。 :) – 2011-05-24 01:15:23
-1 - Alvas Audio是商业! – 2012-08-22 12:26:36
对不起。刚刚编辑 – 2012-08-22 12:29:50
MP3文件是由MP3帧(加上开头和结尾往往ID3标签)的序列。然后,分离MP3文件的最简单方法是将一定数量的帧复制到一个新文件中(如果这很重要,也可以选择带上ID3标签)。
NAudio的MP3FileReader
课程特色ReadNextFrame
方法。这将返回一个MP3Frame
类,该类包含RawData
属性中的原始数据作为字节数组。它还包括一个SampleCount
属性,您可以使用它来准确测量每个MP3帧的持续时间。
感谢您的评论,我会试试这个..我会回来稍后更新我的发现。谢谢! – 2011-05-24 01:15:02
每个mp3Frame有多少毫秒?有什么公式或什么我可以用来获得每毫秒的每个MP3帧的长度? – SolidSnake 2011-06-02 21:03:22
@ ermac2014使用采样率。如果您知道每秒采样数量并知道采样数量,则按采样率除以采样数量以获得持续时间。 – 2011-06-06 08:46:02
以前的答案帮助我开始。 NAudio是要走的路。
对于我的PodcastTool我需要以2分钟的时间间隔分开播客,以便更快地找到特定的地点。
下面的代码来分割每N秒一个mp3:的
var mp3Path = @"C:\Users\ronnie\Desktop\mp3\dotnetrocks_0717_alan_dahl_imagethink.mp3";
int splitLength = 120; // seconds
var mp3Dir = Path.GetDirectoryName(mp3Path);
var mp3File = Path.GetFileName(mp3Path);
var splitDir = Path.Combine(mp3Dir,Path.GetFileNameWithoutExtension(mp3Path));
Directory.CreateDirectory(splitDir);
int splitI = 0;
int secsOffset = 0;
using (var reader = new Mp3FileReader(mp3Path))
{
FileStream writer = null;
Action createWriter = new Action(() => {
writer = File.Create(Path.Combine(splitDir,Path.ChangeExtension(mp3File,(++splitI).ToString("D4") + ".mp3")));
});
Mp3Frame frame;
while ((frame = reader.ReadNextFrame()) != null)
{
if (writer == null) createWriter();
if ((int)reader.CurrentTime.TotalSeconds - secsOffset >= splitLength)
{
// time for a new file
writer.Dispose();
createWriter();
secsOffset = (int)reader.CurrentTime.TotalSeconds;
}
writer.Write(frame.RawData, 0, frame.RawData.Length);
}
if(writer != null) writer.Dispose();
}
修改我的样本以实现这一点不应该很困难。你试过了吗?我可以在某个时候对其进行破解,而不是这一刻。开始和停止修剪点的测量单位是多少? – 2013-01-03 21:39:39
我一直在尝试还没有得到它。我第一次和NAudio合作。测量结果将是一个时间跨度。开始和停止。所以基本上是一个修剪开始和修剪结束。 – 2013-01-04 23:32:02
这里你去:http://stackoverflow.com/a/14169073/64334 – 2013-01-05 05:51:57
可能重复的[修剪一个MP3编程方式](http://stackoverflow.com/questions/551074/trim-an-mp3-programatically ) – ErikE 2013-01-05 08:09:20