private void PrepareVoiceSource(WaveFormat format) { if (_voice == null) { _linkedWaveFormat = format; //Voice Creation _voice = new SourceVoice(_soundEngine.Xaudio2, _linkedWaveFormat, true); //Do we have a special channel sound Mapping for this channel/speaker configuration ? float[] customMapping; if (_soundEngine.GetCustomChannelMapping(_voice.VoiceDetails.InputChannelCount, _soundEngine.DeviceDetail.OutputFormat.Channels, out customMapping)) { _defaultChannelMapping = customMapping; _voice.SetOutputMatrix(_voice.VoiceDetails.InputChannelCount, _soundEngine.DeviceDetail.OutputFormat.Channels, _defaultChannelMapping); } else { //Get default channel mapping _defaultChannelMapping = new float[_voice.VoiceDetails.InputChannelCount * _soundEngine.DeviceDetail.OutputFormat.Channels]; _voice.GetOutputMatrix(null, _voice.VoiceDetails.InputChannelCount, _soundEngine.DeviceDetail.OutputFormat.Channels, _defaultChannelMapping); } _voice.BufferEnd += _callback; } else { if (_linkedWaveFormat.SampleRate != format.SampleRate) { _voice.SourceSampleRate = format.SampleRate; _linkedWaveFormat = format; } } }