C代码生成一段48K采样率,16位宽的PCM曲子
时间: 2025-01-01 08:37:02 浏览: 10
在C语言中生成48kHz采样率、16位宽的PCM音频数据通常需要利用音频处理库,比如libavcodec或者SDL_mixer。这里是一个简化的示例,它创建了一个单声道的数组来存储PCM样本。请注意,实际生成长音频文件需要将这个过程封装到循环中,并可能涉及到文件I/O。
```c
#include <stdio.h>
#include <stdlib.h>
#define SAMPLE_RATE 48000
#define BITS_PER_SAMPLE 16
#define CHANNELS 1
typedef short int sample_t;
void generate_pcm_samples(sample_t *samples, int num_samples) {
for (int i = 0; i < num_samples; ++i) {
// 这里只是一个占位符,实际音频需要填充合适的波形(如正弦波或其他音效)
samples[i] = (sample_t)(sin(i / (float)SAMPLE_RATE * M_PI * 2) * (1 << (BITS_PER_SAMPLE - 1)));
}
}
int main() {
int num_samples = SAMPLE_RATE * 1000; // 生成1秒的音频
sample_t *audio_data = malloc(sizeof(sample_t) * num_samples * CHANNELS);
if (!audio_data) {
printf("Memory allocation failed.\n");
return 1;
}
generate_pcm_samples(audio_data, num_samples);
// 现在audio_data包含了一段16位的PCM数据,你可以选择保存到文件,比如使用wavefile库:
FILE* file = fopen("output.wav", "wb");
if (!file) {
printf("Failed to open file for writing.\n");
free(audio_data);
return 1;
}
// 使用wavefile库或其他音频文件工具函数写入PCM数据
// wav_write(file, audio_data, num_samples * CHANNELS, &info); // info结构需包含SampleRate, NumChannels等
fclose(file);
free(audio_data);
return 0;
}
```
阅读全文