Как сгенерировать синусоиду на C?

Пользователь

от kennedi_pfeffer , в категории: C/C++ , год назад

Как сгенерировать синусоиду на C?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от william_stoltenberg , год назад

@kennedi_pfeffer 

В языке программирования C можно сгенерировать синусоиду с помощью стандартной библиотеки математических функций "math.h". Вот пример кода, который генерирует синусоиду с частотой 1 Гц, амплитудой 1 и длительностью 1 секунду:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <math.h>
#include <stdio.h>

#define SAMPLE_RATE 44100    // частота дискретизации
#define DURATION 1           // длительность в секундах
#define AMPLITUDE 32767      // амплитуда, максимальное значение 16-битного знакового числа

int main()
{
    int num_samples = SAMPLE_RATE * DURATION;
    short samples[num_samples];

    for (int i = 0; i < num_samples; i++)
    {
        double t = (double)i / SAMPLE_RATE;
        double amplitude = (double)AMPLITUDE;
        double frequency = 1.0;
        double phase = 0.0;
        double value = amplitude * sin(2 * M_PI * frequency * t + phase);
        samples[i] = (short)value;
    }

    FILE *file = fopen("sine_wave.raw", "wb");
    fwrite(samples, sizeof(short), num_samples, file);
    fclose(file);

    return 0;
}


Этот код генерирует синусоиду в виде массива звуковых сэмплов и сохраняет их в двоичный файл "sine_wave.raw". Этот файл можно воспроизвести в любом аудио-плеере или использовать в других программных проектах. Обратите внимание, что этот код использует 16-битный формат звуковых сэмплов, который является стандартным форматом для CD-качества звука.