Генератор синусоиды.
В цифровом виде синусоидальная волна образуется из:Сэмпл(sample) или выборка | мгновенное значение волны |
Амплитуда | максимальное и минимальное значения зависят от разрядности. |
Разрядность | количество битов, используемых для представления выборки: 8, 16, 32 и т. д. Максимальная амплитуда равна (2^разрядность) / 2 – 1. |
Частота дискретизации | число выборок в секунду. |
В данном коде получаем 8 битную синусоиду (значения от 0 до 255) частоты freq с частотой дискритизации frqd = 44100 Гц.
void GenTone(int freq, long frqd = 44100, unsigned char * buf)
{ long i;
float w = 2 * 3.141593 * freq;
long N_SAMPL = frqd / freq;
for( i = 0; i < N_SAMPL; i++)
{
buf[i] = 128 + (char)(127. * sin(w * i / frqd));
//здесь 128 - амплитуда / 2
}
}
Тут необходимо позаботиться о наличии небоходимого массива buf