示例#1
0
 protected AudioItem(string name, int id, AudioItemManager itemManager, Magicolo.AudioTools.Player player)
 {
     this.Name        = name;
     this.Id          = id;
     this.Volume      = 1;
     this.Pitch       = 1;
     this.State       = AudioStates.Waiting;
     this.itemManager = itemManager;
     this.player      = player;
 }
示例#2
0
 protected AudioItem(string name, int id, float volume, float pitch, AudioStates state, AudioItemManager itemManager, Magicolo.AudioTools.Player player)
 {
     this.Name        = name;
     this.Id          = id;
     this.Volume      = volume;
     this.Pitch       = pitch;
     this.State       = state;
     this.itemManager = itemManager;
     this.player      = player;
 }
示例#3
0
        private void ExportMP3File(object sender, RoutedEventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            var            audioItem      = AudioItemManager.GetAudioItem();

            if (audioItem != null)
            {
                saveFileDialog.FileName   = System.IO.Path.GetFileName(audioItem.FilePath) + "processed"; // Default file name
                saveFileDialog.DefaultExt = ".mp3";
                saveFileDialog.Filter     = "MP3 files (.mp3)|*.mp3";

                if (saveFileDialog.ShowDialog() == true)
                {
                    string filename = saveFileDialog.FileName;

                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.Append(filename.Remove(filename.Length - 4, 4));
                    stringBuilder.Append(".wav");

                    filename = stringBuilder.ToString();

                    stringBuilder.Clear();

                    using (WaveFileWriter writer = new WaveFileWriter(filename, AudioItemManager.GetAudioItem().WaveFormat))
                    {
                        if (AudioItemManager.GetAudioItem() != null)
                        {
                            writer.WriteSamples(AudioItemManager.GetAudioItem().AudioBuffer, 0, AudioItemManager.GetAudioItem().AudioBuffer.Length / 2);
                            writer.Dispose();
                            writer.Close();

                            filename = ConvertWAVToMp3File(filename, stringBuilder);

                            DeleteWAVFileAfterConversion(filename, stringBuilder);
                        }
                        else
                        {
                            MainWindowLogAction("Cannot export not changed file! " + filename);
                        }
                    }
                    if (MainWindowLogAction != null)
                    {
                        MainWindowLogAction("Exported edited audio file, filePath: " + filename);
                    }
                }
            }
            else
            {
                if (MainWindowLogAction != null)
                {
                    MainWindowLogAction("Cannot export empty file!");
                }
            }
        }
示例#4
0
        public void Initialize(DynamicGetter getNextSettings, AudioItemManager itemManager, AudioSpatializer spatializer, IAudioItem parent)
        {
            settings = TypePoolManager.Create <AudioDynamicSettings>();

            base.Initialize(settings.Identifier, itemManager, spatializer, parent);

            this.getNextSettings = getNextSettings ?? delegate { return(null); };

            InitializeModifiers(settings);
            InitializeSources();
        }
        private void ReverbEffectWorkHandler(object sender, DoWorkEventArgs e)
        {
            List <object> passedParams = e.Argument as List <object>;
            int           delay        = (int)passedParams[0];
            double        decay        = (double)passedParams[1];

            audioItem = AudioItemManager.GetAudioItem();

            if (audioItem != null)
            {
                SetMaxProgressBar();

                float[] samplesToProcess;
                long    beginIndex, endIndex;
                int     seconds, miliseconds, minutes;
                int     fullTime = 0;
                SetDataForProcessing(out samplesToProcess, out minutes, out beginIndex, out endIndex, out seconds, out miliseconds);

                AudioReverbEffect.ReverbEffectInit((short)delay, (float)decay);

                int begIndex = (int)beginIndex;
                int enIndex  = (int)endIndex;

                AudioReverbEffect.AddReverbEffect(ref samplesToProcess, begIndex, enIndex, ref fullTime);

                this.disp.Invoke(DispatcherPriority.Normal, new Action(delegate()
                {
                    MainWindow.progressBar.Value = 100; // Do all the ui thread updates here
                }));

                audioItem.ProcessedAudioBuffer = samplesToProcess;

                AudioItemManager.SetAudioItem(audioItem);

                ResetProgressBar();

                var milisecondsTime = (double)fullTime / 1000;

                e.Result = "Selection : " + minutes + ":" + AudioItemManager.Instance.GetBeginSpan().Seconds.ToString() + ":" + AudioItemManager.Instance.GetBeginSpan().Milliseconds.ToString() + " - " + AudioItemManager.Instance.GetEndSpan().Minutes.ToString() + ":" + AudioItemManager.Instance.GetEndSpan().Seconds.ToString() + ":" + AudioItemManager.Instance.GetEndSpan().Milliseconds.ToString() +
                           "  " + " -> Processed Reverb effect on audio sample!" + "\nProcessing range length: " + (endIndex - beginIndex).ToString() +
                           "\n" + dllType.ToString() + " library time elapsed: " + milisecondsTime.ToString() + " msec" + "\nThreads count: " + threadsValue.ToString();
            }
            else
            {
                e.Result = "Audio not loaded!";
            }
        }
