Exemple #1
0
static int try_play(sp_session *session, sp_track *t,int offset)
{
    sp_error err;
    fprintf(stderr,"try play\n");
    err = sp_session_player_load(session,t);
    if( err != SP_ERROR_OK) {
        fprintf(stderr,"Load failed %d\n",err);
    }
    if(!sp_track_is_loaded(t)) {
        if(g_track_to_be_played != t) {
            if(g_track_to_be_played)
                sp_track_release(g_track_to_be_played);
            g_track_to_be_played = t; //FIXME: Do I need to addref?
            sp_track_add_ref(g_track_to_be_played);
        }
    } else {
        //FIXME: Seek!
//        g_current_fifo_idx = (g_current_fifo_idx+1) % 2;
        sp_session_player_seek(session,offset);
        sp_session_player_play(session,true);
        sp_album *album = sp_track_album(t);
        if(album) {
            const byte *id = sp_album_cover(album);
            g_gazify.current_t = t;
            if(id) {
                sp_image *img = sp_image_create(session,id);
                sp_image_add_load_callback(img,&image_loaded,&g_gazify);
                
            }
        }
        g_track_to_be_played = NULL;
    }
    return err;
}
Exemple #2
0
static void
Track_dealloc(Track * self)
{
    if (self->_track)
        sp_track_release(self->_track);
    self->ob_type->tp_free(self);
}
Exemple #3
0
/**
 * A track has ended. Remove it from the playlist.
 *
 * Called from the main loop when the music_delivery() callback has set g_playback_done.
 */
static void track_ended(void)
{
    fprintf(stderr,"jahspotify::track_ended: called\n");

    int tracks = 0;

    if (g_currenttrack)
    {
        sp_link *link = sp_link_create_from_track(g_currenttrack,0);
        char *trackLinkStr = NULL;
        if (link)
        {
            trackLinkStr = malloc ( sizeof ( char ) * ( 100 ) );
            sp_link_as_string(link,trackLinkStr,100);
            sp_link_release(link);
        }

        sp_session_player_unload(g_sess);

        sp_track_release(g_currenttrack);

        g_currenttrack = NULL;

        signalTrackEnded(trackLinkStr,JNI_FALSE);

        if (trackLinkStr)
        {
            free(trackLinkStr);
        }
    }


}
Exemple #4
0
static void
queue_free_list (queue_t *queue)
{
  sp_track *track;
  while ((track = queue_get_next (queue)))
    sp_track_release (track);
}
Exemple #5
0
JNIEXPORT jobject JNICALL Java_jahspotify_impl_JahSpotifyImpl_retrieveTrack ( JNIEnv *env, jobject obj, jstring uri)
{
    jobject trackInstance;
    uint8_t *nativeUri = NULL;

    nativeUri = ( uint8_t * ) ( *env )->GetStringUTFChars ( env, uri, NULL );

    sp_link *link = sp_link_create_from_string(nativeUri);
    if (!link)
    {
        // hmm
        fprintf ( stderr, "jahspotify::Java_jahspotify_impl_JahSpotifyImpl_retrieveTrack: Could not create link!\n" );
        return JNI_FALSE;
    }

    sp_track *track = sp_link_as_track(link);

    while (!sp_track_is_loaded(track))
    {
        fprintf ( stderr, "jahspotify::Java_jahspotify_impl_JahSpotifyImpl_retrieveTrack: Waiting for track to be loaded ...\n" );
        sleep(1);
    }

    trackInstance = createJTrackInstance(env, track);

    if (track)
        sp_track_release(track);
    if (link)
        sp_link_release(link);
    if (nativeUri)
        free(nativeUri);

    return trackInstance;
}
Exemple #6
0
void queue_remove_tracks(gboolean notif, int idx, int nb) {
    int len;
    int i;

    g_debug("Removing %d tracks from queue, starting at %d.", nb, idx);

    if ((idx < 0) || (nb < 0))
        return;

    len = g_queue_get_length(&g_queue);

    if (idx < len) {
        if (idx + nb >= len)
            nb = len - idx;

        for (i=0; i < nb; i++)
            sp_track_release(g_queue_pop_nth(&g_queue, idx));

        /* Was the current track removed too? */
        if (g_current_track >= idx) {
            if (g_current_track < idx+nb) {
                queue_stop(FALSE);
                g_current_track = -1;
            }
            else
                g_current_track -= nb;
        }
    }

    if (g_shuffle) queue_setup_shuffle();
    g_shuffle_first = g_current_track;

    if (notif) queue_notify();
}
Exemple #7
0
SpotifySong::~SpotifySong()
{
    boost::lock_guard<boost::mutex> lock(this->spotify->spotifyApiMutex);
    sp_track_release(this->track);
    if(this->artist != nullptr)
        sp_artist_release(this->artist);
    if(this->album != nullptr)
        sp_album_release(this->album);
}
Exemple #8
0
/**
 * A track has ended. Remove it from the playlist.
 *
 * Called from the main loop when the music_delivery() callback has set g_playback_done.
 */
