evg

Генератор синусоиды.

В цифровом виде синусоидальная волна образуется из:
Сэмпл(sample) или выборкамгновенное значение волны
Амплитуда максимальное и минимальное значения зависят от разрядности.
Разрядность количество битов, используемых для представления выборки: 8, 16, 32 и т. д. Максимальная амплитуда равна (2^разрядность) / 2 – 1.
Частота дискретизации число выборок в секунду.
Генератор используется для получения в массиве buf значений синусоиды (сэмплов) в количестве N_SAMPL = FRQD / FREQ;
В данном коде получаем 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

Коментарии