用c语言提取一个44100hz的wav文件的16位pcm数据,打印pcm数据
时间: 2024-05-10 22:16:11 浏览: 64
以下是使用C语言提取一个44100Hz的WAV文件的16位PCM数据并打印PCM数据的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define HEADER_SIZE 44
int main() {
FILE *fp = fopen("example.wav", "rb");
if (fp == NULL) {
printf("Failed to open file.\n");
return 1;
}
// Read header
uint8_t header[HEADER_SIZE];
fread(header, sizeof(uint8_t), HEADER_SIZE, fp);
// Check if file is a WAV file
if (header[0] != 'R' || header[1] != 'I' || header[2] != 'F' || header[3] != 'F') {
printf("Not a WAV file.\n");
return 1;
}
// Get data size
uint32_t data_size = *(uint32_t*)(header + 40);
// Allocate memory for PCM data
int16_t *pcm_data = (int16_t*)malloc(data_size);
// Read PCM data
fread(pcm_data, sizeof(int16_t), data_size / 2, fp);
// Print PCM data
for (int i = 0; i < data_size / 2; i++) {
printf("%d\n", pcm_data[i]);
}
// Free memory and close file
free(pcm_data);
fclose(fp);
return 0;
}
```
注意,上述代码只适用于读取16位PCM数据的WAV文件,并且假设WAV文件头的大小为44字节。如果您需要读取其他类型的WAV文件,请在代码中进行相应的修改。
阅读全文