Beispiel #1
0
        private void BtnReproducir_Click(object sender, RoutedEventArgs e)
        {
            if (output != null && output.PlaybackState == PlaybackState.Paused)
            {
                // Retomo reproducción
                output.Play();
            }
            else
            {
                if (txtRutaArchivo.Text != null && txtRutaArchivo.Text != string.Empty)
                {
                    reader                  = new AudioFileReader(txtRutaArchivo.Text);
                    volume                  = new VolumeSampleProvider(reader);
                    volume.Volume           = (float)(sldVolumen.Value);
                    output                  = new WaveOut();
                    output.DeviceNumber     = cbDispositivoSalida.SelectedIndex;
                    output.PlaybackStopped += Output_PlaybackStopped;
                    output.Init(volume);
                    output.Play();

                    // Cambiar el volumen del output
                    // output.Volume = (float)(sldVolumen.Value);

                    btnReproducir.IsEnabled = false;
                    btnPausa.IsEnabled      = true;
                    btnDetener.IsEnabled    = true;

                    lblTiempoTotal.Text = reader.TotalTime.ToString().Substring(0, 8);
                    sldTiempo.Maximum   = reader.TotalTime.TotalSeconds;

                    timer.Start();
                }
            }
        }
Beispiel #2
0
        protected override void OnSoundLoop(PollySoundQueueItem nextItem)
        {
            using var mp3Reader = new Mp3FileReader(nextItem.Data);

            // Adjust the volume of the MP3 data
            var sampleProvider       = mp3Reader.ToSampleProvider();
            var volumeSampleProvider = new VolumeSampleProvider(sampleProvider)
            {
                Volume = nextItem.Volume
            };

            // Play the sound
            this.waveOut = new WaveOut();
            this.waveOut.PlaybackStopped += (_, _) =>
            {
                this.speechCompleted.Set();
            };
            this.waveOut.Init(volumeSampleProvider);
            this.waveOut.Play();
            this.speechCompleted.WaitOne();

            // Cleanup
            this.waveOut.Dispose();
            this.waveOut = null;
        }
Beispiel #3
0
        //INITIALIZATION
        #region "initialization"
        private void InitializeMicrophone(ref WaveIn wi, int deviceID, int iBufMS, int volume)
        {
            //Gets rid of previous instance if there is one
            if (wi != null)
            {
                wi.Dispose();
            }
            wi = new WaveIn();

            wi.DeviceNumber       = deviceID;       //0 is default input device always
            wi.NumberOfBuffers    = 4;
            wi.BufferMilliseconds = iBufMS;

            wi.WaveFormat     = audioFormat;
            wi.DataAvailable += WiMicrophone_DataAvailable;

            if (bwpMicrophone != null && bwpMicrophone.BufferLength > 0)
            {
                bwpMicrophone.ClearBuffer();                                                                      //Just in case i f**k up later. edit 03-09-2016 i have no idea why i wrote that lol
            }
            bwpMicrophone = new BufferedWaveProvider(audioFormat);
            bwpMicrophone.DiscardOnBufferOverflow = true;
            vspMicrophone = new VolumeSampleProvider(bwpMicrophone.ToSampleProvider()); //Allows us to control the volume

            vspMicrophone.Volume = IntToFloat(volume);

            mspStandard.AddMixerInput(vspMicrophone);
            wi.StartRecording();
        }
Beispiel #4
0
        private IWavePlayer InitPlayerForSound(Sound sound)
        {
            // Wrap the stream into a volume sample provider to have a volume per sound
            var volumeSampleProvider = new VolumeSampleProvider(sound.ReaderStream.ToSampleProvider())
            {
                Volume = sound.VolumeP * GLOBAL_VOLUME
            };

            // Init the sound out
            var soundOut = new WaveOut();

            soundOut.Init(volumeSampleProvider);

            // Handle restart if repeating
            void WaveOutOnPlaybackStopped(object o, StoppedEventArgs stoppedEventArgs)
            {
                if (!sound.RepeatP)
                {
                    return;
                }
                sound.ReaderStream.CurrentTime = TimeSpan.FromSeconds(sound.RepeatSeekP);
                soundOut.Play();
            }

            soundOut.PlaybackStopped += WaveOutOnPlaybackStopped;

            return(soundOut);
        }
