Я инициализируется устройство с помощью:Изменение формата волна во время выполнения с NAudio
static IWavePlayer waveOut;
static WaveFormat waveFormat;
static BufferedWaveProvider waveProvider;
private static int AudioDeviceInit()
{
waveOut = new DirectSoundOut();
waveFormat = new WaveFormat(44100, 2);
waveProvider = new BufferedWaveProvider(waveFormat);
waveOut.Init(waveProvider);
waveOut.Play();
return 0;
}
Я добавление ИКМ потока к нему с помощью:
waveProvider.AddSamples(samples, 0, size);
Выше работает отлично до тех пор, данные потока имеют одинаковую конфигурацию.
У меня есть еще одна функция, которая получает частоту дискретизации и количество каналов, и я хочу перенастроить waveprovider для использования вновь предоставленной конфигурации. Вот код, который я использую:
private static void AudioConfigCallback(int rate, int channel)
{
waveFormat = new WaveFormat(rate, channel);
waveProvider = new BufferedWaveProvider(waveFormat);
waveOut.Init(waveProvider);
return;
}
Это не работает, и я считаю, что это не правильный способ сделать это, как хорошо. Любая идея, как я могу перенастроить устройство для использования новых sample_rate и num_channels
Спасибо.
Thanks Mark. Что касается производительности, что лучше, закрытие/открытие устройства или преобразование формата? –
Закрытие/открытие устройства будет работать лучше, поскольку любой необходимый SRC будет выполнен самим драйвером (по крайней мере, с WaveOut/DirectSoundOut). –
Да думал то же самое. Его работа теперь после закрытия и открытия устройства снова. Большое спасибо за вашу помощь :) –