语音特征参数分析平台(八) 波形显示控件

六、波形显示控件CWaveDisplay

语音分析平台中非常重要的一点就是直观的显示语音数据的各种参数。

  1 //////////////////////////////////////////////////////////////////////////
  2 // class CWaveDisplay
  3 //
  4 // 功能:    实现数据的在GUI上的显示
  5 // 创建人:    陈文凯 (chwkai@gmail.com)
  6 // 创建日期:2005年5月19日
  7 // 修改人:
  8 // 修改日期:
  9 // 版本
 10 
 11 #include "afxwin.h"
 12 
 13 //////////////////////////////////////////////////////////////////////////
 14 // 定义缓冲区数据结构
 15 typedef struct _displayChunk
 16 {
 17     double* lpData;                    // 数据内容
 18     unsigned int nSize;            // 数据长度
 19     unsigned int nDataReaded;        // 已经输出的数据长度
 20     _displayChunk* lpNext;            // 指向下一个缓冲快
 21 
 22 } DisplayChunk, *PDisplayChunk;
 23 
 24 //////////////////////////////////////////////////////////////////////////
 25 // 音频数据显示
 26 class CWaveDisplay:
 27     public CWnd
 28 {
 29 public:
 30     CWaveDisplay(HWND hOwner);
 31     ~CWaveDisplay(void);
 32 
 33 public:
 34 
 35     // 释放所占用资源
 36     void Dispose();
 37 
 38     // 设定显示数据
 39     void LoadData(
 40         double* pData,            /*数据内容*/
 41         unsigned int nSize        /*数据长度*/
 42         );
 43 
 44     // 设定波形颜色, 默认为明绿
 45     void SetLineColor(
 46         int nRed = 0
 47         int nGreen = 255
 48         int nBlack = 0
 49         );
 50 
 51     // 设定网格颜色,默认为暗绿
 52     void SetGridColor(
 53         int nRed = 0,
 54         int nGreen = 128,
 55         int nBlack = 64
 56         );
 57 
 58     // 设定背景颜色,默认为黑色
 59     void SetBkColor(
 60         int nRed = 0
 61         int nGreen = 0
 62         int nBlack = 0
 63         );
 64 
 65     // 设定坐标轴颜色,默认为黄色
 66     void SetCoordinateColor(
 67         int nRed = 255
 68         int nGreen = 255
 69         int nBlack = 0
 70         );
 71 
 72     void SetXMetrics(float fValue = 1);                        // 设定X轴逻辑单元参数值
 73     void SetYMetrics(float fValue = 1);                        // 设定Y轴逻辑单元参数值
 74     void SetZoomStep(UINT nStep = 2);                        // 用鼠标中键滚动,进行显示微调时的放大倍数
 75 
 76     UINT GetZoomSetp() const;                                // 获取微调放大倍数
 77     UINT GetPrecision() const;                                // 获取显示精度
 78     float GetXMetrics() const;                                // 获取X轴逻辑单元参数值
 79     float GetYMetrics() const;                                // 获取Y轴逻辑单元参数值
 80 
 81     void SetCellSize(UINT nSize = 10);                    // 设定显示单元格的宽(高)度,以象素为单位
 82     void SetGridWidth(UINT nWidth = 1);                    // 设定网格线宽度
 83     void SetCoordinateWidth(UINT nWidth = 1);            // 设定坐标线条宽度
 84     void SetLineWidth(UINT nWidth = 1);                    // 设定波形线条宽度
 85 
 86 private:
 87     void DrawTable(CPaintDC* pDc);                // 绘制显示表格
 88     void DrawData(CPaintDC* pDc);                // 绘制波形
 89     //void AppendBuffer(PDisplayChunk pChunk);    // 加入新的显示缓冲块,维护缓冲块链表
 90     void InitDefaultSetting();                    // 调用默认设置函数初始化显示区域
 91 
 92 private:    
 93     PDisplayChunk m_pBuffer;    // 缓冲区头指针
 94     UINT m_nTimer;                // 定时执行信息绘制的时钟
 95     UINT m_nSamplesPerElapse;    // 每个时间间隔内描绘的数据数量
 96     HWND m_hOwner;                // 显示控件所在的父控件句柄
 97 
 98     UINT m_nCellSize;            // 显示单元格高(宽)度,以象素为单位
 99     UINT m_nCoordinateWidth;    // 设定坐标线条宽度
100     UINT m_nLineWidth;            // 设定波形线条宽度
101     UINT m_nGridWidth;            // 设定网格线条宽度
102     float m_fXMetrics;            // X轴逻辑单元宽度
103     float m_fYMetrics;            // Y轴逻辑单元宽度
104     UINT m_nZoomStep;            // 显示微调倍数
105 
106     CPoint m_ptOrigin;            // 显示区域坐标原点位置
107     CPoint m_ptCurPos;            // 记录当前描点所在位置
108     CRect m_clientRect;            // 记录显示区域范围
109 
110     COLORREF m_refLineColor;        // 波形颜色,默认为明绿色(0,255,0)
111     COLORREF m_refGridColor;        // 网格颜色,默认为暗绿色(0,128,64)
112     COLORREF m_refBkColor;            // 背景色,没人为黑色(0,0,0)
113     COLORREF m_refCoordinateColor;    // 坐标轴颜色,默认为黄色(255,255,0)
114 
115 public:
116     DECLARE_MESSAGE_MAP()
117     afx_msg void OnPaint();
118 private:
119     // 显示精度
120     UINT m_nPrecision;
121 public:
122     void SetPrecision(UINT nPrecision = 1);
123     afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
124 };
125 
posted @ 2005-08-01 22:09  海南K.K  阅读(1529)  评论(1)    收藏  举报