用C语言写一个正弦波和三角波的叠加波形的发生程序
时间: 2023-05-27 08:02:34 浏览: 284
```c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
int main() {
int sample_rate = 44100; // 采样率为44100Hz
int duration = 5; // 持续时间为5秒
int samples = duration * sample_rate; // 样本数
double sin_freq = 440.0; // 正弦波频率为440Hz
double tri_freq = 220.0; // 三角波频率为220Hz
double amplitude = 0.5; // 振幅为0.5
double sin_period = 1.0 / sin_freq; // 正弦波周期
double tri_period = 1.0 / tri_freq; // 三角波周期
int i;
double t, sin_value, tri_value, mix_value;
for (i = 0; i < samples; i++) {
t = (double) i / sample_rate; // 当前时间
sin_value = amplitude * sin(2.0 * PI * sin_freq * t); // 正弦波采样值
tri_value = amplitude * (2.0 / M_PI) * asin(sin(2.0 * PI * tri_freq * t)); // 三角波采样值
mix_value = sin_value + tri_value; // 叠加波形
printf("%lf\n", mix_value); // 输出到标准输出
}
return 0;
}
```
该程序使用了标准的C库函数sin和asin计算正弦波和三角波的值,然后将它们叠加在一起输出到标准输出。可以将输出结果保存成WAV格式的音频文件,以便于用音频播放器播放。
阅读全文