1.单声道转双声道
每隔一个采样插入一个采样
if(rhwparams.format == SND_PCM_FORMAT_S16_LE){
for(tempi=0;tempips32PcmBuffer+tempi);
*((short *)audiobuf+tempi*2+1)=*((short *)pstAiFrame->ps32PcmBuffer+tempi);
}
}
else if(rhwparams.format = SND_PCM_FORMAT_S32_LE){
for(tempi=0;tempips32PcmBuffer+tempi);
*((long *)audiobuf+tempi*2+1)=*((long *)pstAiFrame->ps32PcmBuffer+tempi);
}
}
2.双声道转单声道
先获取每个声道中数据字节数,去掉右声道的数据
#include
#include
#include
int judge(char filename[]) //判断是否为双声道文件
{
FILE *fp;
int j=0;
// char *c,c1;
if((fp=fopen(filename,"rb"))==NULL)
{
printf("error!\n");
exit(0);
}
fseek(fp,22L,0); //定位到文件的第23个字节
fread(&j,1,1,fp); //读取储存音频声道数的信息
// printf("%d\n",j);
if(j==1)
{
printf("this is mono file!\n"); //如果是单声道文件,则退出
exit (0);
}
fseek(fp,34L,0); //定位到第35个字节
fread(&j,1,1,fp); //读取音频文件的每个声道中各个样本的数据位数。
return (j/8);
fclose(fp);
}
void change(char file1name[],char file2name[],int i) //进行声道覆盖
{
FILE *in,*out;
long int *c = new long int[i]; //开辟以每个声道中各个样本的数据位数的数组空间
int j;
if((in=fopen(file1name,"rb"))==NULL)
{
printf("error!\n");
exit(0);
}
// in=fopen(file1name,"r");
if((out=fopen(file2name,"wb"))==NULL) //判断输出的文件是否能打开
{
printf("error!\n");
exit(0);
}
for(j = 0;j = argc, "Expecting an input file name\n");
input = argv[optind];
printf("input file [%s]\n", input);
printf("output file [%s]\n", output);
printf("new rate: [%d]\n", new_rate);
printf("quality: [%d]\n", quality);
ifd = open(input, O_RDONLY);
FAILIF(ifd
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?