c语言程序设计wav,C语言实现WAV混音

#include

#include

#include

#define SIZE_AUDIO_FRAME (2)

void Mix(char sourseFile[10][SIZE_AUDIO_FRAME], int number, char *objectFile){

int const MAX = 32767;

int const MIN = -32768;

double f = 1;

int output;

int i = 0, j = 0;

for (i = 0; i

int temp = 0;

for (j = 0; j

temp += *(short*)(sourseFile[j] + i * 2);

}

output = (int)(temp*f);

if (output>MAX){

f = (double)MAX / (double)(output);

output = MAX;

}

if (output

f = (double)MIN / (double)(output);

output = MIN;

}

if (f<1){

f += ((double)1 - f) / (double)32;

}

*(short*)(objectFile + i * 2) = (short)output;

}

}

int main(int argc, char *argv[]) {

if(argc!=argc){

printf("error!\n");

return 0;

}

FILE * fp1, *fp2, *fpm;

fp1 = fopen(argv[1], "rb");

fp2 = fopen(argv[2], "rb");

fpm = fopen(argv[3], "wb");

short data1, data2, date_mix;

int ret1, ret2;

char sourseFile[10][2];

while (1){

ret1 = fread(&data1, 2, 1, fp1);

ret2 = fread(&data2, 2, 1, fp2);

*(short*)sourseFile[0] = data1;

*(short*)sourseFile[1] = data2;

if (ret1>0 && ret2>0){

Mix(sourseFile, 2, (char *)&date_mix);

/*

if( data1 < 0 && data2 < 0)

date_mix = data1+data2 - (data1 * data2 / -(pow(2,16-1)-1));

else

date_mix = data1+data2 - (data1 * data2 / (pow(2,16-1)-1));

*/

if (date_mix > pow(2, 16 - 1) || date_mix < -pow(2, 16 - 1))

printf("mix error\n");

}else if ((ret1 > 0) && (ret2 == 0)){

date_mix = data1;

}else if ((ret2 > 0) && (ret1 == 0)){

date_mix = data2;

}else if ((ret1 == 0) && (ret2 == 0)){

break;

}

fwrite(&date_mix, 2, 1, fpm);

}

fclose(fp1);

fclose(fp2);

fclose(fpm);

printf("OK Done!\n");

}

可以在centos下编译

# gcc -o hunyun hunyun.c

# ./hunyun 1.wav 2.wav 3.pcm

wav文件要编码一样才可以

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值