Пример #1
0
        public void Play(Track track, EndOfTrackCallbackDelegate endOfTrackCallbackDelegate)
        {
            endOfTrackCallback = endOfTrackCallbackDelegate;

            var avail = libspotify.sp_track_get_availability(SessionPtr, track.TrackPtr);

            if (avail != libspotify.sp_availability.SP_TRACK_AVAILABILITY_AVAILABLE)
            {
                _logger.ErrorFormat("Track is unavailable ({0}).", avail);
                if (endOfTrackCallback != null)
                {
                    endOfTrackCallback();
                }

                return;
            }

            _waveOutDevice.PlaybackStopped -= playbackStoppedHandler;

            var wasPlaying = _waveOutDevice.PlaybackState != PlaybackState.Paused;

            _waveOutDevice.Stop();
            _waveOutDevice.Dispose();

            _logger.InfoFormat("Playing track: {0} - {1}", track.Name, string.Join(",", track.Artists));

            if (_spotify.TrackChanged != null)
            {
                _spotify.TrackChanged(track);
            }

            _waveOutDevice = new WaveOutEvent {DesiredLatency = 200};
            _waveProvider.ClearBuffer();
            _waveProvider.SetBufferFinished(false);
            _waveOutDevice.Init(_waveProvider);

            StartLoadingTrackAudio(track.TrackPtr);

            if (wasPlaying)
            {
                _waveOutDevice.Play();
            }

            _waveOutDevice.PlaybackStopped += playbackStoppedHandler;
        }
Пример #2
0
 private void BroadcastTrackChange(Track track)
 {
     var hubContext = GlobalHost.ConnectionManager.GetHubContext<PushHub>();
     hubContext.Clients.All.newTrack(JsonConvert.SerializeObject(track));
 }
Пример #3
0
        public bool AddTrack(Link trackLink)
        {
            LoadTracks();

            var trackPtr = libspotify.sp_link_as_track(trackLink.LinkPtr);
            if (trackPtr == IntPtr.Zero)
            {
                return false;
            }
            var track = new Track(trackPtr, session);
            _logger.InfoFormat("Adding track: {0} to playlist: {1}", track.Name, Name);
            var tracksPtr = IntPtr.Zero;

            var array = new int[1];
            array[0] = (int)track.TrackPtr;

            var size = Marshal.SizeOf(tracksPtr) * array.Length;
            tracksPtr = Marshal.AllocHGlobal(size);
            Marshal.Copy(array, 0, tracksPtr, array.Length);
            libspotify.sp_playlist_add_tracks(PlaylistPtr, tracksPtr, 1, TrackCount, session.SessionPtr);
            return true;
        }
Пример #4
0
        private void TracksAdded(IntPtr playlistPtr, IntPtr[] tracksPtr, int trackCount, int position, IntPtr userDataPtr)
        {
            foreach (var trackPtr in tracksPtr)
            {
                if (libspotify.sp_track_get_availability(session.SessionPtr, trackPtr) !=
                    libspotify.sp_availability.SP_TRACK_AVAILABILITY_AVAILABLE)
                {
                    return;
                }

                var newTrack = new Track(trackPtr, session);

                _tracks.Insert(position, newTrack);
                _logger.InfoFormat("Track sync added: {0}", newTrack.Name);

                if (newTrack.Name == string.Empty)
                {
                    Console.WriteLine("blah");
                    return;
                }

                if (position <= CurrentPosition)
                {
                    CurrentPosition++;
                }

                TrackCount++;
                position++;

            }
        }
Пример #5
0
        public List<Track> SearchForTracks(string searchTerms)
        {
            var tracksFound = new List<Track>();
            searchCompleteDelegate = SearchComplete;
            var searchPtr = libspotify.sp_search_create(session.SessionPtr, searchTerms, 0, 10, 0, 0, 0, 0, 0, 0, sp_search_type.SP_SEARCH_STANDARD, Marshal.GetFunctionPointerForDelegate(searchCompleteDelegate), IntPtr.Zero);
            Wait.For(() => libspotify.sp_search_is_loaded(searchPtr) && libspotify.sp_search_error(searchPtr) == libspotify.sp_error.OK);

            var tracksFoundCount = libspotify.sp_search_num_tracks(searchPtr);
            for (var i = 0; i < tracksFoundCount; i++)
            {
                var track = new Track(libspotify.sp_search_track(searchPtr, i), session);
                tracksFound.Add(track);
            }

            return tracksFound;
        }