2016-05-31 7 views
1

Я хочу преобразовать массив байтов (чтение из mp3-файла) в WaveStream, а затем создать WaveChannel32 для воспроизведения аудио в NAudio. Я могу читать массив байтов в Stream, а затем в Mp3FileReader, но он не позволяет мне изменять громкость. Поэтому я должен использовать WaveChannel32.Как преобразовать массив байтов в WaveStream в NAudio?

+0

Существует аналогичный пост http://stackoverflow.com/questions/184683/play-audio-from-a-stream-using-c-sharp, не уверенный, может ли он решить вашу проблему. –

ответ

1

Вы можете передать Mp3FileReader на номер WaveChannel32, который позволит вам панорамировать и изменять громкость.

var mp3Bytes = File.ReadAllBytes("d:/Music/RICHARD JOSEPH - Gods17.mp3"); 
using (var mp3Stream = new MemoryStream(mp3Bytes)) 
{ 
    using (var mp3FileReader = new Mp3FileReader(mp3Stream)) 
    { 
     using (var wave32 = new WaveChannel32(mp3FileReader, 0.1f, 1f)) 
     { 
      using (var ds = new DirectSoundOut()) 
      { 
       ds.Init(wave32); 
       ds.Play(); 
       Thread.Sleep(30000); 
      } 
     } 
    } 
} 
+0

Спасибо Матиас. Это тот ответ, который мне нужен. –

2

Я бы рекомендовал просто используя AudioFileReader класс, как и обеспечивает объем для вас и использует Mp3FileReader под капотом для MP3-файлов.

+0

У меня есть вопрос к вам. как я могу создать mp3-файл из массива байтов? я преобразовал файл в байты, используя ReadAllBytes (файл); в C#. пожалуйста помоги. –

+0

и, пожалуйста, дайте мне знать, если вы можете помочь мне в изменении каналов mono/stereo при преобразовании типа файла из .wav в .mp3 .... Я использую LAME. –

-1
var ms = new MemoryStream(soundArray.ToArray()); 
      IWaveProvider provider = new RawSourceWaveStream(ms, new WaveFormat()); 
      var waveOut = new NAudio.Wave.WaveOut(); 
      waveOut.DeviceNumber = GetDeviceNumber(); 
      waveOut.Init(provider); 
      waveOut.Play();