【C++】基于OpenGL的音乐可视化(二):波形的绘制

在上一篇博客中,我已经介绍了怎么去解析PCM文件获取音量数据,这次我们根据获取的音量数据绘制出我们的波形图,即简单的实现了音乐的初步可视化。

我们利用GLFW这个库来实现OpenGL绘图,相关环境的配置可以参考我们博客前两篇的环境配置:

https://blog.csdn.net/qq_38130710

代码也不多,直接贴出:

void drawLint()
{
    glClearColor (0.8, 0.8, 0.8, 0.8);
    glClear (GL_COLOR_BUFFER_BIT);
    
    glLineWidth(2);//设置线段宽度
    glBegin(GL_LINES);
    glColor3f(1.0,0.0,0.0);
    
    short pcm_In = 0;
    int size = 0;
    float xstart=-1.0;
    float ystart=0.0;
    float xend=0.0;
    float yend=0.0;
    float temp = 0.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)
        {
            //确定绘制波形的折线两点坐标
            xstart=xstart+0.00003;
            ystart=temp;
            xend=xstart+0.00003;
            
            //-------------------------------------------------------------------------------------------------------------------------
            yend=(float)pcm_In/10000;       //short类型除以一个数要么是0要么是大于一的整数,所以坐标变换要注意先转为float
            
            //绘制折线
            glVertex2f(xstart,ystart);
            glVertex2f(xend,yend);
            
            temp=yend;    //终点作为下一次的起点
        }
    }
    
    fclose(fp);
    
    glEnd();
}

运行效果图:Succeed!!!可以看到和我们之前贴出的软件显示的波形图是一样的!

【C++】基于OpenGL的音乐可视化(二):波形的绘制_第1张图片

你可能感兴趣的:(OpenGL)