static void track_ended(void)
{
	if (g_currenttrack) {
		sp_track_release(g_currenttrack);
		g_currenttrack = NULL;
		sp_session_player_unload(g_sess);
		exit(0);
	}
}
Exemple #9
0
void TLSpotify::TTrack::ReleaseTrack()
{
	if( m_pTrack )
	{
		sp_track_release( m_pTrack );
		m_pTrack = NULL;
		m_Loaded = SyncWait;
		UpdateInfo();
	}
}
void Spotify::tryLoadTrack()
{
    sp_error err;
    if (nextTrack == 0) {
        return;
    }

    if (currentTrack == nextTrack) {
        return;
    }

    err = sp_track_error(nextTrack);
    if (err != SP_ERROR_OK) {
        fprintf(stderr, "Spotify: track error: %s\n",
                sp_error_message(err));
        return;
    }

    err = sp_session_player_unload(sp);
    if (err != SP_ERROR_OK) {
        fprintf(stderr, "Failed to unload player: 0x%02X %s\n",
                (unsigned)err, sp_error_message(err));
        return;
    }

    if (audioThread.isRunning()) {
        audioThread.quit();
    }

    err = sp_session_player_load(sp, nextTrack);
    if (err != SP_ERROR_OK) {
        fprintf(stderr, "Failed to load URI (%s): 0x%02X %s\n",
                currentURI.toLocal8Bit().constData(),
                (unsigned)err, sp_error_message(err));
        return;
    }

    err = sp_session_player_play(sp, true);
    if (err != SP_ERROR_OK) {
        fprintf(stderr, "Failed to play URI (%s): %s\n",
                currentURI.toLocal8Bit().constData(),
                sp_error_message(err));
        return;
    }

    if (currentTrack) {
        sp_track_release(currentTrack);
    }
    currentTrack = nextTrack;

    emit songLoaded(currentURI);
}
Exemple #11
0
void queue_add_track(gboolean notif, sp_track* track) {
    sp_track_add_ref(track);
    if (!sp_track_is_loaded(track)) {
        sp_track_release(track);
        g_debug("Track not loaded.");
        return;
    }

    if (!track_available(track)) {
        sp_track_release(track);
        g_debug("Track is not available.");
        return;
    }

    g_debug("Adding track %p to queue.", track);

    g_queue_push_tail(&g_queue, track);
    if (g_shuffle) queue_setup_shuffle();
    g_shuffle_first = g_current_track;

    if (notif) queue_notify();
}
Exemple #12
0
/* Restore state */
static gboolean really_restore_state(gpointer data) {
    saved_state* s = (saved_state*) data;
    sp_track* tr;

    /* Check if all tracks are loaded */
    size_t i;
    for (i=0; i < s->tracks->len; i++) {
        tr = g_array_index(s->tracks, sp_track*, i);
        if (!sp_track_is_loaded(tr))
            return TRUE;
    }

    /* All tracks are loaded: restore them */
    g_debug("savestate: restoring saved state...");
    queue_clear(FALSE);

    for (i=0; i < s->tracks->len; i++) {
        tr = g_array_index(s->tracks, sp_track*, i);
        if (track_available(tr))
            queue_add_track(FALSE, tr);
        else {
            g_info("savestate: track %zu is no longer available", i);
            if (s->cur_track == i) {
                s->cur_track = -1;
                s->qs = STOPPED;
            }
            else if (s->cur_track > i)
                s->cur_track -= 1;
        }
        sp_track_release(tr);
    }

    queue_set_repeat(FALSE, s->repeat);
    queue_set_shuffle(FALSE, s->shuffle);

    if (s->cur_track >= 0)
        queue_goto(FALSE, s->cur_track, TRUE);
    if (s->qs == PLAYING)
        queue_play(FALSE);

    /* Done! */
    queue_notify();

    g_array_free(s->tracks, TRUE);
    g_free(s);

    g_debug("savestate: state restored!");

    return FALSE;
}
Exemple #13
0
/************************
 *** Queue management ***
 ************************/
