我一直在努力與NAudio的C#項目,我需要發送特定音頻信號到特定揚聲器在4通道系統。基本上,我需要向後置左揚聲器發送'環境聲音',向前置右揚聲器發送'前面板顯示器聲音',向前置左揚聲器發送'預錄製指令'。 我目前的設計適用於我的臺式電腦支持的2通道設置,但是當我嘗試在我的測試硬件上將其擴展到4個通道時,我不斷收到以下錯誤:「值不在預期範圍內。當我打電話給WasapiOut.init()時。我認爲問題是由MultiplexingSampleProvider以某種方式引起的,但我無法弄清楚爲什麼/如何解決問題。我驗證我使用的AudioDevice是否支持足夠的通道,然後再嘗試加載它,所以它不是缺少導致此問題的通道。NAudio與MultiplexingSampleProvider和WasapiOut
這裏是導致問題的代碼:
// Create mixer provider for each channel.
for(int Count = 0; Count < Channels; Count++)
{
_Mixers.Add(new MixingSampleProvider(_Format.AsStandardWaveFormat()));
_Mixers[Count].MixerInputEnded += SoundEndedEvent;
}
// Create and configure multiplexer provider.
_Multi = new MultiplexingSampleProvider(_Mixers, Channels);
for(int count = 0; count < Channels; count++)
{
_Multi.ConnectInputToOutput(count, 0);
}
// Add master volume control provider.
_Volume = new VolumeSampleProvider(_Multi);
_Volume.Volume = 1.0f;
// Initialize output device.
_OutputDev.Init(p_Volume);
_format與設置44.1kHz的,32位,1個信道一個WAVEFORMATEXTENSIBLE類。
一切工作,直到我打電話_OutputDev.Init(p_Volume),這是我得到'價值不在預期範圍內'。例外。
任何想法,爲什麼我得到這個異常,以及如何解決這個問題?
謝謝。
編輯
這是堆棧跟蹤我得到。
System.ArgumentException: Value does not fall within the expected range. at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo) at NAudio.Wave.WasapiOut.Init(IWaveProvider waveProvider) at NAudio.Wave.WaveExtensionMethods.Init(IWavePlayer wavePlayer, ISampleProvider sampleProvider, Boolean convertTo16Bit) at GSound.Audio.Player..ctor(Int32 Channels, Int32 Device) in E:\Dev\GSound_Wasapi\Projects\GSound\Audio\Player.cs:line 220 at GSound.Audio.Handler..ctor(Config TheConfig) in E:\Dev\GSound_Wasapi\Projects\GSound\Audio\Handler.cs:line 78 at GSound.UIData..ctor() in E:\Dev\GSound_Wasapi\Projects\GSound\UIData.cs:line 63
我認爲問題發生在AudioClient.Initialize調用中,該調用正在生成E_INVALIDARG錯誤。這將指示WasapiOut生成的格式值出現問題,或與客戶端屬性有關的問題。我將檢查這兩個問題,但任何指針都會有所幫助。
再次感謝您。
WASAPI設備不一定允許您打開多聲道音頻(即> 2個聲道)。我當然沒有設法達到這個目標。 ASIO –
可能會有更多的成功,所以即使所選設備通過MMDevice.Properties指示PKEY_AudioEndPoint_PhysicalSpeakers掩蓋了它具有4個揚聲器,但實際上並未保證訪問它們。我將不得不查看是否可以獲得ASIO驅動程序我們正在使用的聲卡。以及試圖找出更多關於Wasapi,因爲這似乎很奇怪。 – JonDemers