一、提高采样速度

#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
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