将spx音频文件转换为mp3

时间:2016-08-30 14:05:13

标签: c# mp3 naudio nspeex

我必须将spx音频文件(ogg格式)转换为mp3文件。我尝试了几件事,到目前为止还没有任何工作。

我尝试过使用Naudio.Lame库中的LameMP3FileWriter。

private void WriteOggStreamToMp3File(Stream oggStream, string mp3FileName)
{
    var format = new WaveFormat(8000, 1);
    using (var mp3 = new LameMP3FileWriter(mp3FileName, format, LAMEPreset.ABR_128))
    {
        oggStream.Position = 0;
        oggStream.CopyTo(mp3);
    }
}

不能正常工作,因为输出的mp3文件只不过是静态噪音。

我也从NSpeex codeplex页面(https://nspeex.codeplex.com/discussions/359730)找到了这个样本:

private void WriteOggStreamToMp3File(Stream oggStream, string mp3FileName)
{
    SpeexDecoder decoder = new SpeexDecoder(BandMode.Narrow);
    Mp3WriterConfig config = new Mp3WriterConfig();

    using (Mp3Writer mp3 = new Mp3Writer(new FileStream(mp3FileName, FileMode.Create), config))
    {
        int i = 0;
        int bytesRead = 0;
        while (i < speexMsg.SpeexData.Length)
        {
            short[] outData = new short[160];
            bytesRead = decoder.Decode(speexMsg.SpeexData, i, speexMsg.FrameSize, outData, 0, false);

            for (int x = 0; x < bytesRead; x++)
                mp3.Write(BitConverter.GetBytes(outData[x]));

            i += speexMsg.FrameSize;
        }

        mp3.Flush();
    }
}

不幸的是,Mp3WriterConfig和Mp3Writer不是当前库(NSpeex)的一部分。我不知道&#34; speexMsg&#34;应该是。

所以我的问题是:如何使用c#将spx(在ogg文件中)转换为mp3?

1 个答案:

答案 0 :(得分:0)

这样的转换需要分两个阶段完成。首先从ogg解码到PCM。然后从PCM编码到WAV。因此,如果有问题,一个很好的调试方法是首先从解码的ogg创建一个WAV文件。这样您就可以收听已解码的音频并检查它是否正常。然后你可以解决编码到MP3的第二阶段。您可以使用NAudio WaveFileWriter类来创建WAV文件。