2016-08-30 18 views
0

Мне нужно преобразовать звуковой файл spx (в формате ogg) в mp3-файл. Я пробовал пару вещей, и пока ничего не работает.Преобразование аудиофайла spx в mp3

Я пробовал использовать LameMP3FileWriter из библиотеки Naudio.Lame.

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-файл - это не что иное, как статический шум.

Я также нашел этот пример на странице Codeplex NSpeex (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».

Так что мой вопрос: как я могу преобразовать spx (в файл ogg) в mp3, используя C#?

ответ

0

Конверсии, подобные этому, должны выполняться в два этапа. Первый декодер от ogg до PCM. Затем закодируйте из PCM в WAV. Поэтому, если есть проблемы, отличным способом отладки является создание WAV-файла из декодированного ogg в первую очередь. И это позволяет прослушивать декодированный звук и проверять, все ли в порядке. Затем вы можете заняться вторым этапом кодирования в MP3. Вы можете использовать класс NAudio WaveFileWriter для создания своего WAV-файла.

+0

Как я могу декодировать файл ogg для PCM? – Kinetic

+0

Я предполагаю, что это возможно с NSpeex. Лучше спросить на сайте проекта. –

+0

Да, я сделал это. Страница NSpeex codeplex, похоже, не активна вообще, поэтому я не надеюсь. Тем временем наши пользователи будут использовать VLC для ручного преобразования. Я отправлю свое полное решение, если найду его. – Kinetic