Перемещение волновой формы через окно 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); 
    }));
}
Другие вопросы по тегам