Beispiel #1
0
        public void HandleAudio(object sender, MusicDeliveryEventArgs e)
        {
            if (_format == null)
            {
                _format = new WaveFormat(e.Rate, e.Channels);
            }

            if (_provider == null)
            {
                _provider = new BufferedWaveProvider(_format);
            }

            var consumed = 0;

            if (_playing && (_provider.BufferLength - _provider.BufferedBytes) > e.Samples.Length)
            {
                _provider.AddSamples(e.Samples, 0, e.Samples.Length);
                consumed = e.Frames;
            }
            e.ConsumedFrames = consumed;

            if (_out == null)
            {
                _out = new WaveOut();
                _out.Init(_provider);
                if (_playing)
                {
                    _out.Play();
                }
                else
                {
                    _out.Pause();
                }
            }
        }
Beispiel #2
0
        static void HandleOnMusicDelivery(Session sender, MusicDeliveryEventArgs e)
        {
            if (e.Samples.Length > 0)
            {
                if (player == null)
                {
                    if (IsWindows())
                    {
                        // Use BASS on Windows.
                        player = new BASSPlayer();
                        Console.WriteLine("BASSPlayer created");
                    }
                    else
                    {
                        player = new AlsaPlayer(e.Rate / 2); // Buffer 500ms of audio
                        Console.WriteLine("AlsaPlayer created with buffer size {0} frames", e.Rate / 2);
                    }
                }

                // Don't forget to set how many frames we consumed
                e.ConsumedFrames = player.EnqueueSamples(e.Channels, e.Rate, e.Samples, e.Frames);
            }
            else
            {
                e.ConsumedFrames = 0;
            }
        }
Beispiel #3
0
 private void OnMusicDelivered(Session sender, MusicDeliveryEventArgs e)
 {
     if (e.Samples.Length > 0)
     {
         e.ConsumedFrames = _player.EnqueueSamples(e.Channels, e.Rate, e.Samples, e.Frames);
     }
     else
     {
         e.ConsumedFrames = 0;
     }
 }
Beispiel #4
0
 static void session_MusicDeliver(Session sender, MusicDeliveryEventArgs e)
 {
     if (e.Samples.Length > 0)
     {
         e.ConsumedFrames = player.EnqueueSamples(e.Channels, e.Rate, e.Samples, e.Frames);
     }
     else
     {
         e.ConsumedFrames = 0;
     }
 }
Beispiel #5
0
        void HandleOnMusicDelivery(Session sender, MusicDeliveryEventArgs e)
        {
            try
            {
                // Write to LAME.
                LameEncoder.Write(e.Samples);

                // Don't forget to set how many frames we consumed
                e.ConsumedFrames = e.Frames;
            }
            catch (Exception ex)
            {
#if DEBUG
                if (Log.IsErrorEnabled)
                {
                    Log.Error("Exception", ex);
                }
#endif
            }
        }
Beispiel #6
0
        private int MusicDeliveryCallback(IntPtr sessionPtr, IntPtr formatPtr, IntPtr framesPtr, int numFrames)
        {
            if (sessionPtr != _session.Handle)
            {
                return(0);
            }

            byte[] samplesBytes = new byte[0];
            Spotify.SpotifyAudioFormat format = (Spotify.SpotifyAudioFormat)Marshal.PtrToStructure(formatPtr, typeof(Spotify.SpotifyAudioFormat));

            if (numFrames > 0)
            {
                samplesBytes = new byte[numFrames * format.Channels * 2];
                Marshal.Copy(framesPtr, samplesBytes, 0, samplesBytes.Length);
            }

            var args = new MusicDeliveryEventArgs(format.Channels, format.SampleRate, samplesBytes, numFrames);

            _session.OnMusicDeliver(args);

            return(args.ConsumedFrames);
        }
