Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
                });
            });
        }
Beispiel #3
0
        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();
            }
        }