2

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

4

1 回答 1

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); 
    }));
}
于 2013-07-30T06:39:28.317 回答