Как воссоздать звуковой белый шум? - 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();