介尘部落

文学|音乐|休闲娱乐|计算机技术|地球科学|社会学——知识成就命运


使用开源音频处理组件NAudio合并拼接MP3文件

在音频编辑中最常用的就是音频合并拼接了。使用Naudio也可以方便的实现。

这是一般采用的方法:

    /// <summary>
    /// Mp3格式合并
    /// </summary>
    /// <param name="inputFiles">待合并文件路径</param>
    /// <param name="outputfullName">输出文件名</param>
    public void CombineMp3(List<string> inputFiles, string outputfullName)
    {
        FileStream outputStream = new FileStream(outputfullName, FileMode.OpenOrCreate);
        foreach (string file in inputFiles)
        {
            foreach (var file in inputFiles)
            {
            Mp3FileReader reader = new Mp3FileReader(file);
            if ((outputStream.Position == 0) && (reader.Id3v2Tag != null))
            {
                outputStream.Write(reader.Id3v2Tag.RawData, 0, reader.Id3v2Tag.RawData.Length);
            }
            Mp3Frame frame;
            while ((frame = reader.ReadNextFrame()) != null)
            {
                outputStream.Write(frame.RawData, 0, frame.RawData.Length);
            }
            }
            outputStream.Seek(0, SeekOrigin.Begin);
        }
    }

另外还可以借助Naudio提供的ConcatenatingSampleProvider方法来实现

var first = new AudioFileReader("first.mp3");
var second = new AudioFileReader("second.mp3");
var third = new AudioFileReader("third.mp3");

var playlist = new ConcatenatingSampleProvider(new[] { first, second, third });)

// to play:
outputDevice.Init(playlist);
outputDevice.Play();

// ... OR ... to save to file
WaveFileWriter.CreateWaveFile16("playlist.wav", playlist);

还可以在拼接的同时加入空白时长。

var first = new AudioFileReader("first.mp3");
var second = new AudioFileReader("second.mp3");
var playlist = first.FollowedBy(TimeSpan.FromSeconds(1), second);

完美!

需要注意的是在拼接合并过程中,必须每个MP3文件的采样率SimpleRate都是相同的,不然不能拼接。因为在同一个MP3文件中只能有一个采样率。

阅读全文
公众号-介尘阅读时光
赞赏支持

0 Responses to “使用开源音频处理组件NAudio合并拼接MP3文件”

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)