private void Window_Loaded(object sender, RoutedEventArgs e) { // INIT COMMAND BINDINGS CommandBinding playBinding = new CommandBinding(MediaCommands.Play); CommandBindings.Add(playBinding); playBinding.CanExecute += playCommandBinding_CanExecute; playBinding.Executed += playCommandBinding_Executed; CommandBinding pauseBinding = new CommandBinding(MediaCommands.Pause); CommandBindings.Add(pauseBinding); pauseBinding.CanExecute += pauseCommandBinding_CanExecute; pauseBinding.Executed += pauseCommandBinding_Executed; CommandBinding playToggleBinding = new CommandBinding(Commands.PlayToggle); CommandBindings.Add(playToggleBinding); playToggleBinding.Executed += playToggleBinding_Executed; // Execute the following code after window and controls are fully loaded and initialized // http://stackoverflow.com/a/1746975 Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, (Action)(() => { multiTrackViewer1.ItemsSource = trackList; multiTrackViewer1.Matches.Add(match); multiTrackViewer1.SelectedMatch = match; this.Focus(); })); // the following must be called separately on the dispatcher, else the track controls are not initialized yet Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, (Action)ZoomToMatch); // INIT PLAYER player = new MultitrackPlayer(trackList); player.VolumeAnnounced += (sender2, e2) => Dispatcher.BeginInvoke((Action)(() => { if (e2.MaxSampleValues.Length >= 2) { stereoVUMeter1.AmplitudeLeft = e2.MaxSampleValues[0]; stereoVUMeter1.AmplitudeRight = e2.MaxSampleValues[1]; } })); player.CurrentTimeChanged += (sender2, e2) => multiTrackViewer1.Dispatcher.BeginInvoke((Action)(() => { multiTrackViewer1.VirtualCaretOffset = e2.Value.Ticks; // autoscroll if (multiTrackViewer1.VirtualViewportInterval.To <= multiTrackViewer1.VirtualCaretOffset) { multiTrackViewer1.VirtualViewportOffset = multiTrackViewer1.VirtualCaretOffset; } })); player.PlaybackStateChanged += (sender2, e2) => multiTrackViewer1.Dispatcher.BeginInvoke((Action)CommandManager.InvalidateRequerySuggested); volumeSlider.ValueChanged += (sender2, e2) => player.Volume = (float)e2.NewValue; // INIT PROGRESSBAR progressBar.IsEnabled = false; progressMonitor.ProcessingStarted += Instance_ProcessingStarted; progressMonitor.ProcessingProgressChanged += Instance_ProcessingProgressChanged; progressMonitor.ProcessingFinished += Instance_ProcessingFinished; ProgressMonitor.GlobalInstance.AddChild(progressMonitor); }
private void Window_Loaded(object sender, RoutedEventArgs e) { Title = Title + (Environment.Is64BitProcess ? " (x64)" : " (x86)"); multiTrackViewer1.ItemsSource = trackList; // INIT COMMAND BINDINGS CommandBinding playBinding = new CommandBinding(MediaCommands.Play); CommandBindings.Add(playBinding); playBinding.CanExecute += new CanExecuteRoutedEventHandler(playCommandBinding_CanExecute); playBinding.Executed += new ExecutedRoutedEventHandler(playCommandBinding_Executed); CommandBinding pauseBinding = new CommandBinding(MediaCommands.Pause); CommandBindings.Add(pauseBinding); pauseBinding.CanExecute += new CanExecuteRoutedEventHandler(pauseCommandBinding_CanExecute); pauseBinding.Executed += new ExecutedRoutedEventHandler(pauseCommandBinding_Executed); CommandBinding playToggleBinding = new CommandBinding(Commands.PlayToggle); CommandBindings.Add(playToggleBinding); playToggleBinding.Executed += new ExecutedRoutedEventHandler(playToggleBinding_Executed); //// INIT TRACKLIST STUFF //trackList.PropertyChanged += delegate(object sender2, PropertyChangedEventArgs e2) { // if (e2.PropertyName == "TotalLength") { // multiTrackViewer1.VirtualViewportMaxWidth = trackList.TotalLength.Ticks; // } //}; // INIT PLAYER player = new MultitrackPlayer(trackList); player.VolumeAnnounced += Player_VolumeAnnounced_VolumeMeter; player.CurrentTimeChanged += new EventHandler <ValueEventArgs <TimeSpan> >( delegate(object sender2, ValueEventArgs <TimeSpan> e2) { multiTrackViewer1.Dispatcher.BeginInvoke((Action) delegate { multiTrackViewer1.VirtualCaretOffset = e2.Value.Ticks; // autoscroll if (multiTrackViewer1.VirtualViewportInterval.To <= multiTrackViewer1.VirtualCaretOffset) { multiTrackViewer1.VirtualViewportOffset = multiTrackViewer1.VirtualCaretOffset; } }); }); player.PlaybackStateChanged += new EventHandler( delegate(object sender2, EventArgs e2) { multiTrackViewer1.Dispatcher.BeginInvoke((Action) delegate { // CommandManager must be called on the GUI-thread, else it won't do anything CommandManager.InvalidateRequerySuggested(); }); }); volumeSlider.ValueChanged += new RoutedPropertyChangedEventHandler <double>( delegate(object sender2, RoutedPropertyChangedEventArgs <double> e2) { player.Volume = (float)e2.NewValue; }); // INIT PROGRESSBAR progressBar1.IsEnabled = false; ProgressMonitor.GlobalInstance.ProcessingStarted += new EventHandler( delegate(object sender2, EventArgs e2) { progressBar1.Dispatcher.BeginInvoke((Action) delegate { progressBar1.IsEnabled = true; progressBar1Label.Text = ProgressMonitor.GlobalInstance.StatusMessage; win7TaskBar.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Normal; win7TaskBar.ProgressValue = 0; }); }); ProgressMonitor.GlobalInstance.ProcessingProgressChanged += new EventHandler <ValueEventArgs <float> >( delegate(object sender2, ValueEventArgs <float> e2) { progressBar1.Dispatcher.BeginInvoke((Action) delegate { progressBar1.Value = e2.Value; win7TaskBar.ProgressValue = e2.Value / 100; progressBar1Label.Text = ProgressMonitor.GlobalInstance.StatusMessage; }); }); ProgressMonitor.GlobalInstance.ProcessingFinished += new EventHandler( delegate(object sender2, EventArgs e2) { progressBar1.Dispatcher.BeginInvoke((Action) delegate { progressBar1.Value = 0; progressBar1.IsEnabled = false; progressBar1Label.Text = ""; win7TaskBar.ProgressState = System.Windows.Shell.TaskbarItemProgressState.None; }); }); // INIT RANDOM STUFF multiTrackViewer1.KeyUp += new KeyEventHandler(delegate(object sender2, KeyEventArgs e2) { if (e2.Key == Key.Delete) { // create temporary list to avoid concurrent modification exception var selectedAudioTracks = new List <AudioTrack>(multiTrackViewer1.SelectedItems.Cast <AudioTrack>()); // delete tracks foreach (AudioTrack audioTrack in selectedAudioTracks) { if (audioTrack != null) { // 1. delete all related matches List <Match> deleteList = new List <Match>(); // 1a find all related matches foreach (Match m in multiTrackViewer1.Matches) { if (m.Track1 == audioTrack || m.Track2 == audioTrack) { deleteList.Add(m); } } // 1b delete foreach (Match m in deleteList) { multiTrackViewer1.Matches.Remove(m); } // 2. delete track trackList.Remove(audioTrack); } } e2.Handled = true; } }); // INIT FFT int fftSize = 1024; double correlation = 0; fftAnalyzer = new FFTAnalyzer(fftSize); fftAnalyzerConsumer = 2; correlationConsumer = 1; WindowFunction fftWindow = WindowUtil.GetFunction(WindowType.BlackmanHarris, fftSize); fftAnalyzer.WindowFunction = fftWindow; fftAnalyzer.WindowAnalyzed += FftAnalyzer_WindowAnalyzed_FrequencyGraph; fftAnalyzer.WindowAnalyzed += FftAnalyzer_WindowAnalyzed_Spectrogram; player.SamplesMonitored += new EventHandler <StreamDataMonitorEventArgs>(delegate(object sender2, StreamDataMonitorEventArgs e2) { if (fftAnalyzerConsumer > 0 || correlationConsumer > 0) { float[][] uninterleaved = AudioUtil.Uninterleave(e2.Properties, e2.Buffer, e2.Offset, e2.Length, true); if (fftAnalyzerConsumer > 0) { fftAnalyzer.PutSamples(uninterleaved[0]); // put the summed up mono samples into the analyzer } if (correlationConsumer > 0) { correlation = CrossCorrelation.Correlate(uninterleaved[1], uninterleaved[2]); Dispatcher.BeginInvoke((Action) delegate { correlationMeter.Value = correlation; }); } } }); spectrogram.SpectrogramSize = fftSize / 2; }
/// <summary> /// Initializes a new instance of the DropInfo class. /// </summary> /// /// <param name="sender"> /// The sender of the drag event. /// </param> /// /// <param name="e"> /// The drag event. /// </param> /// /// <param name="dragInfo"> /// Information about the source of the drag, if the drag came from within the framework. /// </param> public DropInfo(object sender, DragEventArgs e, MultitrackPlayer.Utils.DragDrop.DragInfo dragInfo) { string dataFormat = MultitrackPlayer.Utils.DragDrop.DragDrop.DataFormat.Name; Data = (e.Data.GetDataPresent(dataFormat)) ? e.Data.GetData(dataFormat) : e.Data; DragInfo = dragInfo; VisualTarget = sender as UIElement; DropPosition = e.GetPosition(VisualTarget); if (sender is ItemsControl) { ItemsControl itemsControl = (ItemsControl)sender; UIElement item = itemsControl.GetItemContainerAt(DropPosition); bool directlyOverItem = item != null; TargetGroup = FindGroup(itemsControl, DropPosition); VisualTargetOrientation = itemsControl.GetItemsPanelOrientation(); if (item == null) { item = itemsControl.GetItemContainerAt(DropPosition, VisualTargetOrientation); directlyOverItem = false; } if (item != null) { ItemsControl itemParent = ItemsControl.ItemsControlFromItemContainer(item); InsertIndex = itemParent.ItemContainerGenerator.IndexFromContainer(item); TargetCollection = itemParent.ItemsSource ?? itemParent.Items; if (directlyOverItem) { TargetItem = itemParent.ItemContainerGenerator.ItemFromContainer(item); VisualTargetItem = item; } if (VisualTargetOrientation == Orientation.Vertical) { if (e.GetPosition(item).Y > item.RenderSize.Height / 2) InsertIndex++; } else { if (e.GetPosition(item).X > item.RenderSize.Width / 2) InsertIndex++; } } else { TargetCollection = itemsControl.ItemsSource ?? itemsControl.Items; InsertIndex = itemsControl.Items.Count; } } }