Beispiel #5
0
        public ReceiverSampleProvider(WaveFormat waveFormat, ushort id, int voiceInputNumber)
        {
            WaveFormat = waveFormat;
            ID         = id;

            mixer = new MixingSampleProvider(WaveFormat)
            {
                ReadFully = true
            };

            voiceInputs = new List <CallsignSampleProvider>();
            for (int i = 0; i < voiceInputNumber; i++)
            {
                var voiceInput = new CallsignSampleProvider(WaveFormat, this);
                voiceInputs.Add(voiceInput);
                mixer.AddMixerInput(voiceInput);
            }
            ;

            blockTone = new BlockingToneSampleProvider(WaveFormat.SampleRate, 1)
            {
                Gain = 0, Frequency = 180
            };
            mixer.AddMixerInput(blockTone.ToMono());
            volume = new VolumeSampleProvider(mixer);
        }
Beispiel #6
0
        public void Init(int sampleRate)
        {
            try
            {
                DeInit();

                WaveFormat audioFormat = WaveFormat.CreateIeeeFloatWaveFormat(sampleRate > 0 ? sampleRate : 44100, 2);
                _bufferedWaveProvider = new BufferedWaveProvider(audioFormat)
                {
                    DiscardOnBufferOverflow = true,
                    BufferLength            = AUDIO_BUFFER_SIZE
                };

                _volumeProvider = new VolumeSampleProvider(_bufferedWaveProvider.ToSampleProvider())
                {
                    Volume = 1f
                };

                _audioDevice = new WaveOutEvent
                {
                    DesiredLatency = 110
                };

                _audioDevice.Init(_volumeProvider);
                _audioDevice.Play();
            }
            catch (Exception e)
            {
                Logger.Instance.LogException(e);
            }
        }
Beispiel #7
0
        private ISampleProvider CreateSampleChain(WaveStream sourceStream)
        {
            //loop is implemented as a wave stream
            _loopingProvider = new LoopingWaveStream(sourceStream);
            _loopingProvider.EnableLooping = _loop;

            var outputSample = _loopingProvider.ToSampleProvider();

            //fade-in/fade-out
            _fadingProvider = new FadeInOutStopSampleProvider(outputSample);
            outputSample    = _fadingProvider;

            //panning (will convert to mono)
            if (PanningEnabled)
            {
                var monoProvider = new StereoToMonoSampleProvider(outputSample);

                _panningProvider = new PanningSampleProvider(monoProvider);

                _panningProvider.PanStrategy = new StereoBalanceStrategy();
                _panningProvider.Pan         = Pan;

                outputSample = _panningProvider;
            }

            //volume
            _volumeProvider        = new VolumeSampleProvider(outputSample);
            _volumeProvider.Volume = _volume;

            outputSample = _volumeProvider;

            return(outputSample);
        }
Beispiel #8
0
        public void Metronome_Load(object sender, EventArgs e)
        {
            timer       = new Timer();
            timer.Tick += Timer_Tick;

            BPM = Convert.ToInt32(numericUpDown_metronomeTempo.Value);
            BPB = Convert.ToInt32(numericUpDown_metronomeMeasuse.Value);

            if (parent != null)
            {
                firstBeatGen = new SignalGenerator(parent.waveFormat.SampleRate, parent.waveFormat.Channels)
                {
                    Gain      = 1,
                    Frequency = 660,
                    Type      = SignalGeneratorType.Sin,
                };

                otherBeatGen = new SignalGenerator(parent.waveFormat.SampleRate, parent.waveFormat.Channels)
                {
                    Gain      = 1,
                    Frequency = 440,
                    Type      = SignalGeneratorType.Sin
                };

                firstBeatVol        = new VolumeSampleProvider(firstBeatGen);
                firstBeatVol.Volume = 0;
                otherBeatVol        = new VolumeSampleProvider(otherBeatGen);
                otherBeatVol.Volume = 0;

                parent.GetRecorder().AddTrackNoOffset(firstBeatVol);
                parent.GetRecorder().AddTrackNoOffset(otherBeatVol);
                Logger.Log("Metronome loaded successfully");
            }
        }