void queue_set_track(gboolean notif, sp_track* track) {
    sp_track_add_ref(track);
    if (!sp_track_is_loaded(track)) {
        sp_track_release(track);
        g_debug("Track not loaded.");
        return;
    }

    if (!track_available(track)) {
        sp_track_release(track);
        g_debug("Track is not available.");
        return;
    }

    g_debug("Setting track %p as queue.", track);

    queue_clear(FALSE);
    g_queue_push_tail(&g_queue, track);
    if (g_shuffle) queue_setup_shuffle();
    g_shuffle_first = -1;

    if (notif) queue_notify();
}
Exemple #14
0
SP_LIBEXPORT(void) sp_artistbrowse_release(sp_artistbrowse *arb) {
	int i;

	assert(arb->ref_count > 0);
	arb->ref_count--;

	if(arb->ref_count)
		return;


	if(arb->artist) {
		DSFYDEBUG("Unreferencing artist at %p\n", arb->artist);
		sp_artist_release(arb->artist);
	}


	for(i = 0; i < arb->num_tracks; i++)
		sp_track_release(arb->tracks[i]);

	if(arb->num_tracks)
		free(arb->tracks);


	for(i = 0; i < arb->num_portraits; i++)
		free(arb->portraits[i]);

	if(arb->num_portraits)
		free(arb->portraits);


	for(i = 0; i < arb->num_similar_artists; i++)
		sp_artist_release(arb->similar_artists[i]);

	if(arb->num_similar_artists)
		free(arb->similar_artists);


	for(i = 0; i < arb->num_albums; i++)
		sp_album_release(arb->albums[i]);

	if(arb->num_albums)
		free(arb->albums);


	DSFYDEBUG("Deallocating artistbrowse at %p\n", arb);
	free(arb);
}
Exemple #15
0
  bool Codec::unloadPlayer() {
    //make sure there is no music_delivery while we are removing the codec
    while (!Session::getInstance()->lock()) {
    }
    if (m_isPlayerLoaded) {
      sp_session_player_play(getSession(), false);
      sp_session_player_unload(getSession());
      if (m_currentTrack != NULL) {
        sp_track_release(m_currentTrack);
      }
    }

    m_currentTrack = NULL;
    m_isPlayerLoaded = false;
    m_endOfTrack = true;
    Session::getInstance()->unlock();
    return true;
  }
