Перемещение волновой формы через окно ScrollViewer
Я нанес график (левый канал аудиофайла) на холст внутри средства просмотра с прокруткой. Мне бы хотелось, чтобы холст (с осциллограммой в качестве его содержимого) "перемещался" через видимое окно прокрутки. Смысл этого в том, чтобы иметь возможность наблюдать движение волны по экрану, и, даже несмотря на то, что отображаемый звуковой файл может длиться несколько минут, видимо только окно указанного времени (возможно, минутный клип). Я хотел бы, чтобы он был привязан к часам, чтобы при запуске часов волновая форма начала двигаться (или, наоборот, сдвиг горизонтального смещения зрителя прокрутки). Я использовал Naudio для построения графика, используя C# и WPF. Построенная форма волны - это график всех байтов в файле, выбранных каждые 100 миллисекунд. Как синхронизировать часы и окно просмотра? Буду признателен за любую помощь или место для начала, так как это мой первый проект, работающий с подобными вещами. Благодарю.
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);
}));
}