繁体   English   中英

使用Naudio将MP3文件转换为WAV文件时出现问题

Trouble converting an MP3 file to a WAV file using Naudio

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

Naudio库: http : //naudio.codeplex.com/

我正在尝试将MP3文件转换为WAV文件,但是遇到了一个小错误。 我知道出了什么问题,但我真的不知道如何解决它。

这是我正在运行的代码:

private void button1_Click(object sender, EventArgs e) {
    using(Mp3FileReader reader = new Mp3FileReader(@"path\to\MP3")) {
        using(WaveFileWriter writer = new WaveFileWriter(@"C:\test.wav", new WaveFormat())) {
            int counter = 0;
            while(reader.Read(test, counter, test.Length + counter) != 0) {
                writer.WriteData(test, counter, test.Length + counter);
                counter += 512;
            }
        }
    }
}

reader.Read()进入Mp3FileReader类,该方法如下所示:

public override int Read(byte[] sampleBuffer, int offset, int numBytes)
{
    if (numBytes % waveFormat.BlockAlign != 0)
        //throw new ApplicationException("Must read complete blocks");
        numBytes -= (numBytes % waveFormat.BlockAlign);
    return mp3Stream.Read(sampleBuffer, offset, numBytes);
}

mp3Stream是Stream类的对象。

问题是:我收到ArgumentException。 MSDN表示这是因为offset和numBytes的总和大于sampleBuffer的长度。

文档: http : //msdn.microsoft.com/zh-cn/library/system.io.stream.read.aspx

发生这种情况是因为我每次都会增加计数器,但是字节数组test的大小保持不变。

我一直想知道的是:我是否需要动态增加数组的大小,还是需要在开始时找出所需的大小并立即进行设置?

另外,Mp3FileReader中的方法不是512,而是第一次返回365。 整个块的大小。 但是我正在写完整的512。我基本上只是在使用read来检查我是否不在文件末尾。 我是否需要获取返回值并使用该值做点什么,还是我在这里好?

2 个回复

您需要使用Read()的返回值来确定您实际获得了多少个字节。 它不必是512,您已经发现了。 并且请记住,您正在使用流,而不是数组。 使它看起来与此类似:

   using (var reader = new Mp3FileReader(@"path\to\MP3")) {
        using (var writer = new WaveFileWriter(@"C:\test.wav", new WaveFormat())) {
            var buf = new byte[4096];
            for (;;) {
                var cnt = reader.Read(buf, 0, buf.Length);
                if (cnt == 0) break;
                writer.WriteData(buf, 0, cnt);
            }
        }
    }

在您的示例中,您实际上并没有执行从MP3到WAV的任何转换。 您需要WaveFormatConversionStream。 尝试这样的事情:

private void button1_Click(object sender, EventArgs e) {
    using(Mp3FileReader reader = new Mp3FileReader(@"path\to\MP3")) {
        using (WaveStream convertedStream = WaveFormatConversionStream.CreatePcmStream(reader)) {
            WaveFileWriter.CreateWaveFile(outputFileName, convertedStream);
        }
    }
}
1 将大mp3文件转换为WAV计时问题

我正在处理一些大型mp3声音文件。 从几小时到15多小时不等。 我需要将这些mp3文件转换为wav。 由于文件大小,无法加载整个文件然后进行转换。 到目前为止,我的解决方案是使用NAudio和NAudio.Lame我已经修改了: Mp3FileReader和Mp3FrameDecom ...

2 使用LAME将音频文件从.wav转换为MP3时出现问题

我正在尝试使用LAME为我的iOS应用程序将线性PCM音频文件(.wav)转换为MP3。 我成功地能够做到这一点,除了一个问题,创建的MP3文件小于orignal .wav文件。 对于30秒wav文件,创建的MP3文件为27秒,最后3秒的音频被切断。 在5分钟的音频中,大约30秒的音频被切 ...

3 在 C# 中使用 NAudio 将 M4A 音频文件转换为 MP3 的问题/错误

我正在为我作为业余爱好创建的音频转换软件创建演示。 我想使用简单的 GUI 将 M4A (MPEG-4) 音频文件转换为 MP3,以便用户进行交互。 我还实现了一个功能,允许用户在转换前播放选定的音频文件 (M4A),这是我从观看 NAudio 视频教程中学到的。 但是,我遇到了一个特定问题,使我无 ...

6 jlayer将.mp3文件转换为.wav文件时增加文件的大小

我正在使用jlayer将mp3文件转换为wav格式。 该代码运行良好,但是wav文件的大小增加了大约mp3文件大小的5倍。 为了进行转换,我使用了jlayer提供的jar文件。 任何人都请告诉我如何优化文件的大小。 ...

2013-02-22 14:22:19 1 626   jlayer
8 使用Node JS传输MP3文件时出现问题

首先,我的主要目标(除了流/发送mp3文件之外)是实现搜索。 我已经可以在Firefox和IE上运行它,但不能在Chrome上运行。 主要是,我检查了堕胎情况,Chrome总是提前中止。 有什么需要确保不会发生的事情(例如标头)? 这是服务器逻辑: function handler(r ...

9 NAudio - 将 mp3 / wav 文件转换为 SoundFont 文件

我正在寻找一个代码示例,展示如何将一系列音频文件(mp3 或 wav)转换为声音字体文件(sf2)。 假设文件夹中的一系列音符文件 C、D、E...,在 SoundFont 类中正确加载,然后保存到磁盘。 我不是要创建音调调制器应用程序,只是创建可供其他应用程序使用的 soundfont 文件。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM