1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > C++ 双声道PCM音频分成单声道音频

C++ 双声道PCM音频分成单声道音频

时间:2022-02-23 15:11:53

相关推荐

C++ 双声道PCM音频分成单声道音频

记录一下自己写的双声道音频切分成单声道音频的代码

原始音频的格式为:采样率16KHZ采样点精度16位 双声道

#include <iostream> #include <stdio.h>using namespace std;#define PCMTESTint main(){#ifdef PCMTESTFILE *fp = fopen(".\\srpcm\\test.pcm", "rb");#elseFILE *fp = fopen(".\\srpcm\\txttxt.txt", "rb");#endifif (fp == NULL){printf("Open File Failed!\n");return 0;}fseek(fp, 0L, SEEK_END);long fileLength = ftell(fp);fseek(fp,0L, SEEK_SET);printf("获取文件的长度\n", fileLength);printf("File Length %ld byte\n", fileLength);char* pBuff = new char[fileLength];memset(pBuff, 0, fileLength);int readLength = fread(pBuff, sizeof(char), fileLength, fp);printf("readLength = %d\n", readLength);//采样精度16bit = 2 Byte,所以这里用了shortshort *pBuffLeft = new short[fileLength / 4];short *pBuffRight = new short[fileLength / 4];memset(pBuffLeft, 0, fileLength / 2);memset(pBuffLeft, 0, fileLength / 2);for (int i = 0; i < (fileLength / 4); i++){pBuffLeft[i] = ((short*)pBuff)[i * 2];pBuffRight[i] = ((short*)pBuff)[(i * 2) + 1];}#ifdef PCMTESTFILE *fpLeft = fopen(".\\srpcm\\testLeft.pcm", "wb");FILE *fpRight = fopen(".\\srpcm\\testRight.pcm", "wb");FILE *fpAll = fopen(".\\srpcm\\testAll.pcm", "wb");#elseFILE *fpLeft = fopen(".\\srpcm\\txtLeft.txt", "wb");FILE *fpRight = fopen(".\\srpcm\\txtRight.txt", "wb");FILE *fpAll = fopen(".\\srpcm\\txtAll.txt", "wb");#endiffwrite(pBuffLeft, sizeof(char), fileLength / 2, fpLeft);fwrite(pBuffRight, sizeof(char), fileLength / 2, fpRight);fwrite(pBuff, sizeof(char), fileLength, fpAll);fclose(fpLeft);fclose(fpRight);fclose(fpAll);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。