Exemple #16
0
void end_of_track( sp_session *session )
{
    TRACE_2( PLAYERMANAGER , "end_of_track().");

    TRACE_3( PLAYERMANAGER , "End of track...");

//    LOCK_MUTEX( PLAYERMANAGER , &mutexSession );

    TRACE_3( PLAYERMANAGER , "Removing the track which have been played.");

    sp_track_release( currentTrack );

//    UNLOCK_MUTEX( PLAYERMANAGER , &mutexSession );

//    if( hasNextTrack() == TRUE )
//    {
//        TRACE_1( PLAYERMANAGER , "Load next music !");

//        playMusic( session , "" , currentStreamName );
//    }
    if( nextTrackInStream( currentStreamName ) == PC_SUCCESS )
    {
        TRACE_1( PLAYERMANAGER , "Load next music !");

    }
    else
    {
        TRACE_WARNING( PLAYERMANAGER , "No more music in the mainplaylist");

        audio_fifo_flush( &g_audiofifo );

        LOCK_MUTEX( PLAYERMANAGER , &mutexSession );

        sp_session_player_play( session , 0 );
        sp_session_player_unload( session );

        UNLOCK_MUTEX( PLAYERMANAGER , &mutexSession );

        playing = FALSE;
    }



}
Exemple #17
0
static void track_browse_try(void)
{
	switch (sp_track_error(track_browse)) {
	case SP_ERROR_OK:
		print_track(track_browse);
		break;

	case SP_ERROR_IS_LOADING:
		return; // Still pending

	default:
		fprintf(stderr, "Unable to resolve track: %s\n", sp_error_message(sp_track_error(track_browse)));
		break;
	}
	
	metadata_updated_fn = NULL;
	cmd_done();
	sp_track_release(track_browse);
}
Exemple #18
0
// Loads track if metadata exists, otherwise load the metadata
static void load_track_or_metadata(sp_session *session, sp_track *track, const char *uri) {
	if (track != NULL) {
		if (s_is_playing)
			sp_session_player_play(session, false);
		sp_session_player_unload(session);
		sp_track_release(track);
	}
	track = sp_link_as_track(sp_link_create_from_string(uri));
	set_track(track);
	sp_track_add_ref(track);
	s_player_position = 0;
	s_current_uri = uri;

	// either the track is already cached and can be used or we need to wait for the metadata callback
	if (sp_track_is_loaded(track))
		load_and_play_track(session, track);
	else
		s_is_waiting_for_metadata = true;
}
Exemple #19
0
SP_LIBEXPORT(void) sp_search_release(sp_search *search) {
	int i;

	assert(search->ref_count > 0);
	search->ref_count--;

	if(search->ref_count)
		return;


	free(search->query);


	for(i = 0; i < search->num_albums; i++)
		sp_album_release(search->albums[i]);

	if(search->num_albums)
		free(search->albums);


	for(i = 0; i < search->num_artists; i++)
		sp_artist_release(search->artists[i]);

	if(search->num_artists)
		free(search->artists);


	for(i = 0; i < search->num_tracks; i++)
		sp_track_release(search->tracks[i]);

	if(search->num_tracks)
		free(search->tracks);


	if(search->did_you_mean)
		free(search->did_you_mean);


	free(search);
}
void Spotify::run()
{
    int next_timeout = 0;

    sp = spotify_ll_init(Spotify_Wrapper::sessionCallbacks());
    if (!sp) {
        return;
    }

    bool running = true;
    while (running) {
        SpotifyEvent_t ev = EVENT_NO_EVENT;
        // Get next event (or timeout)
        if (next_timeout == 0) {
            eq.get(ev);
        } else {
            if (!eq.get(ev, next_timeout)) {
                // Timed out
                ev = EVENT_TIMEOUT;
            }
        }

        switch (ev) {
        case EVENT_SPOTIFY_MAIN_TICK:
        case EVENT_TIMEOUT:
            break;

        case EVENT_LOGIN_CREDENTIALS_CHANGED:
            if (pass.isEmpty()) {
                // Try using credential blob
                sp_session_login(sp,
                                 user.toLocal8Bit().constData(),
                                 NULL,
                                 false,
                                 blob.constData());
            }
            else {
                sp_session_login(sp,
                                 user.toLocal8Bit().constData(),
                                 pass.toLocal8Bit().constData(),
                                 false,
                                 NULL);
            }
            break;

        case EVENT_LOGGED_IN:
            emit loggedIn();
            break;

        case EVENT_PLAYLIST_CONTAINER_LOADED:
            compileNewListOfPlaylists();
            break;

        case EVENT_LOGGED_OUT:
            emit loggedOut();
            break;

        case EVENT_URI_CHANGED:
            changeCurrentlyPlayingSong();
            break;

        case EVENT_PLAYLIST_IDX_CHANGED:
            changeCurrentPlaylist();
            break;

        case EVENT_METADATA_UPDATED:
            tryLoadTrack();
            break;

        case EVENT_START_PLAYBACK:
            if (!audioThread.isRunning()) {
                fprintf(stderr, "Spotify: Starting audio worker\n");

                SpotifyAudioWorker * audioWorker = new SpotifyAudioWorker(this);
                audioWorker->moveToThread(&audioThread);
                connect(&audioThread, SIGNAL(started()),
                        audioWorker, SLOT(startStreaming()));
                connect(&audioThread, SIGNAL(finished()),
                        audioWorker, SLOT(stopStreaming()));
                connect(&audioThread, SIGNAL(finished()),
                        audioWorker, SLOT(deleteLater()));
                connect(audioWorker, SIGNAL(streamingFailed()),
                        this, SIGNAL(audioStreamingFailed()));
                audioThread.start();
            }
            break;

        case EVENT_STOP_PLAYBACK:
            if (audioThread.isRunning()) {
                audioThread.quit();
                audioThread.wait();
            }
            accessMutex.lock();
            audioBuffer.close();
            readPos = 0;
            writePos = 0;
            accessMutex.unlock();
            break;

        case EVENT_END_OF_TRACK:
            sp_session_player_unload(sp);
            sp_track_release(currentTrack);
            currentURI.clear();
            nextTrack = 0;
            currentTrack = 0;
            break;

        default:
            qDebug() << "Unknown event:" << (int)ev;
            break;
        }

        do {
            sp_session_process_events(sp, &next_timeout);
        } while (next_timeout == 0);
    }
}
Exemple #21
0
void track_get_data(sp_track* track, gchar** name, gchar** artist, gchar** album, gchar** link,
                    guint* duration, int* popularity) {
    sp_artist** art = NULL;
    sp_album* alb = NULL;
    sp_link* lnk;
    int i;
    int nb_art = 0;
    const char* s;

    sp_track_add_ref(track);
    if (!sp_track_is_loaded(track)) {
        sp_track_release(track);
       return;
    }

    /* Begin loading everything */
    if (name) {
        *name = g_strdup(sp_track_name(track));
    }
    if (artist) {
        nb_art = sp_track_num_artists(track);
        art = (sp_artist**) malloc(nb_art * sizeof(sp_artist*));
        if (!art)
            g_error("Can't allocate memory.");

        for (i=0; i < nb_art; i++) {
            art[i] = sp_track_artist(track, i);
            sp_artist_add_ref(art[i]);
        }
    }
    if (album) {
        alb = sp_track_album(track);
        sp_album_add_ref(alb);
    }
    if (link) {
        GString* tmp;
        lnk = sp_link_create_from_track(track, 0);
        if (!lnk)
            g_error("Can't get URI from track.");

        tmp = g_string_sized_new(1024);
        if (sp_link_as_string(lnk, tmp->str, 1024) < 0)
            g_error("Can't render URI from link.");
        *link = tmp->str;
        g_string_free(tmp, FALSE);

        sp_link_release(lnk);
    }
    if (duration) {
        *duration = sp_track_duration(track);
    }
    if (popularity) {
        *popularity = sp_track_popularity(track);
    }

    /* Now create destination strings */
    if (artist) {
        GString* tmp = g_string_new("");
        for (i=0; i < nb_art; i++) {
            if (sp_artist_is_loaded(art[i]))
                s = sp_artist_name(art[i]);
            else
                s = "[artist not loaded]";

            if (i != 0)
                g_string_append(tmp, ", ");
            g_string_append(tmp, s);
            sp_artist_release(art[i]);
        }
        *artist = tmp->str;
        g_string_free(tmp, FALSE);
    }
    if (album) {
        if (sp_album_is_loaded(alb))
            *album = g_strdup(sp_album_name(alb));
        else
            *album = g_strdup("[album not loaded]");
        sp_album_release(alb);
    }

    sp_track_release(track);
}
Exemple #22
0
 SxTrack::~SxTrack() {
   if (m_thumb) ThumbStore::getInstance()->removeThumb(m_thumb);
   delete m_uri;
   sp_track_release(m_spTrack);
 }