Beispiel #9
0
        private void InitSpeakers()
        {
            _waveProvider = new BufferedWaveProvider(new WaveFormat(48000, 2))
            {
                DiscardOnBufferOverflow = true
            };
            _waveOut = new WaveOut();

            if (PlaybackDeviceName != null)
            {
                for (int i = 0; i < WaveOut.DeviceCount; i++)
                {
                    var device = WaveOut.GetCapabilities(i);
                    if (PlaybackDeviceName == device.ProductName)
                    {
                        _waveOut.DeviceNumber = i;
                        Logging.Log($"Using playback device: {i} {device.ProductName}", LogLevel.LogLevel_DEBUG);
                    }
                }
            }
            _waveOut.PlaybackStopped += _waveOut_PlaybackStopped;
            _volumeSampleProvider     = new VolumeSampleProvider(_waveProvider.ToSampleProvider());
            _waveOut.Init(_volumeSampleProvider);
            Logging.Log($"Wave device {_waveOut.DeviceNumber} initialized. Samplerate: {_waveProvider.WaveFormat.SampleRate} " +
                        $"Channels: {_waveProvider.WaveFormat.Channels}", LogLevel.LogLevel_DEBUG);
        }
        public static void ExportCustomIndices(List<CustomIndex> customIndices, string exportFolder, Dictionary<SampleGeneratingArgs, SampleSoundGenerator> loadedSamples=null) {
            foreach (CustomIndex ci in customIndices) {
                foreach (KeyValuePair<string, HashSet<SampleGeneratingArgs>> kvp in ci.Samples) {
                    if (kvp.Value.Count == 0) {
                        continue;
                    }
                    var samples = new List<ISampleProvider>();
                    var volumes = new List<double>();
                    int soundsAdded = 0;
                    
                    if (loadedSamples != null) {
                        foreach (SampleGeneratingArgs args in kvp.Value) {
                            if (SampleImporter.ValidateSampleArgs(args, loadedSamples)) {
                                var sample = loadedSamples[args];
                                samples.Add(sample.GetSampleProvider());
                                volumes.Add(sample.VolumeCorrection != -1 ? sample.VolumeCorrection : 1f);
                                soundsAdded++;
                            }
                        }
                    } else {
                        foreach (SampleGeneratingArgs args in kvp.Value) {
                            try {
                                var sample = SampleImporter.ImportSample(args);
                                samples.Add(sample.GetSampleProvider());
                                volumes.Add(sample.VolumeCorrection != -1 ? sample.VolumeCorrection : 1f);
                                soundsAdded++;
                            } catch (Exception) { }
                        }
                    }

                    if (soundsAdded == 0) {
                        continue;
                    }

                    int maxSampleRate = samples.Max(o => o.WaveFormat.SampleRate);
                    int maxChannels = samples.Max(o => o.WaveFormat.Channels);
                    IEnumerable<ISampleProvider> sameFormatSamples = samples.Select(o => (ISampleProvider)new WdlResamplingSampleProvider(SampleImporter.SetChannels(o, maxChannels), maxSampleRate));

                    ISampleProvider result = new MixingSampleProvider(sameFormatSamples);

                    if (soundsAdded > 1) {
                        result = new VolumeSampleProvider(result) {
                            Volume = (float)(1 / Math.Sqrt(soundsAdded * volumes.Average()))
                        };
                        result = new SimpleCompressorEffect(result) {
                            Threshold = 16,
                            Ratio = 6,
                            Attack = 0.1,
                            Release = 0.1,
                            Enabled = true,
                            MakeUpGain = 15 * Math.Log10(Math.Sqrt(soundsAdded * volumes.Average()))
                        };
                    }

                    // TODO: Allow mp3, ogg and aif export.
                    string filename = ci.Index == 1 ? kvp.Key + ".wav" : kvp.Key + ci.Index + ".wav";
                    CreateWaveFile(Path.Combine(exportFolder, filename), result.ToWaveProvider16());
                }
            }
        }
