//+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;
 }
Exemple #3
0
        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;
 }
Exemple #5
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);
        }
Exemple #6
0
        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;
        }
Exemple #7
0
 internal void Stop()
 {
     if (waveOut != null)
     {
         waveOut.Stop();
         try
         {
             waveOut.Dispose();
         }
         catch { }
         waveOut = null;
     }
     waveProvider  = null;
     sampleChannel = null;
     sampleStream  = null;
 }
Exemple #8
0
 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;
 }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
        }
Exemple #12
0
            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);
                }
            }