以下是一个能够自动生成1kHz音频PCM数据流的C语言代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SAMPLE_RATE 44100
#define AMPLITUDE 32767
#define FREQUENCY 1000.0
int main() {
unsigned int numSamples = SAMPLE_RATE; // 持续1秒钟的样本数
short int *pcmData = (short int *)malloc(numSamples * sizeof(short int));
if (pcmData == NULL) {
printf("内存分配失败!\n");
return 1;
}
double phaseIncrement = 2.0 * M_PI * FREQUENCY / SAMPLE_RATE;
double phase = 0.0;
// 生成1kHz音频PCM数据
for (unsigned int i = 0; i < numSamples; i++) {
pcmData[i] = AMPLITUDE * sin(phase);
phase += phaseIncrement;
}
// 将PCM数据流写入文件
FILE *file = fopen("audio.pcm", "wb");
if (file != NULL) {
fwrite(pcmData, sizeof(short int), numSamples, file);
fclose(file);
printf("PCM数据流已生成并保存在 audio.pcm 文件中。\n");
} else {
printf("无法打开文件进行写入!\n");
}
free(pcmData);
return 0;
}
在示例代码中,定义了一些常量,包括采样率(SAMPLE_RATE),振幅(AMPLITUDE)和频率(FREQUENCY),用于生成1kHz音频PCM数据流。首先,我们使用动态内存分配来为PCM数据流分配空间。然后,我们根据采样率和频率计算出相位递增量,并使用正弦函数生成PCM数据。最后,我们将PCM数据流写入名为 “audio.pcm” 的文件中。
请注意,生成的PCM数据流是以16-bit有符号整数(short int)的格式存储的,并以二进制形式写入文件。你可以使用支持PCM音频的播放器来播放或处理生成的音频PCM数据流文件。