GDI+Visual Studio .NET 2003.NET 1.1Windows 2000Windows XPWindows FormsIntermediateDevVisual StudioWindows.NETVisual Basic
VB.NET Wav 文件图形查看器控件






4.64/5 (10投票s)
2005年3月22日
3分钟阅读

117010

4000
一个用于生成任何 16 位 PCM Wav 文件图形显示的控件。
引言
首先,我想承认,这个控件的一些方法来自 Steve McMahon 的 (http://www.vbaccelerator.com/) VB6 版本,所以,所有的功劳都归功于他。 我所做的贡献是更新代码以在 VB.NET 2003 中使用并引入一些附加元素。 我还应该提到,控件中使用的 WaveFile
类是 The KPD-Team 编写的类的扩展。
该控件的操作是提供 16 位 PCM wav 文件两个通道的可视化表示,具有可变的缩放比例。 (未来的版本有望支持其他位大小。)完整的功能列表如下
- 显示双通道 16 位 wav 文件数据。
- 提供采样频率数据。
- 提供每样本位数信息。
- 提供通道数(见 #)。
- 缩放控制范围从 24:1 到 1:16384。
- 完全控制图形中使用的颜色。
- 完全控制图形中使用的线条形式。
- 能够在辅助线程中运行 wav 文件数据收集功能,适用于慢速计算机。
- 为宿主应用程序提供所有主要操作的事件。
# 由于此版本的限制,它将始终产生 2 的结果,并且在支持单声道 wav 文件的后续版本中会更有用。
随本文提供的项目文件包括控件代码和测试应用程序。 对于你们大多数人来说,应该可以理解代码的工作原理,但这里有一个小指南
- 当第一次插入到宿主应用程序中时,控件被设置为默认值。
- 背景和线条的格式是通过使用
RenderWave
子例程确定的。 Main_Paint
子例程获取信息并显示线条。 对任何属性的更改都会导致再次调用Renderwave
,进而调用Main_Paint
。- 文件名从宿主应用程序通过
<name>.WaveFile=
传递给控件。 - 这被传递给
WaveFile
类,在该类中文件头被剥离并检查,确保该文件是有效的 wav 文件。 - 该类设置一个数据缓冲区,返回到主控件代码。
- 再次调用
RenderWave
。 - 如果启用了线程支持,则通过线程调用调用函数
WaveInfo
,否则将其作为普通函数调用。 任何一种方法都会触发RenderStart
事件。 WaveInfo
开始以等于缓冲区长度(0.1 秒)的块从 wav 文件读取数据。- 每个块绘制的样本数取决于缩放因子。
- 如果使用线程,
RenderWave
将完成。 回调函数将导致Main_Paint
在收集到数据后进行更新。 否则,Renderwave
将在WaveInfo
函数完成后继续,进而调用Main_Paint
。 - 更改缩放或移动滚动条将再次启动这些功能。
该项目虽然本身很有用,但对于希望了解更多关于以下内容的人来说也可能很有用
- GDI+
GraphicsPath
Marshal.Copy
- Wave 标头和流
- 控件属性和 "Visual Studio 属性" 描述和类别选项。
- 非托管代码
- 结构体
如果您有任何问题或改进建议,请与我联系。
本文的更新
- 更正拼写错误。
- 在指南中插入了一个新点 "10"。