语音特征参数分析平台(八) 波形显示控件
六、波形显示控件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
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
All the posts in this blog are provided "AS IS" with no warranties, and confer no rights. Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 2.5 China Mainland License.
浙公网安备 33010602011771号