Beispiel #7
0
        /// <summary>
        /// Deliver the Spotify track's music samples to the player, allowing it to consume as many as it can buffer
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        static void MusicDeliver(Session sender, MusicDeliveryEventArgs e)
        {
            try
            {
                if (e.Samples.Length > 0)
                {
                    //  Let the player consume as many as it can
                    e.ConsumedFrames = Player.EnqueueSamples(e.Channels, e.Rate, e.Samples, Math.Min(e.Frames, e.Rate));
                }
                else
                {
                    e.ConsumedFrames = 0;
                }

                //  Where are we playing currently - used for position display
                numSamplesPlayed += e.ConsumedFrames;
                currentTrackPos   = seekPosition + (int)(numSamplesPlayed / e.Rate) - (int)Player.GetBufferedDuration().TotalSeconds;
            }
            catch (System.Exception ex)
            {
                logger.Error(ex, "Failure in MusicDeliver: {0}");
            }
        }
        private int MusicDeliveryCallback(IntPtr sessionPtr, IntPtr formatPtr, IntPtr framesPtr, int numFrames)
        {
            if (sessionPtr != _session.Handle)
            {
                return 0;
            }

            byte[] samplesBytes = new byte[0];
            Spotify.SpotifyAudioFormat format = (Spotify.SpotifyAudioFormat)Marshal.PtrToStructure(formatPtr, typeof(Spotify.SpotifyAudioFormat));

            if (numFrames > 0)
            {
                samplesBytes = new byte[numFrames * format.Channels * 2];
                Marshal.Copy(framesPtr, samplesBytes, 0, samplesBytes.Length);
            }

            var args = new MusicDeliveryEventArgs(format.Channels, format.SampleRate, samplesBytes, numFrames);
            _session.OnMusicDeliver(args);

            return args.ConsumedFrames;
        }
Beispiel #9
0
 void session_MusicDeliverd(Session sender, MusicDeliveryEventArgs e)
 {
     e.ConsumedFrames = player.EnqueueSamples(e.Channels, e.Rate, e.Samples, e.Frames);
 }
Beispiel #10
0
 internal void OnMusicDeliver(MusicDeliveryEventArgs e)
 {
     MusicDeliver.RaiseEvent(this, e);
 }
 /// <summary>
 /// Called when music is delievered
 /// </summary>
 /// <param name="sender"The sender</param>
 /// <param name="e">The music being delievered</param>
 private void session_MusicDelivered(Session sender, MusicDeliveryEventArgs e)
 {
     e.ConsumedFrames = e.Frames;
     var stream = client.GetStream();
     stream.Write(e.Samples, 0, e.Samples.Length);
 }
Beispiel #12
0
 void session_MusicDeliverd(Session sender, MusicDeliveryEventArgs e)
 {
     e.ConsumedFrames = player.EnqueueSamples(e.Channels, e.Rate, e.Samples, e.Frames);
 }
Beispiel #13
0
 internal void OnMusicDeliver(MusicDeliveryEventArgs e)
 {
     MusicDeliver.RaiseEvent(this, e);
 }
Beispiel #14
0
 void session_MusicDelivered(ISession sender, MusicDeliveryEventArgs e)
 {
     e.ConsumedFrames = e.Samples.Length > 0 ? player.EnqueueSamples(e.Channels, e.Rate, e.Samples, e.Frames) : 0;
 }
 private void OnSessionMusicDeliver(object sender, MusicDeliveryEventArgs e)
 {
     if (e.Samples.Length > 0)
     {
         e.ConsumedFrames = _player.EnqueueSamples(e.Channels, e.Rate, e.Samples, e.Frames);
         IsPlaying = true;
     }
     else
     {
         e.ConsumedFrames = 0;
         IsPlaying = false;
     }
 }
Beispiel #16
0
 private void OnMusicDelivered(Session sender, MusicDeliveryEventArgs e)
 {
     if (e.Samples.Length > 0)
     {
         e.ConsumedFrames = _player.EnqueueSamples(e.Channels, e.Rate, e.Samples, e.Frames);
     }
     else
     {
         e.ConsumedFrames = 0;
     }
 }
Beispiel #17
0
 static void session_MusicDeliver(Session sender, MusicDeliveryEventArgs e)
 {
     if (e.Samples.Length > 0)
     {
         e.ConsumedFrames = player.EnqueueSamples(e.Channels, e.Rate, e.Samples, e.Frames);
     }
     else
     {
         e.ConsumedFrames = 0;
     }
 }
 private void OnMusicDeliver(object sender, MusicDeliveryEventArgs e)
 {
     if (!_hasReachedEndOfTrack)
     {
         e.ConsumedFrames = _musicPlayer.EnqueueSamples(e.Channels, e.Rate, e.Samples, e.Frames);
         IsPlaying = true;
     }
 }