private WaveFormat SetupWaveFormat(WaveFormat waveFormat, AudioClient audioClient) { WaveFormat closestMatch; WaveFormat finalFormat = waveFormat; if (!audioClient.IsFormatSupported(_shareMode, waveFormat, out closestMatch)) { if (closestMatch == null) { WaveFormat mixformat = audioClient.GetMixFormat(); if (mixformat == null || !audioClient.IsFormatSupported(_shareMode, mixformat)) { WaveFormatExtensible[] possibleFormats = { new WaveFormatExtensible(waveFormat.SampleRate, 32, waveFormat.Channels, AudioSubTypes.IeeeFloat), new WaveFormatExtensible(waveFormat.SampleRate, 24, waveFormat.Channels, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 16, waveFormat.Channels, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 8, waveFormat.Channels, AudioSubTypes.Pcm) }; if (!CheckForSupportedFormat(audioClient, possibleFormats, out mixformat)) { //no format found... possibleFormats = new[] { new WaveFormatExtensible(waveFormat.SampleRate, 32, 2, AudioSubTypes.IeeeFloat), new WaveFormatExtensible(waveFormat.SampleRate, 24, 2, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 16, 2, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 8, 2, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 32, 1, AudioSubTypes.IeeeFloat), new WaveFormatExtensible(waveFormat.SampleRate, 24, 1, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 16, 1, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 8, 1, AudioSubTypes.Pcm) }; if (CheckForSupportedFormat(audioClient, possibleFormats, out mixformat)) { throw new NotSupportedException("Could not find a supported format."); } } } finalFormat = mixformat; } else { finalFormat = closestMatch; } } return finalFormat; }
private WaveFormat SetupWaveFormat(IWaveSource source, AudioClient audioClient) { WaveFormat waveFormat = source.WaveFormat; WaveFormat closestMatch; WaveFormat finalFormat = waveFormat; if (!audioClient.IsFormatSupported(_shareMode, waveFormat, out closestMatch)) { if (closestMatch == null) { WaveFormat mixformat = audioClient.GetMixFormat(); if (mixformat == null || !audioClient.IsFormatSupported(_shareMode, mixformat)) { WaveFormatExtensible[] possibleFormats = { new WaveFormatExtensible(waveFormat.SampleRate, 32, waveFormat.Channels, AudioSubTypes.IeeeFloat), new WaveFormatExtensible(waveFormat.SampleRate, 24, waveFormat.Channels, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 16, waveFormat.Channels, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 8, waveFormat.Channels, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 32, 2, AudioSubTypes.IeeeFloat), new WaveFormatExtensible(waveFormat.SampleRate, 24, 2, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 16, 2, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 8, 2, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 32, 1, AudioSubTypes.IeeeFloat), new WaveFormatExtensible(waveFormat.SampleRate, 24, 1, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 16, 1, AudioSubTypes.Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 8, 1, AudioSubTypes.Pcm) }; if (!CheckForSupportedFormat(audioClient, possibleFormats, out mixformat)) { throw new NotSupportedException("Could not find a supported format."); } } finalFormat = mixformat; } else finalFormat = closestMatch; //todo: test channel matrix conversion ChannelMatrix channelMatrix = null; if (UseChannelMixingMatrices) { try { channelMatrix = ChannelMatrix.GetMatrix(_source.WaveFormat, finalFormat); } catch (Exception) { Debug.WriteLine("No channelmatrix was found."); } } DmoResampler resampler = channelMatrix != null ? new DmoChannelResampler(_source, channelMatrix, finalFormat) : new DmoResampler(_source, finalFormat); resampler.Quality = 60; _source = resampler; _createdResampler = true; return finalFormat; } return finalFormat; }
private WaveFormat SetupWaveFormat(WaveFormat waveFormat, AudioClient audioClient) { WaveFormatExtensible closestMatch; WaveFormat finalFormat = waveFormat; if (!audioClient.IsFormatSupported(_shareMode, waveFormat, out closestMatch)) { if (closestMatch == null) { WaveFormat mixformat = audioClient.GetMixFormat(); if (mixformat == null || !audioClient.IsFormatSupported(_shareMode, mixformat)) { WaveFormatExtensible[] possibleFormats = new WaveFormatExtensible[] { new WaveFormatExtensible(waveFormat.SampleRate, 32, waveFormat.Channels, DMO.MediaTypes.MEDIATYPE_IeeeFloat), new WaveFormatExtensible(waveFormat.SampleRate, 24, waveFormat.Channels, DMO.MediaTypes.MEDIATYPE_Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 16, waveFormat.Channels, DMO.MediaTypes.MEDIATYPE_Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 8, waveFormat.Channels, DMO.MediaTypes.MEDIATYPE_Pcm) }; if (!CheckForSupportedFormat(audioClient, possibleFormats, out mixformat)) { //no format found... possibleFormats = new WaveFormatExtensible[] { new WaveFormatExtensible(waveFormat.SampleRate, 32, 2, DMO.MediaTypes.MEDIATYPE_IeeeFloat), new WaveFormatExtensible(waveFormat.SampleRate, 24, 2, DMO.MediaTypes.MEDIATYPE_Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 16, 2, DMO.MediaTypes.MEDIATYPE_Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 8, 2, DMO.MediaTypes.MEDIATYPE_Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 32, 1, DMO.MediaTypes.MEDIATYPE_IeeeFloat), new WaveFormatExtensible(waveFormat.SampleRate, 24, 1, DMO.MediaTypes.MEDIATYPE_Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 16, 1, DMO.MediaTypes.MEDIATYPE_Pcm), new WaveFormatExtensible(waveFormat.SampleRate, 8, 1, DMO.MediaTypes.MEDIATYPE_Pcm) }; if (CheckForSupportedFormat(audioClient, possibleFormats, out mixformat)) { throw new NotSupportedException("Could not find a supported format."); } } } finalFormat = mixformat; //todo: implement channel matrix DmoResampler resampler = new DmoResampler(_source, finalFormat); resampler.Quality = 60; _source = resampler; _createdResampler = true; } else { finalFormat = closestMatch; } } return finalFormat; }