Beispiel #11
0
        public void Start(string inputAudioDevice, string outputAudioDevice, List <ushort> transceiverIDs)
        {
            if (Started)
            {
                throw new Exception("Client already started");
            }

            soundcardSampleProvider     = new SoundcardSampleProvider(sampleRate, transceiverIDs, eventHandler);
            outputSampleProvider        = new VolumeSampleProvider(soundcardSampleProvider);
            outputSampleProvider.Volume = outputVolume;

            output.Start(outputAudioDevice, outputSampleProvider);

            playbackCancelTokenSource = new CancellationTokenSource();
            taskAudioPlayback         = new Task(() => TaskAudioPlayback(logger, playbackCancelTokenSource.Token, Connection.VoiceServerReceiveQueue), TaskCreationOptions.LongRunning);
            taskAudioPlayback.Start();

            input.Start(inputAudioDevice);

            StartDateTimeUtc = DateTime.UtcNow;

            Connection.ReceiveAudio = true;
            Started = true;
            logger.Debug("Started [Input: " + inputAudioDevice + "] [Output: " + outputAudioDevice + "]");
        }
Beispiel #12
0
        public void Load(string filename)
        {
            if (player != null)
            {
                player.Stop();
                player.Dispose();
            }

            if (reader != null)
            {
                reader.Dispose();
                reader.Unload();
            }

            reader = new GmeReader(filename);

            volumeSampleProvider = new VolumeSampleProvider(reader.ToSampleProvider());

            var waveOut = new WaveOut {
                DeviceNumber = -1
            };

            waveOut.Init(volumeSampleProvider);

            player = waveOut;
        }
Beispiel #13
0
        private void PlaySound()
        {
            StartRecordingButton.IsEnabled = false;
            if (outputDevice == null)
            {
                StereoToMonoSampleProvider toMonoSampleProvider;
                outputDevice = new WaveOutEvent();
                try
                {
                    toMonoSampleProvider = new StereoToMonoSampleProvider(audioFileReader);
                    volumeProvider       = new VolumeSampleProvider(toMonoSampleProvider);
                }
                catch (ArgumentException)
                {
                    volumeProvider = new VolumeSampleProvider(audioFileReader);
                }

                panningProvider       = new PanningSampleProvider(volumeProvider);
                panningProvider.Pan   = (float)(PanningSlider.Value / 100.0f);
                volumeProvider.Volume = (float)(VolumeSlider.Value / 100.0f);
                //TestLabel.Content = panningProvider.Pan;

                outputDevice.Init(panningProvider);
            }
            if (outputDevice != null)
            {
                outputDevice.Play();
            }
        }
Beispiel #14
0
        public SamplePlayer(WaveFormat format, IWavePlayer player)
        {
            _mixer        = new MixingSampleProvider(format);
            _volumeFilter = new VolumeSampleProvider(_mixer);

            _player = player;
            _player.Init(_volumeFilter);
        }
Beispiel #15
0
        private static VolumeSampleProvider AddToAdjustVolume(this ISampleProvider input, float volume)
        {
            var volumeSampleProvider = new VolumeSampleProvider(input)
            {
                Volume = volume
            };

            return(volumeSampleProvider);
        }
Beispiel #16
0
        private void btnReproducir_Click(object sender, RoutedEventArgs e)
        {
            //evitar duplicado despues del primer play
            //si ademas de ya tener el output esta pausado
            if (output != null && output.PlaybackState == PlaybackState.Paused)
            {
                output.Play();

                //activamos y desactivamos los botones para poner restricciones en la interfaz
                btnReproducir.IsEnabled = false;
                btnPausa.IsEnabled      = true;
                btnDetener.IsEnabled    = true;
            }
            else
            {
                reader = new AudioFileReader(txtRutaArchivo.Text);

                //Se le da el archivo y si queremos que inicie en total silencio o no
                fades = new FadeInOutSampleProvider(reader, true);
                //se transforman los segundos a mini segundos para la duracion del fade
                double milisegundosFadeIn = Double.Parse(txtDuracionFadeIn.Text) * 1000.0;
                fades.BeginFadeIn(milisegundosFadeIn);

                //hay que reiniciar cuando se reinicie la cancion
                fadingOut = false;
                output    = new WaveOutEvent();

                //aqui se cambia donde se reproduce
                output.DeviceNumber = cbSalida.SelectedIndex;

                //se añaden reacciones a los eventos con += pues asi se sobrecarga el operador
                //con tab crea la funcion visual (output_playbackstopped)
                output.PlaybackStopped += Output_PlaybackStopped;

                volume        = new VolumeSampleProvider(fades);
                volume.Volume = (float)sldVolumen.Value;

                //inisializamos el output
                output.Init(volume);
                output.Play();

                //activamos y desactivamos los botones para poner restricciones en la interfaz
                btnDetener.IsEnabled    = true;
                btnPausa.IsEnabled      = true;
                btnReproducir.IsEnabled = false;

                //se quitan los milisegundos y eso
                lblTiempoFinal.Text = reader.TotalTime.ToString().Substring(0, 8);

                //se le asigna a la barrita el tiempo total que dura la cancion como double
                sldReproduccion.Maximum = reader.TotalTime.TotalSeconds;
                //se le asigna el valor actual a la barrita
                sldReproduccion.Value = reader.CurrentTime.TotalSeconds;
                //asi se inicia el contador
                timer.Start();
            }
        }
Beispiel #17
0
 private void closeAudioFilerReader()
 {
     if (audioFileReader != null)
     {
         audioFileReader.Dispose();
         audioFileReader = null;
         panningProvider = null;
         volumeProvider  = null;
     }
 }
Beispiel #18
0
 public AudioPlaybackEngine(int sampleRate = 44100, int channelCount = 2, int deviceNumber = 0)
 {
     outputDevice = new WaveOutEvent();
     outputDevice.DeviceNumber = deviceNumber;
     mixer           = new MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channelCount));
     mixer.ReadFully = true;
     volume          = new VolumeSampleProvider(mixer);
     outputDevice.Init(volume);
     outputDevice.Play();
 }
        private void AddMixerInput(ISampleProvider input, float volume)
        {
            ISampleProvider      convertedInput       = ConvertToRightSampleRate(ConvertToRightChannelCount(input));
            VolumeSampleProvider volumeSampleProvider = new VolumeSampleProvider(convertedInput)
            {
                Volume = AdjustVolume(volume)
            };

            _mixer.AddMixerInput(volumeSampleProvider);
        }
Beispiel #20
0
        public SynthRecorder(List <ISampleProvider> synth)
        {
            mixer           = new MixingSampleProvider(synth);
            mixer.ReadFully = true;

            recorder = new WaveRecorder(mixer.ToWaveProvider(), "@test.wav");

            volumeSampleProvider        = new VolumeSampleProvider(mixer);
            volumeSampleProvider.Volume = 1.0f;
        }
Beispiel #21
0
        public void PlaySound(CachedSound input)
        {
            var samples = new CachedSoundSampleProvider(input);
            var c       = CorrectInput((ISampleProvider)samples);
            //var v = new VolumeSampleProvider(CorrectInput(input));
            var v = new VolumeSampleProvider(c);

            v.Volume = Volume;
            mixer.AddMixerInput(v);
        }
Beispiel #22
0
        private void btnReproducir_Click(object sender, RoutedEventArgs e)
        {
            if (output != null &&
                output.PlaybackState == PlaybackState.Paused)
            {
                output.Play();
                btnReproducir.IsEnabled = false;
                btnPausa.IsEnabled      = true;
                btnDetener.IsEnabled    = true;
            }
            else
            {
                reader =
                    new AudioFileReader(txtRutaArchivo.Text);

                fades = new FadeInOutSampleProvider(
                    reader, true);
                double milisegundosFadeIn =
                    Double.Parse(txtDuracionFadeIn.Text)
                    * 1000.0;
                fades.BeginFadeIn(milisegundosFadeIn);
                fadingOut = false;
                output    = new WaveOutEvent();

                output.DeviceNumber =
                    cbSalida.SelectedIndex;

                output.PlaybackStopped += Output_PlaybackStopped;

                volume =
                    new VolumeSampleProvider(fades);

                volume.Volume =
                    (float)sldVolumen.Value;

                output.Init(volume);
                output.Play();

                btnDetener.IsEnabled    = true;
                btnPausa.IsEnabled      = true;
                btnReproducir.IsEnabled = false;

                lblTiempoTotal.Text =
                    reader.TotalTime.ToString().Substring(0, 8);
                lblTiempoActual.Text =
                    reader.CurrentTime.ToString().Substring(0, 8);
                sldReproduccion.Maximum =
                    reader.TotalTime.TotalSeconds;
                sldReproduccion.Value =
                    reader.CurrentTime.TotalSeconds;

                timer.Start();
            }
        }
Beispiel #23
0
        public RadioAudioProvider(int sampleRate)
        {
            BufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(sampleRate, 16, 2));

            BufferedWaveProvider.ReadFully = false;
            BufferedWaveProvider.DiscardOnBufferOverflow = true;

            var pcm = new Pcm16BitToSampleProvider(BufferedWaveProvider);

            VolumeSampleProvider = new VolumeSampleProvider(pcm);
        }
Beispiel #24
0
        public static string GenerateAudio(ControllerContext context, string captcha)
        {
            var mixed = Path.GetTempFileName();
            var back  = Path.GetTempFileName();
            var main  = Path.GetTempFileName();



            //gera audio principal
            List <String> chars = new List <string>();

            foreach (var item in captcha)
            {
                chars.Add(context.HttpContext.Server.MapPath("~/Content/Audios/" + item.ToString() + ".wav"));
            }
            Concatenate(main, chars, 1000);

            chars = new List <string>();
            //gera audio aleatorio para sujeira
            for (int i = 0; i < 4; i++)
            {
                var randtext = Captcha.GenerateRandomCode(i);
                foreach (var item in randtext)
                {
                    chars.Add(context.HttpContext.Server.MapPath("~/Content/Audios/" + item.ToString() + ".wav"));
                }
            }
            Concatenate(mixed, chars, 0, true);
            ReverseWaveFile(mixed, back);


            using (var reader1 = new WaveFileReader(main))
                using (var reader2 = new WaveFileReader(back))
                {
                    var volumeProvider = new VolumeSampleProvider(reader2.ToSampleProvider());
                    volumeProvider.Volume = 0.15f;

                    var inputs = new List <ISampleProvider>()
                    {
                        reader1.ToSampleProvider(),
                        volumeProvider
                    };


                    var mixer = new MixingSampleProvider(inputs);
                    WaveFileWriter.CreateWaveFile16(mixed, mixer);
                }

            var mp3file = Path.GetTempFileName();

            WavToMp3(mixed, mp3file, context);

            return(mp3file);
        }
        /// <summary>
        /// Initializes a new instance of AudioFileReader
        /// </summary>
        /// <param name="fileName">The file to open</param>
        public AudioFileReaderVVVV(string fileName)
        {
            FLockObject   = new object();
            this.FileName = fileName;
            CreateReaderStream(fileName);
            FSourceBytesPerSample = (FReaderStream.WaveFormat.BitsPerSample / 8) * FReaderStream.WaveFormat.Channels;

            this.FSampleChannel = new VolumeSampleProvider(FReaderStream.ToSampleProvider());
            FDestBytesPerSample = 4 * FSampleChannel.WaveFormat.Channels;
            FLength             = SourceToDest(FReaderStream.Length);
        }
 public void LoadAndPlayBGM()
 {
     if (mainAudioFile != null)
     {
         mainAudioFile.Dispose();
     }
     mainAudioFile          = new AudioFileReader(BGMTextBox.Text);
     mainAudioSample        = new VolumeSampleProvider(mainAudioFile);
     mainAudioSample.Volume = (float)selectedPreset.BGMVolume;
     mixer.AddMixerInput(new MainBGMSampleProvider(mainAudioSample));
 }
Beispiel #27
0
        private void btnOpen_Click(object sender, EventArgs e)
        {
            var ofd = new OpenFileDialog
            {
                Filter      = "支持的文件|*.mp3;*.wav;*.aiff|所有文件|*.*",
                Multiselect = false
            };
            var result = ofd.ShowDialog();

            if (result != DialogResult.OK)
            {
                return;
            }

            DisposeAll();

            try
            {
                var fileName = ofd.FileName;

                if (!File.Exists(fileName))
                {
                    throw new FileNotFoundException("所选文件不存在");
                }
                _device = new WaveOutEvent();            // Create device
                _reader = new AudioFileReader(fileName); // Create reader

                // dsp start
                _volumeProvider = new VolumeSampleProvider(_reader)
                {
                    Volume = sliderVolume.Value / 100f
                };
                // dsp end

                _device.Init(_volumeProvider);
                //_device.Init(_reader); // 之前是reader,现改为VolumeSampleProvider
                // https://stackoverflow.com/questions/46433790/how-to-chain-together-multiple-naudio-isampleprovider-effects

                var duration = _reader.TotalTime; // 总时长
                sliderProgress.Maximum = (int)duration.TotalMilliseconds;
                lblDuration.Text       = duration.ToString(@"mm\:ss");

                _cts = new CancellationTokenSource();
                StartUpdateProgress(); // 界面更新线程

                _device.PlaybackStopped += Device_OnPlaybackStopped;
            }
            catch (Exception ex)
            {
                DisposeAll();
                MessageBox.Show(ex.Message);
            }
        }
Beispiel #28
0
 /// <summary>
 /// Initialises a new instance of SampleChannel
 /// </summary>
 /// <param name="waveProvider">Source wave provider, must be PCM or IEEE</param>
 /// <param name="forceStereo">force mono inputs to become stereo</param>
 public SampleChannel(IWaveProvider waveProvider, bool forceStereo)
 {
     ISampleProvider sampleProvider = SampleProviderConverters.ConvertWaveProviderIntoSampleProvider(waveProvider);
     if (sampleProvider.WaveFormat.Channels == 1 && forceStereo)
     {
         sampleProvider = new MonoToStereoSampleProvider(sampleProvider);
     }
     this.waveFormat = sampleProvider.WaveFormat;
     // let's put the meter before the volume (useful for drawing waveforms)
     this.preVolumeMeter = new MeteringSampleProvider(sampleProvider);
     this.volumeProvider = new VolumeSampleProvider(preVolumeMeter);
 }
Beispiel #29
0
 public void Initialize()
 {
     mixer                   = new MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat(44100, 1));
     mixer.ReadFully         = true;
     mixerVolume             = new VolumeSampleProvider(mixer);
     mixerVolume.Volume      = enableSound? 1 : 0;
     waveOut                 = new WaveOut();
     waveOut.DesiredLatency  = 150;
     waveOut.NumberOfBuffers = 2;
     waveOut.Init(mixerVolume);
     waveOut.Play();
 }
        /// <summary>
        /// Contstructor to create the audio engine.
        /// </summary>
        /// <param name="sampleRate">Frequency of sample rate.</param>
        /// <param name="channelCount">Number of channels.</param>
        public AudioPlaybackEngine(int sampleRate = 44100, int channelCount = 2)
        {
            outputDevice    = new DirectSoundOut();
            mixer           = new MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, channelCount));
            mixer.ReadFully = true;

            volumeProvider = new VolumeSampleProvider(mixer);
            //panProvider = new PanningSampleProvider(volumeProvider);

            outputDevice.Init(volumeProvider);
            outputDevice.Play();
        }
Beispiel #31
0
        public void StopEncoding()
        {
            if (_mixing != null)
            {
                _radioOutputBuffer   = null;
                _effectsOutputBuffer = null;

                _volumeSampleProvider = null;
                _mixing.RemoveAllMixerInputs();
                _mixing = null;
            }

            if (_waveIn != null)
            {
                _waveIn.StopRecording();
                _waveIn.Dispose();
                _waveIn = null;
            }

            if (_waveOut != null)
            {
                _waveOut.Stop();
                _waveOut.Dispose();
                _waveOut = null;
            }

            if (_playBuffer != null)
            {
                _playBuffer.ClearBuffer();
                _playBuffer = null;
            }


            if (_encoder != null)
            {
                _encoder.Dispose();
                _encoder = null;
            }

            if (_decoder != null)
            {
                _decoder.Dispose();
                _decoder = null;
            }
            if (_udpVoiceHandler != null)
            {
                _udpVoiceHandler.RequestStop();
                _udpVoiceHandler = null;
            }

            _stop = true;
        }