Изменение частоты дискретизации аудиокарты с помощью WasapiOut Naudio - PullRequest
0 голосов
/ 03 мая 2019

Я хочу выбрать конкретную частоту дискретизации для моей звуковой карты программно в c # с Naudio. Мой вывод - это WasapiOut в эксклюзивном режиме.

Я уже много чего перепробовал, но ничего не получалось, я искал везде и нашел только следующее: Как изменить конфигурацию динамика в Windows в C #? Но они не нашли правильного решения.

Вот мой WasapiOut:

var enumerator = new MMDeviceEnumerator();
MMDevice device = enumerator.EnumerateAudioEndPoints(DataFlow.Render, DeviceState.Active).FirstOrDefault(d => d.DeviceFriendlyName == name);
outputDevice = new WasapiOut(device, AudioClientShareMode.Exclusive, false,200);

Что я не понимаю, так это то, что здесь: https://github.com/naudio/NAudio/blob/master/Docs/WasapiOut.md Это говорит о том, что: «Если вы выбираете AudioClientShareMode.Exclusive, то вы запрашиваете эксклюзивный доступ к звуковой карте. Преимущества этого подхода в том, что вы можете указать точную частоту дискретизации, которую вы хотите» И я нигде не нашел, как указать частоту дискретизации.

Если кто-то здесь знает ответ, было бы здорово, спасибо!

Редактировать:

Я думаю, что нашел способ сделать это:

var waveFormat5 = WaveFormat.CreateIeeeFloatWaveFormat(Int32.Parse(comboBox1.Text), 2);
            var test2 = new MixingSampleProvider(waveFormat5);
            var audioFile = new AudioFileReader("test.wav");
            var input = audioFile;
            test2.ReadFully = true;
            test2.AddMixerInput(new AutoDisposeFileReader(input,waveFormat5));
            outputDevice.Init(test2);

С "outputDevice" в качестве моего WasapiOut. Поэтому я установил частоту дискретизации ouputDevice на ту, которую я выбрал с помощью поставщика микширующих выборок, а затем я отправил аудиофайл на этот микшер, это правильный путь? Потому что моя частота дискретизации аудиофайла равна 44100, и я решил установить частоту дискретизации outputDevice также на 44100, но когда я выполняю outputDevice.Play (), звук, который я слышу, быстрее оригинального.

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Я решил свою проблему, я использовал AudioPlaybackEngine (https://markheath.net/post/fire-and-forget-audio-playback-with) с MixingSampleProvider, и попытку / перехват для обработки сообщения об ошибке «входы не имеют одинаковую частоту дискретизации».

0 голосов
/ 04 мая 2019

Как только вы создали экземпляр WasapiOut, вы звоните Init, передавая звук, который вы хотите воспроизвести. Он будет пытаться использовать частоту дискретизации (и WaveFormat) этого аудио напрямую, предполагая, что звуковая карта поддерживает это. Usi

...