在ScrollViewer窗口中移动波形

时间:2013-07-29 20:47:21

标签: wpf window clock scrollviewer naudio

我在滚动查看器内的画布上绘制了一个波形(音频文件的左声道)。我希望画布(以波形作为其内容)“移动”滚动查看器的可见窗口。这样做的目的是能够观察波形在屏幕上的移动,即使绘制的音频文件可能有几分钟的长度,也只能看到指定时间的窗口(可能是一个小小的剪辑)。我希望它绑定到一个时钟,这样当时钟开始时,波形开始移动(或者,滚动查看器的水平偏移前进)。我用Naudio绘制波形,使用C#& amp; WPF。绘制的波形是每100毫秒采样的文件中所有字节的图形。如何保持时钟和视窗同步?任何帮助或地方开始将不胜感激,因为这是我的第一个项目与此类事情。 感谢。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,那么您可以根据时间以编程方式滚动Canvas的内容。下面我将展示一个示例算法。

您可以这样以编程方式滚动:

scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + 5); // Horizontal scroll through 5 units

使用计时器可能如下所示:

int InitInterval = Interval; // init interval
System.Timers.Timer myTimer = new System.Timers.Timer();

myTimer.Elapsed += new ElapsedEventHandler(ScrollCanvas);

// set the interval
if (InitInterval > 0)
{
    myTimer.Interval = InitInterval;
}

// turn on timer
myTimer.Enabled = true;

ScrollCanvas():

的列表
private void ScrollCanvas(object source, ElapsedEventArgs e)
{
    // some code
    // ...

    // implementing scrolling
    Dispatcher.BeginInvoke(new ThreadStart(delegate
    {
        scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + 5); 
    }));
}