void ApplyScale(double[] newScale) { var newF0 = new double[AnalyzedAudio.AnalyzedAudio.FrameLength]; Buffer.BlockCopy(AnalyzedAudio.AnalyzedAudio.F0, 0, newF0, 0, newF0.Length * sizeof(double)); for (var i = Math.Min(newScale.Length, newF0.Length) - 1; i > -1; i--) { if (newF0[i] <= 0.0 || newScale[i] <= 0.0) { continue; } newF0[i] = newScale[i]; } MainView.EditableAudioScale = new AudioScaleModel(newF0, AnalyzedAudio.AnalyzedAudio.FramePeriod, AnalyzedAudio.SampleCount, AnalyzedAudio.SampleRate); PreviewStream.Dispose(); var edited = AnalyzedAudio.AnalyzedAudio.ReplaceF0(newF0); PreviewStream = new WaveCacheStream(AudioOperatorPlugins.Find(p => p.GetType() == AnalyzedAudio.OperatorType).Synthesize(edited)); Player.SetStream(PreviewStream); }
async void ExportWave(string filePath, WaveBit bit, double[] newF0) { Player?.Stop(); await Task.Run(() => { var edited = AnalyzedAudio.AnalyzedAudio.ReplaceF0(newF0); var synthesizedAudio = AudioOperatorPlugins.Find(p => p.GetType() == AnalyzedAudio.OperatorType).Synthesize(edited, (p) => { Dispatcher.Invoke(() => { MainView.Progress = p; }); }); var waveFile = new Wavefile(synthesizedAudio.SampleRate, bit, synthesizedAudio.Wave); waveFile.Write(filePath); Dispatcher.Invoke(() => { Lock = false; }); }); }
void LoadPlugin() { try { using (var catalog = new DirectoryCatalog(PluginDirectory)) using (var container = new CompositionContainer(catalog)) { container.ComposeParts(this); } } catch (Exception e) { MessageBox.ShowWarning(LangResources.Error_RaisePluginLoadError, exception: e); } if ((AudioOperatorPlugins?.Count ?? 0) < 1) { MessageBox.ShowError(LangResources.Fatal_CannotLoadAudioOperator, LangResources.MessageBoxTitle_CannotLoadAudioOperator); Close(); } else { AudioOperatorPlugins.Sort((a, b) => a.PluginName.CompareTo(b.PluginName)); foreach (var op in AudioOperatorPlugins) { var item = new MenuItem(); item.Header = op.PluginName; item.IsCheckable = true; item.IsChecked = ApplicationSettings.Setting.PitchOperation.UseOperatorName == op.GetType().FullName; item.Command = UseOperatorCommand; item.CommandParameter = op; item.CommandTarget = this; UseOperatorMenu.Items.Add(item); } if (string.IsNullOrEmpty(ApplicationSettings.Setting.PitchOperation.UseOperatorName) || !UseOperatorMenu.Items.Cast <MenuItem>().Any((i) => i.IsChecked)) { ApplicationSettings.Setting.PitchOperation.UseOperatorName = AudioOperatorPlugins[0].GetType().FullName; ((MenuItem)UseOperatorMenu.Items[0]).IsChecked = true; } MainView.PluginName = SelectedOperator.PluginName; } if ((ScaleLoaderPlugins?.Count ?? 0) < 1) { MessageBox.ShowWarning(LangResources.Error_CannotLoadScaleLoader, LangResources.MessageBoxTitle_CannotLoadScaleLoader); ScaleLoaderPlugins = new List <IScaleLoader>(); } else { ScaleLoaderPlugins.Sort((a, b) => b.PluginName.CompareTo(a.PluginName)); foreach (var loader in ScaleLoaderPlugins) { var item = new MenuItem(); item.Header = loader.PluginName + "..."; item.Command = LoadScaleCommand; item.CommandParameter = loader; item.CommandTarget = this; LoadScaleMenu.Items.Insert(0, item); } ScaleLoaderPlugins.Reverse(); } }