Как воссоздать звуковой белый шум? - C#
Формулировка задачи:
Здравствуйте!
Пишу прогу для генерации белого шума.
Имеется диапазон от 50 до 5 000 Гц. Программа выдаёт изначально частоту в половину (2475 Гц) а затем просто добавляет и отнимает от этой частоты числа в диапазоне от -2475 до 2475. Сам код выглядит вот так:
Для работы нужна библиотека NAudio.
Листинг программы
- public class SineWaveProvider32 : WaveProvider32
- {
- int sample;
- public SineWaveProvider32()
- {
- Frequency = 1000;
- Amplitude = 0.25f; // let's not hurt our ears
- }
- public float Frequency { get; set; }
- public float Amplitude { get; set; }
- public override int Read(float[] buffer, int offset, int sampleCount)
- {
- int sampleRate = WaveFormat.SampleRate;
- for (int n = 0; n < sampleCount; n++)
- {
- buffer[n + offset] = (float)(Amplitude * Math.Sin((2 * Math.PI * sample * Frequency) / sampleRate));
- sample++;
- if (sample >= sampleRate) sample = 0;
- }
- return sampleCount;
- }
- }
- // Тут начинается нужный код
- SineWaveProvider32 sineWaveProvider = new SineWaveProvider32();
- WaveOut waveOut = new WaveOut();
- private void button1_Click(object sender, EventArgs e)
- {
- sineWaveProvider.SetWaveFormat(16000, 1); // mono
- sineWaveProvider.Frequency = 2475;
- sineWaveProvider.Amplitude = 0.25f;
- waveOut.Init(sineWaveProvider);
- waveOut.Play();
- timer1.Enable = true;
- }
- private void timer1_Tick(object sender, EventArgs e)
- {
- Random rn = new Random();
- sineWaveProvider.Frequency = 2475 + rn.Next(-2475,2475);
- }
Главная проблема вот в чём.
При запуске таймера с задержкой в 1 секунду (1000) - всё работает как и должно - частоты добавляются и отнимаются как по маслу. При уменьшении задержки до 0.001 (как примерно и должно быть), звук сильно "тормозит". То есть я слышу задержку примерно в 0.1-0.3 секунд от силы. Как сделать так, что бы задержка была меньше? Если вы знаете другой способ реализации - буду рад услышать!Решение задачи: «Как воссоздать звуковой белый шум?»
textual
Листинг программы
- timer1.Start();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д