文章目录
一、PCM16转PCM8
PCM16LE格式的采样数据的取值范围是-32768到32767,而PCM8格式的采样数据的取值范围是0到255。所以PCM16LE转换到PCM8需要经过两个步骤:
- 第一步是将-32768到32767的16bit有符号数值转换为-128到127的8bit有符号数值。
- 第二步是将-128到127的8bit有符号数值转换为0到255的8bit无符号数值。
#include <stdio.h>
#include <stdlib.h>
int pcm16_pcm8(char* fileName)
{
FILE *fp = fopen(fileName,"rb+");
FILE* fp1 = fopen("pcm8.pcm","wb+");
int cnt = 0;
unsigned char* readBuf = malloc(4);
while (!feof(fp))
{
short* readBuf16 = NULL;
char readBuf8 = 0;
unsigned char *readBuf8_u = 0;
fread(readBuf, 1, 4, fp);
//符号数值转换
//存储左声道的数据
readBuf16 = (short*)readBuf;
readBuf8 = (*readBuf16)>>8;
readBuf8_u = readBuf8 + 128;
//左声道
fwrite(&readBuf8_u,1,1,fp1);
//存储右声道的数据
readBuf16 = (short*)(readBuf+

本文详细介绍了PCM16位转化为PCM8位的过程,包括从16位有符号数值转换为8位有符号数值,再到无符号数值。同时,还探讨了PCM数据如何转换为WAV格式,涉及WAV文件头的构造和数据封装。虽然作者在PCM转WAV过程中遇到问题,但文章提供了完整的代码示例。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



