65.9K
CodeProject 正在变化。 阅读更多。
Home

VB.NET Wav 文件图形查看器控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.64/5 (10投票s)

2005年3月22日

3分钟阅读

viewsIcon

117010

downloadIcon

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 文件的后续版本中会更有用。

随本文提供的项目文件包括控件代码和测试应用程序。 对于你们大多数人来说,应该可以理解代码的工作原理,但这里有一个小指南

  1. 当第一次插入到宿主应用程序中时,控件被设置为默认值。
  2. 背景和线条的格式是通过使用 RenderWave 子例程确定的。
  3. Main_Paint 子例程获取信息并显示线条。 对任何属性的更改都会导致再次调用 Renderwave,进而调用 Main_Paint
  4. 文件名从宿主应用程序通过 <name>.WaveFile= 传递给控件。
  5. 这被传递给 WaveFile 类,在该类中文件头被剥离并检查,确保该文件是有效的 wav 文件。
  6. 该类设置一个数据缓冲区,返回到主控件代码。
  7. 再次调用 RenderWave
  8. 如果启用了线程支持,则通过线程调用调用函数 WaveInfo,否则将其作为普通函数调用。 任何一种方法都会触发 RenderStart 事件。
  9. WaveInfo 开始以等于缓冲区长度(0.1 秒)的块从 wav 文件读取数据。
  10. 每个块绘制的样本数取决于缩放因子。
  11. 如果使用线程,RenderWave 将完成。 回调函数将导致 Main_Paint 在收集到数据后进行更新。 否则,Renderwave 将在 WaveInfo 函数完成后继续,进而调用 Main_Paint
  12. 更改缩放或移动滚动条将再次启动这些功能。

该项目虽然本身很有用,但对于希望了解更多关于以下内容的人来说也可能很有用

  • GDI+
  • GraphicsPath
  • Marshal.Copy
  • Wave 标头和流
  • 控件属性和 "Visual Studio 属性" 描述和类别选项。
  • 非托管代码
  • 结构体

如果您有任何问题或改进建议,请与我联系。

本文的更新
  • 更正拼写错误。
  • 在指南中插入了一个新点 "10"。
© . All rights reserved.