//+start(): initialize webcam and start feed public void start(float playbackVolume = 0) { //Get desired audio device audioSrc = numDevices - device.SelectedIndex - 1; //Initialize device source = new WaveInEvent { WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(audioSrc).Channels) }; source.DataAvailable += sourceDataAvailable; provider = new BufferedWaveProvider(new WaveFormat()); player = new WaveOut(); sampleObject = new object(); //Initialize waveForm painter notify = new NotifyingSampleProvider(provider.ToSampleProvider()); notify.Sample += DrawAudioWave; //Start feed source.StartRecording(); source.BufferMilliseconds = 10; player.Init(notify); player.Play(); player.Volume = playbackVolume; }
private void Init() { AudioReader = new AudioFileReader(FilePath); SampleProvider = new NotifyingSampleProvider(AudioReader); SampleCount = AudioReader.GetSampleCount(); SampleProvider.Sample += OnSample; }
private static ISampleProvider CreateSampleStream(WaveStream fileStream) { var inputStream = new SampleChannel(fileStream); var sampleStream = new NotifyingSampleProvider(inputStream); return(sampleStream); }
public void Reset() { AudioReader = new AudioFileReader(FilePath); SampleProvider = new NotifyingSampleProvider(AudioReader); Samples = new Queue <float>(); SampleCount = AudioReader.GetSampleCount(); SampleProvider.Sample += OnSample; CurrentGap = 0; SampleProcessed = 0; }
public Form1() { InitializeComponent(); audio = new WaveOut(); _provider = new BufferedWaveProvider(new WaveFormat(44100, 1)); data = new byte[8000]; _notify = new NotifyingSampleProvider(_provider.ToSampleProvider()); Listening = new Thread(StartListener); SoundOut = new Thread(VoiceOut); }
public BSoundPlayer(Stream inputstream) { FileName = "<MEM>"; wavePlayer = new WaveOut(); ((WaveOut)wavePlayer).NumberOfBuffers = 4; audioFileReader = new AudioFileReader(FileName); audioFileReader.Volume = volume; meter = new NotifyingSampleProvider(audioFileReader); meter.Sample += onVolChanged; wavePlayer.Init(new SampleToWaveProvider(meter)); wavePlayer.PlaybackStopped += OnPlaybackStopped; totallong = audioFileReader.Length; }
internal void Stop() { if (waveOut != null) { waveOut.Stop(); try { waveOut.Dispose(); } catch { } waveOut = null; } waveProvider = null; sampleChannel = null; sampleStream = null; }
public BSoundPlayer(string filename) { FileName = filename; if (string.IsNullOrEmpty(FileName)) { throw new ArgumentNullException(); } wavePlayer = new WaveOut(); ((WaveOut)wavePlayer).NumberOfBuffers = 4; audioFileReader = new AudioFileReader(FileName); audioFileReader.Volume = volume; meter = new NotifyingSampleProvider(audioFileReader); meter.Sample += onVolChanged; wavePlayer.Init(new SampleToWaveProvider(meter)); wavePlayer.PlaybackStopped += OnPlaybackStopped; totallong = audioFileReader.Length; }
private ISampleProvider CreateInputStream(string fileName) { if (fileName.EndsWith(".wav")) { fileStream = OpenWavStream(fileName); } else if (fileName.EndsWith(".mp3")) { fileStream = new Mp3FileReader(fileName); } else { throw new InvalidOperationException("Unsupported extension"); } var inputStream = new SampleChannel(fileStream); var sampleStream = new NotifyingSampleProvider(inputStream); return(sampleStream); }
private void Start(Audio.Codecs.INetworkChatCodec codec) { ShouldTryRestartOutput = false; Stop(); waveOut = GetWavePlayer(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); sampleChannel = new SampleChannel(waveProvider, false); sampleStream = new NotifyingSampleProvider(sampleChannel); sampleStream.Sample += (s, e) => aggregator.Add(e.Left); waveOut.Init(sampleStream); waveOut.Play(); if (LevelManager == null) { LevelManager = new AudioLevelManagerDisconnected(); } OutputFormat = codec.RecordFormat.ToString(); }
private void _play() { /* Audio chain */ // Sampling _wavesampler = new WaveToSampleProvider(new Wave16ToFloatProvider(_wavebuffer)); // Fading component _fade = new FadeInOutSampleProvider(_wavesampler); _fade.BeginFadeIn(1500); // Notifying component var _notify = new NotifyingSampleProvider(_fade); _notify.Sample += new EventHandler <SampleEventArgs>(_notify_Sample); // Gain adjustment component _volume = new VolumeSampleProvider(_notify); _volume.Volume = this.Volume; // Output Output.Init(new SampleToWaveProvider16(_volume)); /* Playback loop */ do { if (_cancel_play.IsCancellationRequested) { Console.WriteLine("[Playback thread] Cancellation requested."); // Fade out and stop Console.WriteLine("[Playback thread] Fading out and stopping..."); _fade.BeginFadeOut(500); Thread.Sleep(500); Output.Stop(); Console.WriteLine("[Playback thread] Output stopped."); this.Status = StreamStatus.Stopped; Console.WriteLine("[Playback thread] Acknowledged as status."); //_cancel_play_token.ThrowIfCancellationRequested(); //Console.WriteLine("[Playback thread] WARNING: Cancellation token is not cleanly set!"); return; } if (Output.PlaybackState != PlaybackState.Playing && _wavebuffer.BufferedDuration.TotalMilliseconds > 2750) { // Buffer is filled enough Console.WriteLine("[Playback thread] Buffer is okay now, start playback!"); this.Status = StreamStatus.Playing; Output.Play(); } else if (Output.PlaybackState == PlaybackState.Playing && _wavebuffer.BufferedDuration.TotalMilliseconds < 2250) { // Buffer is underrunning Console.WriteLine("[Playback thread] Buffer is underrunning, pausing playback..."); this.Status = StreamStatus.Buffering; Output.Pause(); } if (_bufferThread.Exception != null) { Console.WriteLine("[Playback thread] Buffering thread is faulted, aborting playback"); throw new Exception("Buffering thread faulted, aborting playback"); } Thread.Sleep(100); }while (true); }
private void StreamMP3_New(object state) { Thread.CurrentThread.Name = state.ToString(); string url = (string)state; byte[] buffer = new byte[16384 * 4]; Dictionary <int, IMp3FrameDecompressor> Decompressors = new Dictionary <int, IMp3FrameDecompressor>(); WaveFormat outputFormat = new WaveFormat(44100, 16, 2); this.bufferedWaveProvider = new BufferedWaveProvider(outputFormat); this.bufferedWaveProvider.BufferDuration = TimeSpan.FromSeconds(2); // WaveToSampleProvider wav2sample = new WaveToSampleProvider(this.bufferedWaveProvider); ISampleProvider sampleProvider = new Pcm16BitToSampleProvider(this.bufferedWaveProvider); SampleAggregator sa = new SampleAggregator(128); sa.NotificationCount = 882; sa.PerformFFT = true; sa.FftCalculated += sa_FftCalculated; NotifyingSampleProvider notifyProvider = new NotifyingSampleProvider(sampleProvider); notifyProvider.Sample += (a, b) => sa.Add(b.Left); volumeProvider = new VolumeSampleProvider(notifyProvider); //volumeProvider = new SampleChannel(this.bufferedWaveProvider, true); volumeProvider.Volume = 0.0f; //volumeProvider.PreVolumeMeter += waveChannel_PreVolumeMeter; for (int j = 0; j < 5; ++j) { try { using (IWavePlayer waveOut = new WaveOut()) { waveOut.PlaybackStopped += waveOut_PlaybackStopped; waveOut.Init(volumeProvider); using (var readFullyStream = new ShoutcastStream(url)) { waveOut.Play(); if (OnStartPlay != null) { OnStartPlay(this); } do { if (bufferedWaveProvider != null && bufferedWaveProvider.BufferLength - bufferedWaveProvider.BufferedBytes < bufferedWaveProvider.WaveFormat.AverageBytesPerSecond / 4) { int x = 0; while (playbackState != StreamingPlaybackState.Stopped && x < 5) { x++; Thread.Sleep(50); } } else { Mp3Frame frame = Mp3Frame.LoadFromStream(readFullyStream, true); if (currentTrack != readFullyStream.StreamTitle) { currentTrack = readFullyStream.StreamTitle; if (!string.IsNullOrEmpty(currentTrack)) { ThreadPool.QueueUserWorkItem(Search, currentTrack); } else { CurrentTrack = null; if (OnNewTrack != null) { OnNewTrack(this, null); } } } IMp3FrameDecompressor dec; if (!Decompressors.TryGetValue(frame.SampleRate, out dec)) { WaveFormat waveFormat = new Mp3WaveFormat(frame.SampleRate, frame.ChannelMode == ChannelMode.Mono ? 1 : 2, frame.FrameLength, frame.BitRate); var suggFromat = AcmStream.SuggestPcmFormat(waveFormat); dec = new VbrAcmMp3FrameDecompressor(waveFormat, outputFormat); Decompressors[frame.SampleRate] = dec; } int decompressed = dec.DecompressFrame(frame, buffer, 0); bufferedWaveProvider.AddSamples(buffer, 0, decompressed); } } while (playbackState != StreamingPlaybackState.Stopped); waveOut.Stop(); } } return; } catch (Exception exe) { int x = 0; while (playbackState != StreamingPlaybackState.Stopped && x < 20) { x++; Thread.Sleep(50); } if (playbackState == StreamingPlaybackState.Stopped) { return; } } finally { foreach (var dc in Decompressors) { dc.Value.Dispose(); } Decompressors.Clear(); } } if (OnError != null) { OnError(this); } }