Exemple #23
0
static void discard_track_tokens(struct track_tokens_t *src) {
  for (int i = 0; i < src->num_tracks; i++)
    sp_track_release(src->tracks[i]);
}
Exemple #24
0
/************************************************************
 *** Callback functions, to be called from a foreach loop ***
 ************************************************************/
void cb_queue_track_release(gpointer data, gpointer user_data) {
    sp_track_release((sp_track*) data);
}
Exemple #25
0
jobject createJPlaylist(JNIEnv *env, sp_playlist *playlist)
{
    jclass jClass;
    jobject playlistInstance;
    jmethodID jMethod;

    jClass = (*env)->FindClass(env, "jahspotify/media/Playlist");
    if (jClass == NULL)
    {
        fprintf(stderr,"jahspotify::createJPlaylist: could not load jahnotify.media.Playlist\n");
        return NULL;
    }

    playlistInstance = (*env)->AllocObject(env,jClass);
    if (!playlistInstance)
    {
        fprintf(stderr,"jahspotify::createJPlaylist: could not create instance of jahspotify.media.Playlistt\n");
        return NULL;
    }

    sp_link *playlistLink = sp_link_create_from_playlist(playlist);
    if (playlistLink)
    {
        jobject playlistJLink = createJLinkInstance(env,playlistLink);
        setObjectObjectField(env,playlistInstance,"id","Ljahspotify/media/Link;",playlistJLink);
        sp_link_release(playlistLink);
    }

    setObjectStringField(env,playlistInstance,"name",sp_playlist_name(playlist));

    sp_user *owner = sp_playlist_owner(playlist);
    if (owner)
    {
        setObjectStringField(env,playlistInstance,"author",sp_user_display_name(owner));
        sp_user_release(owner);
    }

    // Lookup the method now - saves us looking it up for each iteration of the loop
    jMethod = (*env)->GetMethodID(env,jClass,"addTrack","(Ljahspotify/media/Link;)V");

    if (jMethod == NULL)
    {
        fprintf(stderr,"jahspotify::createJPlaylist: could not load method addTrack(track) on class Playlist\n");
        return NULL;
    }

    int numTracks = sp_playlist_num_tracks(playlist);
    int trackCounter = 0;
    for (trackCounter = 0 ; trackCounter < numTracks; trackCounter++)
    {
        sp_track *track = sp_playlist_track(playlist,trackCounter);
        if (track)
        {
            sp_track_add_ref(track);
            sp_link *trackLink = sp_link_create_from_track(track, 0);
            if (trackLink)
            {
                sp_link_add_ref(trackLink);
                jobject trackJLink = createJLinkInstance(env,trackLink);
                // Add it to the playlist
                (*env)->CallVoidMethod(env,playlistInstance,jMethod,trackJLink);
                sp_link_release(trackLink);
            }
            sp_track_release(track);

        }
    }

    return playlistInstance;

}
Exemple #26
0
JNIEXPORT int JNICALL Java_jahspotify_impl_JahSpotifyImpl_playTrack (JNIEnv *env, jobject obj, jstring uri)
{
    uint8_t *nativeURI = NULL;

    fprintf(stderr,"jahspotify::Java_jahspotify_impl_JahSpotifyImpl_play: Initiating play\n");

    nativeURI = ( uint8_t * ) ( *env )->GetStringUTFChars ( env, uri, NULL );

    fprintf(stderr,"jahspotify::Java_jahspotify_impl_JahSpotifyImpl_play: uri: %s\n", nativeURI);

    if (!g_audio_initialized)
    {
        audio_init(&g_audiofifo);
        g_audio_initialized = JNI_TRUE;
    }

    // For each track, read out the info and populate all of the info in the Track instance
    sp_link *link = sp_link_create_from_string(nativeURI);
    if (link)
    {
        sp_track *t = sp_link_as_track(link);

        if (!t)
        {
            fprintf(stderr,"No track from link\n");
            return;
        }

        while (!sp_track_is_available(g_sess,t))
        {
            fprintf(stderr,"jahspotify::Java_jahspotify_impl_JahSpotifyImpl_play: Waiting for track ...\n");
            sleep(1);
        }

        if (sp_track_error(t) != SP_ERROR_OK)
        {
            fprintf(stderr,"jahspotify::Java_jahspotify_impl_JahSpotifyImpl_play: Error with track: %s\n",sp_error_message(sp_track_error(t)));

            return;
        }

        fprintf(stderr,"jahspotify::Java_jahspotify_impl_JahSpotifyImpl_play: name: %s duration: %d\n",sp_track_name(t),sp_track_duration(t));

        if (g_currenttrack == t)
        {
            fprintf(stderr,"jahspotify::Java_jahspotify_impl_JahSpotifyImpl_play: Same track!\n");
            return;
        }

        // If there is one playing, unload that now
        if (g_currenttrack && t != g_currenttrack)
        {
            // audio_fifo_flush(&g_audiofifo);

            // Unload the current track now
            sp_session_player_unload(g_sess);

            sp_link *currentTrackLink = sp_link_create_from_track(g_currenttrack,0);
            char *currentTrackLinkStr = NULL;
            if (currentTrackLink)
            {
                currentTrackLinkStr = malloc ( sizeof ( char ) * ( 100 ) );
                sp_link_as_string(currentTrackLink,currentTrackLinkStr,100);
                sp_link_release(currentTrackLink);
            }

            signalTrackEnded(currentTrackLinkStr, JNI_TRUE);

            if (currentTrackLinkStr)
            {
                free(currentTrackLinkStr);
            }

            sp_track_release(g_currenttrack);

            g_currenttrack = NULL;

        }
        else
        {
            // audio_fifo_flush(&g_audiofifo);
            // audio_close();
            // audio_init(&g_audiofifo);
        }

        sp_track_add_ref(t);

        sp_error result = sp_session_player_load(g_sess, t);

        if (sp_track_error(t) != SP_ERROR_OK)
        {
            fprintf(stderr,"jahspotify::Java_jahspotify_impl_JahSpotifyImpl_play: Issue loading track: %s\n", sp_error_message((sp_track_error(t))));
        }

        fprintf(stderr,"jahspotify::Java_jahspotify_impl_JahSpotifyImpl_play: Track loaded: %s\n", (result == SP_ERROR_OK ? "yes" : "no"));

        // Update the global reference
        g_currenttrack = t;

        // Start playing the next track
        sp_session_player_play(g_sess, 1);

        fprintf(stderr,"jahspotify::Java_jahspotify_impl_JahSpotifyImpl_play: Playing track\n");

        sp_link_release(link);

        signalTrackStarted(nativeURI);

        return 0;
    }
    else
    {
        fprintf(stderr,"jahspotify::Java_jahspotify_impl_JahSpotifyImpl_play: Unable to load link at this point\n");
    }

    return 1;

}
Exemple #27
0
	void Track::Unload()
	{
		sp_track_release( m_pTrack );
		m_pTrack = NULL;
	}
Exemple #28
0
Track::~Track()
{
  if(this->isValid())
    sp_track_release(m_spTrack);
}