【发布时间】:2013-06-29 08:27:17
【问题描述】:
我是处理 wav 文件和 C# 的新手。我的目标是在 wavfile 的波形中绘制实时数据。我的意思是在录制声音(wav)文件时,我想同时绘制它的图表。我搜索了一些声音库和决定使用 NAudio。(不知道它对我来说是最好的选择。我愿意接受有关选择音频库的任何建议)。但是我不知道使用声音绘制实时数据。有些人建议使用 GDI,但正如我所说,我是新手,我认为有效使用 GDI 需要花费太多时间。如果我必须学习 GDI,请分享任何可以帮助像我这样的初学者的文章。其实我看起来不知道我应该从哪里开始。需要指导 :)) 我有一个问题。
NAudio 的教程之一,他使用字节数组在 Chart 中绘制波形。如果你知道 wav 文件的大小就可以了。但是它的工作速度太慢,并且对于更大的 wav 文件会出现内存不足异常10mb。下面的代码是指我的意思。
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Wave File (*.wav)|*.wav;";
if (open.ShowDialog() != DialogResult.OK) return;
chart1.Series.Add("wave");
chart1.Series["wave"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine;
chart1.Series["wave"].ChartArea = "ChartArea1";
NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName));
byte[] buffer = new byte[426565];
int read;
while (wave.Position < wave.Length)
{
read = wave.Read(buffer, 0, 426565);
for (int i = 0; i < read / 4; i++)
{
chart1.Series["wave"].Points.Add(BitConverter.ToSingle(buffer, i * 4));
}
}
有没有办法更快地执行这个操作?
【问题讨论】:
-
作为 Gigasoft 的创始人,请参阅我们的 DirectX /Direct3D Charting wav data demo, example 123 该演示展示了 WinForms、WPF 和 C++/MFC 纯本机中的 exe。通过垂直线注释实时更新播放位置,显示 12M 点在播放和拖动视口等时不断更新,没有延迟。还显示了一个简单的自定义 x 轴分钟:秒。可通过鼠标和鼠标滚轮进行缩放。显示当前缩放区域的缩放框以及通道的完整波形。它的图表类似于 Adobe Audition 或 Nero 波形编辑器,只需几行代码。
标签: c# naudio waveform real-time-data