Пример #1
0
        /// <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;
            }
        }
Пример #2
0
        /// <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;
        }
Пример #3
0
        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();
            }
        }
Пример #4
0
        /// <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();
                    }
                }
            }
        }
Пример #5
0
        /// <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();
                    }
                }
            }
        }
Пример #6
0
        /// <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();
        }
Пример #7
0
        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();
        }
Пример #8
0
        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();
            }
        }
Пример #9
0
        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);
        }
Пример #10
0
        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));
        }
Пример #11
0
        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();
            }
        }