PCM音频处理(1)——分离声道、以及声音处理

一、声道分离

#include <stdio.h>
#include <stdlib.h>

int pcm16_split(char* fileName)
{
	FILE* fp = fopen(fileName,"rb+");
	FILE* fp1 = fopen("outName1.pcm","wb+");
	FILE* fp2 = fopen("ouName2.pcm","wb+");
	//malloc = 4S是因为左声道和右声道的采样值是间隔存储的。每个采样值占用2Byte空间,一共4个字节。
	unsigned char* readBuf = malloc(4);
	//feof(p)用于判断文件指针p在其所指的文件中的位置,如果到文件末,函数返回1,否则返回0
	while (!feof(fp))
	{
		fread(readBuf,1,4,fp);
		//左声道
		fwrite(readBuf,1,4,fp1);
		//右声道
		fwrite(readBuf, 1, 4, fp2);
	}
	free(readBuf);
	fclose(fp);
	fclose(fp1);
	fclose(fp2);
	return 0;
}

int main()
{
	pcm16_split("shishi.raw");
	return 0;
}

这样就可以分出两个文件来
用Adobe Audition 可以查看
在这里插入图片描述带上耳机就可以感觉到不一样了。

二、对左边声道进行降半处理

#include <stdio.h>
#include <stdlib.h>

int pcm16_jiangban(char* fileName)
{
	FILE* fp = fopen(fileName,"rb+");
	FILE* fp1 = fopen("outName3.pcm","wb+");
	
	unsigned char* readBuf = malloc(4);

	//定义一个采集次数,每次采集4个字节,一直采集完
	int cnt = 0;

	while (!feof(fp))
	{
		short* readBuf1 = NULL;
		fread(readBuf,1,4,fp);
		readBuf1 = (short*)readBuf;
		*readBuf1 = *readBuf1 / 2;

		//左声道
		fwrite(readBuf,1,2,fp1);
		//右声道
		fwrite(readBuf+2, 1, 2, fp1);

		cnt++;
	}
	printf("readBuf cnt:%d\n", cnt);
	free(readBuf);
	fclose(fp);
	fclose(fp1);
	return 0;
}
int main()
{
	pcm16_jiangban("shishi.raw");
	return 0;
}

在这里插入图片描述可以看出左边声道的声波确实是低一点。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永不秃头的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值