Как воссоздать звуковой белый шум? - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Пишу прогу для генерации белого шума. Имеется диапазон от 50 до 5 000 Гц. Программа выдаёт изначально частоту в половину (2475 Гц) а затем просто добавляет и отнимает от этой частоты числа в диапазоне от -2475 до 2475. Сам код выглядит вот так:
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);
}
Для работы нужна библиотека NAudio.

Главная проблема вот в чём.

При запуске таймера с задержкой в 1 секунду (1000) - всё работает как и должно - частоты добавляются и отнимаются как по маслу. При уменьшении задержки до 0.001 (как примерно и должно быть), звук сильно "тормозит". То есть я слышу задержку примерно в 0.1-0.3 секунд от силы. Как сделать так, что бы задержка была меньше? Если вы знаете другой способ реализации - буду рад услышать!

Решение задачи: «Как воссоздать звуковой белый шум?»

textual
Листинг программы
timer1.Start();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы