2016-08-30 300 views
0

我必須將spx音頻文件(ogg格式)轉換爲mp3文件。我已經嘗試了幾件事,至今沒有任何工作。將spx音頻文件轉換爲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?

回答

0

這樣的轉換需要分兩個階段完成。首先從ogg解碼到PCM。然後從PCM編碼到WAV。所以如果出現問題,一個好的調試方法是首先從解碼的ogg創建一個WAV文件。這可以讓你聆聽解碼後的音頻並檢查它是否正常。然後你可以解決MP3編碼的第二階段。您可以使用NAudio WaveFileWriter類創建您的WAV文件。

+0

如何解碼ogg文件到PCM? – Kinetic

+0

我認爲這是可能的NSpeex。最好在項目現場詢問。 –

+0

是的,我已經做到了。 NSpeex codeplex頁面似乎並不活躍,所以我沒有保持希望。同時,我們的用戶將使用VLC手動進行轉換。如果我找到它,我會發布完整的解決方案。 – Kinetic

相關問題