上一篇博客中,我们已经介绍了根据PCM解析出的数据绘制全部的波形图,但这样有一个缺点,就是很丑,而且和我们日常听音乐看到的波形图也不一样,我们在听音乐时的波形图时动态震荡的,跟随音乐抖动,很有feel的,接下来我们来介绍如何实现这一点。
之前我们在绘制波形图采用的是循环拿出PCM中的数据传入OpenGL进行绘制,而要实现动态显示,这一点必须改变,我们需要将PCM中解析出的数据保存起来,实现方法是解析出数据存入数组中:
//PCM文件数据解码保存到数组中
void fileOutput()
{
short pcm_In = 0;
int size = 0;
FILE *fp = fopen(OLD_FILE_PATH, "rb+"); //为读写打开一个二进制文件 即pcm文件
while(!feof(fp))
{
size = fread(&pcm_In, 2, 1, fp); //pcm中每个数据大小为2字节,每次读取1个数据
if(size>0)
{
//-------------------------------------------------------------------------------------------------------------------------
vertices.push_back((float)pcm_In/10000);
}
}
fclose(fp);
}
动态显示的思路:为数组设置两个迭代器指针,istart指向每次绘制图形时数据的起点,iend指向每次绘制图形时所取数据的终点