示例#6
0
        private void ExportWAVFile(object sender, RoutedEventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            var            audioItem      = AudioItemManager.GetAudioItem();

            if (audioItem != null)
            {
                saveFileDialog.FileName   = System.IO.Path.GetFileName(audioItem.FilePath) + "processed"; // Default file name
                saveFileDialog.DefaultExt = ".wav";
                saveFileDialog.Filter     = "Wav files (.wav)|*.wav";

                if (saveFileDialog.ShowDialog() == true)
                {
                    string filename = saveFileDialog.FileName;
                    using (WaveFileWriter writer = new WaveFileWriter(filename, AudioItemManager.GetAudioItem().WaveFormat))
                    {
                        if (AudioItemManager.GetAudioItem() != null)
                        {
                            writer.WriteSamples(AudioItemManager.GetAudioItem().AudioBuffer, 0, AudioItemManager.GetAudioItem().AudioBuffer.Length / 2);
                            writer.Dispose();
                            writer.Close();
                        }
                        else
                        {
                            MainWindowLogAction("Cannot export not changed file! " + filename);
                        }

                        writer.Dispose();
                        writer.Close();
                    }
                    if (MainWindowLogAction != null)
                    {
                        MainWindowLogAction("Exported edited audio file, filePath: " + filename);
                    }
                }
            }
            else
            {
                if (MainWindowLogAction != null)
                {
                    MainWindowLogAction("Cannot export empty file!");
                }
            }
        }
        private void FlangerEffectWorkHandler(object sender, DoWorkEventArgs e)
        {
            List <object> passedParams = e.Argument as List <object>;
            int           effectRate   = (int)passedParams[0];
            int           maxD         = (int)passedParams[1];
            int           minD         = (int)passedParams[2];
            double        fwv          = (double)passedParams[3];
            double        step         = (double)passedParams[4];
            double        fbv          = (double)passedParams[5];

            audioItem = AudioItemManager.GetAudioItem();

            if (audioItem != null)
            {
                SetMaxProgressBar();
                float[] samplesToProcess;
                long    beginIndex, endIndex;
                int     seconds, miliseconds, minutes;
                int     elapsedTime = 0;
                int     fullTime    = 0;
                SetDataForProcessing(out samplesToProcess, out minutes, out beginIndex, out endIndex, out seconds, out miliseconds);

                AudioFlangerEffect.FlangerInit((short)effectRate, 16000, (short)maxD, (short)minD, fwv, step, fbv);

                if (threadsValue > 1)
                {
                    samplesCountForThreads = (int)((endIndex - beginIndex) / threadsValue);
                    samplesThreadToProcess = new int[threadsValue];

                    for (int i = 0; i < threadsValue; i++)
                    {
                        samplesThreadToProcess[i] = (int)beginIndex + (samplesCountForThreads * i);
                    }
                    samplesThreadToProcess[threadsValue - 1] = (int)endIndex - 1;

                    for (int x = 0; x < threadsValue - 1; x++)
                    {
                        int startIndex, stopIndex;
                        startIndex = samplesThreadToProcess[x];
                        stopIndex  = samplesThreadToProcess[x + 1];


                        threads.Add(new Thread(() =>
                        {
                            for (int i = startIndex; i < stopIndex + 1; i++)
                            {
                                samplesToProcess[i] = AudioFlangerEffect.FlangerProcess(samplesToProcess[i], ref elapsedTime);
                                AudioFlangerEffect.FlangerSweep();
                                fullTime += elapsedTime;
                            }
                        }));
                    }

                    for (int i = 0; i < threadsValue - 1; i++)
                    {
                        threads[i].Start();
                        threads[i].Join();
                        var first = i;
                        var range = threadsValue - 1;
                        var z     = (double)first / range;
                        worker.ReportProgress((int)(z * 100));
                    }
                }
                else
                {
                    for (long i = beginIndex; i < endIndex; ++i)
                    {
                        samplesToProcess[i] = AudioFlangerEffect.FlangerProcess(samplesToProcess[i], ref elapsedTime);
                        AudioFlangerEffect.FlangerSweep();
                        if (i % 8000 == 0 && i != 0)
                        {
                            var first = i - beginIndex;
                            var range = endIndex - beginIndex;
                            var x     = (double)first / range;
                            worker.ReportProgress((int)(x * 100));
                            System.Threading.Thread.Sleep(50);
                        }
                        fullTime += elapsedTime;
                    }
                }

                ResetProgressBar();

                audioItem.ProcessedAudioBuffer = samplesToProcess;

                AudioItemManager.SetAudioItem(audioItem);

                var milisecondsTime = (double)fullTime / 1000;

                e.Result = "Selection : " + minutes + ":" + seconds + ":" + miliseconds + " - " + AudioItemManager.Instance.GetEndSpan().Minutes.ToString() + ":" + AudioItemManager.Instance.GetEndSpan().Seconds.ToString() + ":" + AudioItemManager.Instance.GetEndSpan().Milliseconds.ToString()
                           + "  " + " -> Processed Flanger effect on audio sample!" + "\nProcessing range length: " + (endIndex - beginIndex).ToString() +
                           "\n" + dllType.ToString() + " library time elapsed: " + milisecondsTime.ToString() + " msec" + "\nThreads count: " + threadsValue.ToString();
            }
            else
            {
                e.Result = "Audio not loaded!";
            }
        }
示例#8
0
 public AudioManager()
 {
     itemManager  = new AudioItemManager(this);
     switchValues = new Dictionary <string, AudioValue <int> >();
 }