PCM音频处理(2)——提高采样速度和截取部分采样
文章目录一、提高采样速度二、截取部分采样一、提高采样速度#include <stdio.h>#include <stdlib.h>int pcm16_speed(char *fileName){FILE *fp = fopen(fileName,"rb+");FILE *fp1 = fopen("outName4.pcm","wb+");int cnt = 0;unsign
·
一、提高采样速度
#include <stdio.h>
#include <stdlib.h>
int pcm16_speed(char *fileName)
{
FILE *fp = fopen(fileName,"rb+");
FILE *fp1 = fopen("outName4.pcm","wb+");
int cnt = 0;
unsigned char *readBuf = malloc(4);
while (!feof(fp))
{
fread(readBuf,1,4,fp);
//采取一半的字节
if (cnt%2!=0)
{
//左声道
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_speed("shishi.pcm");
return 0;
}
这里的时间变为了一般。
这里也有问题。就是我把时间缩短过后,他的声调也变了。本来是刘诗诗的歌,结果听起来想小黄人的一样。。
后面再去深究吧。
二、截取部分采样
这段代码用于单声道的东西,我这里没去找,所以就不演示了。
#include <stdio.h>
#include <stdlib.h>
int pcm16_cat(char *fileName,int start,int dur)
{
FILE *fp = fopen(fileName, "rb+");
FILE *fp1 = fopen("outName5.pcm","wb+");
FILE* fp2 = fopen("outName5.txt","wb+");
unsigned char* readBuf = malloc(2);
int cnt = 0;
while (!feof(fp))
{
//单声道每次读2个字节
fread(readBuf,1,2,fp);
if (cnt > start && cnt <= (start + dur))
{
fwrite(readBuf,1,2,fp1);
unsigned short readBuf1 = readBuf[1];
//获取高8位的采样值
readBuf1 = readBuf1 * 256;
//全部的采样值
readBuf1 = readBuf1 + readBuf[0];
fprintf(fp2,"%6d", readBuf1);
if (cnt % 10 == 0)
{
fprintf(fp2,"\n", readBuf1);
}
cnt++;
}
}
free(readBuf);
fclose(fp);
fclose(fp1);
fclose(fp2);
return 0;
}
int main()
{
//会把单声道PCM16LE格式的“???.pcm”中从1280点开始的120点的数据保存,到outName5.pcm里面。
pcm16_cat("???.pcm",1280,120);
return 0;
}
这里附上一个博文连接,里面有github资源】
https://blog.csdn.net/Codeliang666/article/details/106684246
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)