/// <summary> /// Stop audio source. /// </summary> /// /// <remarks><para>Stops audio source.</para> /// </remarks> /// public void Stop() { if (_sampleChannel != null) { _sampleChannel.PreVolumeMeter -= SampleChannelPreVolumeMeter; } if (_waveIn != null) { // signal to stop _waveIn.DataAvailable -= WaveInDataAvailable; _waveIn.StopRecording(); _waveIn.RecordingStopped -= WaveInRecordingStopped; if (WaveOutProvider != null) { if (WaveOutProvider.BufferedBytes > 0) { WaveOutProvider.ClearBuffer(); } WaveOutProvider = null; } _waveIn.Dispose(); _waveIn = null; } }
/// <summary> /// Stop audio source. /// </summary> /// /// <remarks><para>Stops audio source.</para> /// </remarks> /// public void Stop() { var wi = _waveIn; if (wi == null) { return; } // signal to stop var sc = _sampleChannel; if (sc != null) { sc.PreVolumeMeter -= SampleChannelPreVolumeMeter; } wi.DataAvailable -= WaveInDataAvailable; try { wi.StopRecording(); } catch (Exception ex) { Logger.LogExceptionToFile(ex, "Device"); } wi.RecordingStopped -= WaveInRecordingStopped; if (WaveOutProvider?.BufferedBytes > 0) { WaveOutProvider?.ClearBuffer(); } _started = false; }
public void WaitForStop() { if (_sampleChannel != null) { _sampleChannel.PreVolumeMeter -= SampleChannelPreVolumeMeter; } if (!IsRunning) { return; } _stopEvent.Set(); _thread.Join(MainForm.ThreadKillDelay); if (_thread != null && !_thread.Join(TimeSpan.Zero)) { _thread.Abort(); } Free(); if (_waveProvider != null && _waveProvider.BufferedBytes > 0) { _waveProvider.ClearBuffer(); } if (WaveOutProvider?.BufferedBytes > 0) { WaveOutProvider.ClearBuffer(); } }
/// <summary> /// Stop audio source. /// </summary> /// /// <remarks><para>Stops audio source.</para> /// </remarks> /// public void Stop() { if (IsRunning) { _stopEvent.Set(); try { if (!_thread.Join(TimeSpan.Zero)) { _thread.Join(); } } catch { } Free(); if (_sampleChannel != null) { _sampleChannel.PreVolumeMeter -= SampleChannelPreVolumeMeter; } if (_waveProvider != null && _waveProvider.BufferedBytes > 0) { _waveProvider.ClearBuffer(); } if (WaveOutProvider != null) { if (WaveOutProvider.BufferedBytes > 0) { WaveOutProvider.ClearBuffer(); } } } }
/// <summary> /// Stop audio source. /// </summary> /// /// <remarks><para>Stops audio source.</para> /// </remarks> /// public void Stop() { if (_waveIn != null) { // signal to stop try { _waveIn.StopRecording(); } catch (Exception ex) { MainForm.LogExceptionToFile(ex); } _waveIn.DataAvailable -= WaveInDataAvailable; _waveIn.RecordingStopped -= WaveInRecordingStopped; _waveIn = null; _isrunning = false; if (_sampleChannel != null) { _sampleChannel.PreVolumeMeter -= SampleChannelPreVolumeMeter; } if (WaveOutProvider != null) { if (WaveOutProvider.BufferedBytes > 0) { WaveOutProvider.ClearBuffer(); } } } }
/// <summary> /// Stop audio source. /// </summary> /// /// <remarks><para>Stops audio source.</para> /// </remarks> /// public void Stop() { if (!IsRunning) return; _stopEvent.Set(); try { if (!_thread.Join(TimeSpan.Zero)) _thread.Join(); } catch { // ignored } Free(); if (_sampleChannel!=null) _sampleChannel.PreVolumeMeter -= SampleChannelPreVolumeMeter; if (_waveProvider != null && _waveProvider.BufferedBytes > 0) _waveProvider.ClearBuffer(); if (WaveOutProvider?.BufferedBytes>0) WaveOutProvider.ClearBuffer(); }
private void DirectStreamListener() { _abort = new ManualResetEvent(false); try { var data = new byte[PacketSize]; if (_stream != null) { while (!_abort.WaitOne(0) && !MainForm.ShuttingDown) { var da = DataAvailable; if (da != null) { int recbytesize = _stream.Read(data, 0, PacketSize); if (recbytesize > 0) { if (_sampleChannel != null) { _waveProvider.AddSamples(data, 0, recbytesize); var sampleBuffer = new float[recbytesize]; int read = _sampleChannel.Read(sampleBuffer, 0, recbytesize); da(this, new DataAvailableEventArgs((byte[])data.Clone(), read)); if (Listening) { WaveOutProvider?.AddSamples(data, 0, read); } } } else { break; } } } } } catch (Exception e) { _res = ReasonToFinishPlaying.DeviceLost; Logger.LogException(e, "Direct"); } _stream?.Close(); _stream = null; if (_sampleChannel != null) { _sampleChannel.PreVolumeMeter -= SampleChannelPreVolumeMeter; } if (_waveProvider != null && _waveProvider.BufferedBytes > 0) { _waveProvider.ClearBuffer(); } if (WaveOutProvider?.BufferedBytes > 0) { WaveOutProvider.ClearBuffer(); } AudioFinished?.Invoke(this, new PlayingFinishedEventArgs(_res)); _abort.Close(); }
private void SpyServerListener() { var data = new byte[3200]; try { var request = (HttpWebRequest)WebRequest.Create(_source); request.Timeout = 10000; request.ReadWriteTimeout = 5000; var response = request.GetResponse(); using (Stream stream = response.GetResponseStream()) { if (stream == null) { throw new Exception("Stream is null"); } stream.ReadTimeout = 5000; while (!_stopEvent.WaitOne(0, false)) { int recbytesize = stream.Read(data, 0, 3200); if (recbytesize == 0) { throw new Exception("lost stream"); } byte[] dec; ALawDecoder.ALawDecode(data, recbytesize, out dec); var da = DataAvailable; if (da != null) { if (_sampleChannel != null) { _waveProvider.AddSamples(dec, 0, dec.Length); var sampleBuffer = new float[dec.Length]; int read = _sampleChannel.Read(sampleBuffer, 0, dec.Length); da(this, new DataAvailableEventArgs((byte[])dec.Clone(), read)); if (Listening) { WaveOutProvider?.AddSamples(dec, 0, read); } } } else { break; } // need to stop ? if (_stopEvent.WaitOne(0, false)) { break; } } } AudioFinished?.Invoke(this, new PlayingFinishedEventArgs(ReasonToFinishPlaying.StoppedByUser)); } catch (Exception e) { var af = AudioFinished; af?.Invoke(this, new PlayingFinishedEventArgs(ReasonToFinishPlaying.DeviceLost)); //Logger.LogExceptionToFile(e,"ispyServer"); } if (_sampleChannel != null) { _sampleChannel.PreVolumeMeter -= SampleChannelPreVolumeMeter; _sampleChannel = null; } if (_waveProvider?.BufferedBytes > 0) { _waveProvider.ClearBuffer(); } if (WaveOutProvider?.BufferedBytes > 0) { WaveOutProvider?.ClearBuffer(); } }
private void FfmpegListener() { _reasonToStop = ReasonToFinishPlaying.StoppedByUser; _afr = null; bool open = false; string errmsg = ""; try { Program.FfmpegMutex.WaitOne(); _afr = new AudioFileReader(); int i = _source.IndexOf("://", StringComparison.Ordinal); if (i > -1) { _source = _source.Substring(0, i).ToLower() + _source.Substring(i); } _afr.Timeout = Timeout; _afr.AnalyzeDuration = AnalyseDuration; _afr.Headers = Headers; _afr.Cookies = Cookies; _afr.UserAgent = UserAgent; _afr.Open(_source); open = true; } catch (Exception ex) { MainForm.LogExceptionToFile(ex, "FFMPEG"); } finally { try { Program.FfmpegMutex.ReleaseMutex(); } catch (ObjectDisposedException) { //can happen on shutdown } } if (_afr == null || !_afr.IsOpen || !open) { ShutDown("Could not open audio stream" + ": " + _source); return; } RecordingFormat = new WaveFormat(_afr.SampleRate, 16, _afr.Channels); _waveProvider = new BufferedWaveProvider(RecordingFormat) { DiscardOnBufferOverflow = true, BufferDuration = TimeSpan.FromMilliseconds(500) }; _sampleChannel = new SampleChannel(_waveProvider); _sampleChannel.PreVolumeMeter += SampleChannelPreVolumeMeter; LastFrame = DateTime.UtcNow; try { while (!_stopEvent.WaitOne(10, false) && !MainForm.ShuttingDown) { byte[] data = _afr.ReadAudioFrame(); if (data != null && data.Length > 0) { LastFrame = DateTime.UtcNow; var da = DataAvailable; if (da != null) { //forces processing of volume level without piping it out _waveProvider.AddSamples(data, 0, data.Length); var sampleBuffer = new float[data.Length]; _sampleChannel.Read(sampleBuffer, 0, data.Length); da.Invoke(this, new DataAvailableEventArgs((byte[])data.Clone())); if (WaveOutProvider != null && Listening) { WaveOutProvider.AddSamples(data, 0, data.Length); } } if (_stopEvent.WaitOne(30, false)) { break; } } else { if ((DateTime.UtcNow - LastFrame).TotalMilliseconds > Timeout) { throw new Exception("Audio source timeout"); } if (_stopEvent.WaitOne(30, false)) { break; } } } } catch (Exception e) { MainForm.LogExceptionToFile(e, "FFMPEG"); errmsg = e.Message; } if (_sampleChannel != null) { _sampleChannel.PreVolumeMeter -= SampleChannelPreVolumeMeter; _sampleChannel = null; } if (_waveProvider?.BufferedBytes > 0) { _waveProvider.ClearBuffer(); } if (WaveOutProvider?.BufferedBytes > 0) { WaveOutProvider?.ClearBuffer(); } ShutDown(errmsg); }
private void WebStreamListener() { try { var data = new byte[6400]; if (_socket != null) { while (!_abort.WaitOne(20) && !MainForm.ShuttingDown) { var da = DataAvailable; if (da != null) { int recbytesize = _socket.Receive(data, 0, 6400, SocketFlags.None); if (_sampleChannel != null) { _waveProvider.AddSamples(data, 0, recbytesize); var sampleBuffer = new float[recbytesize]; int read = _sampleChannel.Read(sampleBuffer, 0, recbytesize); da(this, new DataAvailableEventArgs((byte[])data.Clone(), read)); if (Listening) { WaveOutProvider?.AddSamples(data, 0, read); } } } else { break; } } } } catch (Exception e) { _res = ReasonToFinishPlaying.DeviceLost; Logger.LogException(e, "WebStream"); } if (_socket != null) { _socket.Close(); _socket = null; } if (_sampleChannel != null) { _sampleChannel.PreVolumeMeter -= SampleChannelPreVolumeMeter; } if (_waveProvider != null && _waveProvider.BufferedBytes > 0) { _waveProvider.ClearBuffer(); } if (WaveOutProvider?.BufferedBytes > 0) { WaveOutProvider.ClearBuffer(); } AudioFinished?.Invoke(this, new PlayingFinishedEventArgs(_res)); }
private void SpyServerListener() { var data = new byte[3200]; try { var request = (HttpWebRequest)WebRequest.Create(_source); request.Timeout = 10000; request.ReadWriteTimeout = 5000; var response = request.GetResponse(); using (Stream stream = response.GetResponseStream()) { if (stream == null) { throw new Exception("Stream is null"); } stream.ReadTimeout = 5000; while (!_stopEvent.WaitOne(0, false)) { int recbytesize = stream.Read(data, 0, 3200); if (recbytesize == 0) { throw new Exception("lost stream"); } var recive = Encoding.UTF8.GetString(data, 0, recbytesize); if (recive.Equals("setCurrentVolumeMute")) { setVolumeMute(); } else if (recive.StartsWith("setCurrentVolume")) { if (recive.IndexOf("#") > -1) { var cmd = recive.Split(new[] { '#' }); Thread setValueThread = new Thread(new ParameterizedThreadStart(this.setVolumeFromServer)); setValueThread.IsBackground = true; setValueThread.Start(cmd[1]); Thread setValueThread1 = new Thread(new ParameterizedThreadStart(this.setVolumeWINMM)); setValueThread1.IsBackground = true; setValueThread1.Start(cmd[1]); } } else { byte[] dec; ALawDecoder.ALawDecode(data, recbytesize, out dec); var da = DataAvailable; if (da != null) { if (_sampleChannel != null) { _waveProvider.AddSamples(dec, 0, dec.Length); var sampleBuffer = new float[dec.Length]; int read = _sampleChannel.Read(sampleBuffer, 0, dec.Length); da(this, new DataAvailableEventArgs((byte[])dec.Clone(), read)); if (Listening) { WaveOutProvider?.AddSamples(dec, 0, read); } } } else { break; } // need to stop ? if (_stopEvent.WaitOne(0, false)) { break; } } } } AudioFinished?.Invoke(this, new PlayingFinishedEventArgs(ReasonToFinishPlaying.StoppedByUser)); } catch (Exception e) { var af = AudioFinished; af?.Invoke(this, new PlayingFinishedEventArgs(ReasonToFinishPlaying.DeviceLost)); //Logger.LogExceptionToFile(e,"ispyServer"); } if (_sampleChannel != null) { _sampleChannel.PreVolumeMeter -= SampleChannelPreVolumeMeter; _sampleChannel = null; } if (_waveProvider?.BufferedBytes > 0) { _waveProvider.ClearBuffer(); } if (WaveOutProvider?.BufferedBytes > 0) { WaveOutProvider?.ClearBuffer(); } }