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; }
private void BroadcastTrackChange(Track track) { var hubContext = GlobalHost.ConnectionManager.GetHubContext<PushHub>(); hubContext.Clients.All.newTrack(JsonConvert.SerializeObject(track)); }
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; }
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++; } }
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; }