0

我必须将 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) 的一部分。而且我不知道“speexMsg”应该是什么。

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

4

1 回答 1

0

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

于 2016-08-31T20:06:44.870 回答