2013-05-21 32 views
0

我已經使用NAudio在C#中編寫了一種方法,可以成功輸出2聲道聲音,但在6聲道聲音時失敗。NAudio的六聲道輸出? (或其他支持它的.NET庫的建議?)

當使用waveout的,我得到「MmException是未處理的:無效參數調用waveOutOpen」

這裏是我的代碼:

public class AudioOutput { 
    private WaveOut latestAudioOut = null; 
    private WaveMemoryStream latestMemoryStream = null; 
    public void PlayAudio (byte[][] buffers, WaveFormat format) { 
     if (latestAudioOut != null) { 
      latestAudioOut.Stop(); 
      latestAudioOut.Dispose(); 
     } 
     latestAudioOut = new WaveOut(); 
     if (latestMemoryStream != null) { 
      latestMemoryStream.Dispose(); 
     } 
     int longestChannelLength = 0; 
     foreach (byte[] b in buffers) { 
      if (b != null) if (b.Length > longestChannelLength) longestChannelLength = b.Length; 
     } 
     byte[][] finalisedbuffers = new byte[buffers.Length][]; 
     for (int i = 0; i < buffers.Length; i ++) { 
      finalisedbuffers[i] = new byte[longestChannelLength]; 
      if (buffers[i] != null) buffers[i].CopyTo(finalisedbuffers[i], 0); 
     } 
     buffers = finalisedbuffers; 
     byte[] interLeavedBuffer = new byte[longestChannelLength * buffers.Length]; 
     int bytesPerSample = format.BitsPerSample/8; 
     int frameLength = buffers.Length * bytesPerSample; 
     int numberOfFrames = longestChannelLength/bytesPerSample; 
     int position = 0; 
     int frameStart = 0; 
     for (int f = 0; f < numberOfFrames; f ++) { 
      for (int c = 0; c < buffers.Length; C++) { 
       for (int b = 0; b < bytesPerSample; b ++) { 
        interLeavedBuffer[position] = buffers[c][frameStart + b]; 
        position ++; 
       } 
      } 
      frameStart += bytesPerSample; 
     } 
     MemoryStream bufferStream = new MemoryStream(interLeavedBuffer); 
     latestMemoryStream = new WaveMemoryStream(bufferStream, format); 
     latestAudioOut.Init(latestMemoryStream); 
     latestAudioOut.Play(); 
    } 

回答

1

我想你需要使用WaveFormatExtensible而不是WaveFormat

+0

我嘗試用WaveFormatExtensible替換WaveFormat。它似乎已經解決了,謝謝! –

0

我知道這看起來似乎是不實際解決能說會道響應您的特殊問題,但我有幾年前需要在自己的項目中提供廣泛的音頻支持。

評估完所有可以找到的C#兼容庫(包括NAudio)之後,我選擇使用BASS Library from Un4seen Developments這個庫很棒,它對C#有着全面和廣泛​​的支持。

它可以處理我曾經拋出的一切,並支持豐富的插件環境和VST支持。使用BASS實現你所需要的應該是非常直接的,支持論壇是非常好的。

+0

因爲我正在尋找替代品,所以一點都不甘。謝謝。 –

+0

不錯!標記爲答案,如果有幫助! :) – Jammer