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(); } } }
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; }
//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(); }
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); }
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); }
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); } }
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); }
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"); } }
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()); } } }
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 + "]"); }
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; }
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(); } }
public SamplePlayer(WaveFormat format, IWavePlayer player) { _mixer = new MixingSampleProvider(format); _volumeFilter = new VolumeSampleProvider(_mixer); _player = player; _player.Init(_volumeFilter); }
private static VolumeSampleProvider AddToAdjustVolume(this ISampleProvider input, float volume) { var volumeSampleProvider = new VolumeSampleProvider(input) { Volume = volume }; return(volumeSampleProvider); }
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(); } }
private void closeAudioFilerReader() { if (audioFileReader != null) { audioFileReader.Dispose(); audioFileReader = null; panningProvider = null; volumeProvider = null; } }
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); }
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; }
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); }
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(); } }
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); }
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)); }
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); } }
/// <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); }
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(); }
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; }