Esempio n. 1
0
void _hardware_event(int event) {
	switch(event) {
		case HE_FREQ_UP: tuner_tune_by(g_tuner, 10); tuner_debug(); break;
		case HE_FREQ_DOWN: tuner_tune_by(g_tuner, -10); tuner_debug(); break;
		case HE_CHANNEL1: tuner_goto(g_tuner, 0); tuner_debug(); break;
		case HE_CHANNEL2: tuner_goto(g_tuner, 1); tuner_debug(); break;
		case HE_CHANNEL3: tuner_goto(g_tuner, 2); tuner_debug(); break;
		case HE_CHANNEL4: tuner_goto(g_tuner, 3); tuner_debug(); break;
		case HE_CHANNEL5: tuner_goto(g_tuner, 4); tuner_debug(); break;
		case HE_PLAY_PAUSE:
			if (g_is_playing) {
				printf("Pause playback\n");
				sp_session_player_play(g_sess, 0);
				g_is_playing = 0;
			} else {
				printf("Resume playback\n");
				sp_session_player_play(g_sess, 1);
				g_is_playing = 1;
			}
			notify_main_thread(g_sess);
			break;
		case HE_SKIP_NEXT:
			hardware_banner("Skip", 100);
			track_ended(1);
			notify_main_thread(g_sess);
			break;
	}
}
Esempio n. 2
0
void seek(list<int> int_params, list<string> string_params, sp_session *session, sp_track *track) {
	int pos_ms = int_params.front();

	if (s_is_playing)
		sp_session_player_play(session, false);
	sp_session_player_seek(session, pos_ms);
	if (s_is_playing)
		sp_session_player_play(session, true);
	s_player_position = pos_ms;
}
Esempio n. 3
0
void seek(list<int> int_params, list<string> string_params, sp_session *session, sp_track *track) {
	float position = (float)int_params.front() / 100.0;
	int pos_ms = (int) ((float) sp_track_duration(track) * position);

	if (s_is_playing)
		sp_session_player_play(session, false);
	sp_session_player_seek(session, pos_ms);
	if (s_is_playing)
		sp_session_player_play(session, true);
	s_player_position = pos_ms / 1000;
}
Esempio n. 4
0
JNIEXPORT int JNICALL Java_jahspotify_impl_JahSpotifyImpl_resume (JNIEnv *env, jobject obj)
{
    if (g_currenttrack)
    {
        sp_session_player_play(g_sess,1);
    }
}
void AudioHTTPServer::startStreamingResponse( QxtWebRequestEvent* event, sp_track* track )
{
    // yay we gots a track
//    qDebug() << QThread::currentThreadId() << "We got a track!" << sp_track_name( track ) << sp_artist_name( sp_track_artist( track, 0 ) ) << sp_track_duration( track );
    uint duration = sp_track_duration( track );

    sp_error err = sp_session_player_load( SpotifySession::getInstance()->Session(), track );
    if( err != SP_ERROR_OK ) {
        qWarning() << QThread::currentThreadId() << "Failed to start track from spotify :(" << sp_error_message( err );
        sendErrorResponse( event );
        return;
    }

//    qDebug() << QThread::currentThreadId() << "Starting to play!";
    sp_session_player_play( SpotifySession::getInstance()->Session(), true );
    SpotifySession::getInstance()->Playback()->startPlaying();

    qDebug() << "Getting iodevice...";
    spotifyiodev_ptr iodev = SpotifySession::getInstance()->Playback()->getIODeviceForNewTrack( duration );
//    qDebug()  << QThread::currentThreadId() << "Got iodevice to send:" << iodev << iodev.isNull() << iodev->isSequential() << iodev->isReadable();
    QxtWebPageEvent* wpe = new QxtWebPageEvent( event->sessionID, event->requestID, iodev );
    wpe->streaming = true;
    wpe->contentType = "audio/basic";
    postEvent( wpe );
}
Esempio n. 6
0
 bool Codec::loadPlayer() {
   Logger::printOut("load player");
   if (!m_isPlayerLoaded) {
     //do we have a track at all?
     if (m_currentTrack) {
       CStdString name;
       Logger::printOut("load player 2");
       if (sp_track_is_loaded(m_currentTrack)) {
         sp_error error = sp_session_player_load(getSession(), m_currentTrack);
         CStdString message;
         Logger::printOut("load player 3");
         message.Format("%s", sp_error_message(error));
         Logger::printOut(message);
         Logger::printOut("load player 4");
         if (SP_ERROR_OK == error) {
           sp_session_player_play(getSession(), true);
           m_isPlayerLoaded = true;
           Logger::printOut("load player 5");
           return true;
         }
       }
     } else
       return false;
   }
   return true;
 }
Esempio n. 7
0
// Start playback.
void sess_play(sp_track *t)
{
  if (g_session.state != SESS_ONLINE) {
    log_append("Not connected");
    return;
  }

  if (!t || !sp_track_is_available(t) || !sp_track_is_loaded(t)) {
    log_append("Track not available");
    return;
  }

  sess_stop();

  g_session.current_track = t;

  log_append("Playing \"%s\"...", sp_track_name(t));

  sp_error err = sp_session_player_load(g_session.spotify, t);
  if (err != SP_ERROR_OK)
    panic("sp_session_player_load() failed: %s", sp_error_message(err));

  err = sp_session_player_play(g_session.spotify, true);
  if (err != SP_ERROR_OK)
    panic("sp_session_player_play() failed: %s", sp_error_message(err));

  g_session.playing = true;

  // Redraw track info and progress.
  ui_dirty(UI_TRACKINFO);
  ui_dirty(UI_TRACKPROGRESS);
  ui_update_post(0);
}
Esempio n. 8
0
File: main.c Progetto: delrtye/Spot
void play(sp_session *session, sp_track *track)
{
	sp_error error = sp_session_player_load(session, track);
	if (error != SP_ERROR_OK) {
		fprintf(stderr, "Error: %s\n", sp_error_message(error));
		exit(1);
	}

	sp_artist *artist = sp_track_artist(track, 0);
	sp_album *album = sp_track_album(track);
	
	int secs = sp_track_duration(track) / 1000;
	int mins = 0;
	while (secs >= 60) {
		mins++;
		secs -= 60;
	}

	printf("\n");
	printf("       Track: %s\n", sp_track_name(track));
	printf("      Artist: %s\n", sp_artist_name(artist));
	printf("       Album: %s\n", sp_album_name(album));
	printf("        Year: %d\n", sp_album_year(album));
	printf("  Popularity: %d / 100\n", sp_track_popularity(track));
	printf("    Duration: %02d:%02d\n", mins, secs);
	printf("\n");
	printf("Playing...\n");

	sp_session_player_play(session, 1);
}
Esempio n. 9
0
/**
 * This callback is called when an attempt to login has succeeded or failed.
 *
 * @sa sp_session_callbacks#logged_in
 */
static void logged_in(sp_session *sess, sp_error error)
{
	sp_link *link;

	if (SP_ERROR_OK != error) {
		fprintf(stderr, "Login failed: %s\n",
			sp_error_message(error));
		exit(2);
	}

	printf("Loading track\n");
	link = sp_link_create_from_string("spotify:track:5W3cjX2J3tjhG8zb6u0qHn");
        sp_track_add_ref(g_currenttrack = sp_link_as_track(link));
	sp_link_release(link);

	if (sp_track_error(g_currenttrack) == SP_ERROR_OK) {
		printf("Now playing \"%s\"...\n", sp_track_name(g_currenttrack));
		fflush(stdout);
		
		sp_session_player_load(g_sess, g_currenttrack);
		sp_session_player_play(g_sess, 1);
        }

	/* Track not loaded? Then we need to wait for the metadata to
           load before we can start playback (see below) */
}
Esempio n. 10
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;
}
Esempio n. 11
0
static void on_end_of_track(sp_session *session)
{
    debug("callback: on end of track");
    audio_fifo_flush(&g_audiofifo);
    sp_session_player_play(session, 0);
    notify_main_thread(g_session);
    queue_go_next(g_session);
}
Esempio n. 12
0
void pause(list<int> int_params, list<string> string_params, sp_session *session, sp_track *track) {
	if (s_is_playing) {
		s_is_playing = false;
		sp_session_player_play(session, false);
		//mute(opensl);
		on_player_pause(int_params, string_params, session, track);
	}
}
Esempio n. 13
0
void session_play(gboolean play) {
    sp_session_player_play(g_session, play);

    if (!play)
        /* Force pause in the audio plugin */
        g_audio_delivery_func(NULL, NULL, 0);

    cb_notify_main_thread(NULL);
}
Esempio n. 14
0
File: main.c Progetto: delrtye/Spot
static void on_end_of_track(sp_session *session)
{
	debug("callback: on_end_of_track");
	audio_fifo_flush(&g_audiofifo);
	sp_session_player_play(session, 0);
	sp_session_player_unload(session);
	printf("Done.\n\n");
	g_playing = 0;
}
Esempio n. 15
0
// ----------------------------------------------------------------------------
//
void SpotifyEngine::_pause( )
{
    if ( !isTrackPaused() ) {
        m_audio_out->setPaused( true );
        sp_session_player_play( m_spotify_session, false );

        m_track_timer.pause();
    }
}
Esempio n. 16
0
static PyObject *Session_play(Session *self, PyObject *args) {
    int play;
    sp_error err;
    if(!PyArg_ParseTuple(args, "i", &play))
        return NULL;
    Py_BEGIN_ALLOW_THREADS
    err = sp_session_player_play(self->_session, play);
    Py_END_ALLOW_THREADS
    return handle_error(err);
}
Esempio n. 17
0
void QSpotifySession::beginPlayBack(bool notifyThread)
{
    qDebug() << "QSpotifySession::beginPlayBack";
    sp_session_player_play(m_sp_session, true);
    m_isPlaying = true;
    emit isPlayingChanged();

    if(notifyThread)
        QCoreApplication::postEvent(g_audioWorker, new QEvent(QEvent::Type(ResumeEventType)));
}
Esempio n. 18
0
Spotify::Error Spotify::Session::pause()
{
    Spotify::Error error;
    // Is playing:
    if( m_playing )
    {
        error = sp_session_player_play( m_session, false );
        if( !error.isError() )
            m_playing = false;
    }
    // Is paused:
    else if( !m_playing && m_currentTrack->trackPointer() && sp_track_is_loaded( m_currentTrack->trackPointer() ) )
    {
        error = sp_session_player_play( m_session, true );
        if( !error.isError() )
            m_playing = true;
    }
    return error;
}
Esempio n. 19
0
// ----------------------------------------------------------------------------
//
void SpotifyEngine::_resume( )
{
    if ( isTrackPaused() ) {
        sp_session_player_play( m_spotify_session, true );

        if ( m_audio_out->isPaused() )
            m_audio_out->setPaused( false );

        m_track_timer.resume();
    }
}
Esempio n. 20
0
static PyObject *
Session_play(Session * self, PyObject *args)
{
    int play;

    if (!PyArg_ParseTuple(args, "i", &play))
        return NULL;
    Py_BEGIN_ALLOW_THREADS;
    sp_session_player_play(self->_session, play);
    Py_END_ALLOW_THREADS;
    Py_RETURN_NONE;
}
Esempio n. 21
0
void command_pause(sp_session *session, const struct command * const command)
{
	sp_session_player_play(session, is_playing =! is_playing);
	if(is_playing)
	{
		sock_send_str(command->sockfd, "Started playback.\n");
	}
	else
	{
		sock_send_str(command->sockfd, "Paused playback.\n");
	}
}
Esempio n. 22
0
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);
}
Esempio n. 23
0
void QSpotifySession::pause(bool notifyThread)
{
    qDebug() << "QSpotifySession::pause";
    if (!m_isPlaying)
        return;

    sp_session_player_play(m_sp_session, false);
    m_isPlaying = false;
    emit isPlayingChanged();

    if(notifyThread)
        QCoreApplication::postEvent(g_audioWorker, new QEvent(QEvent::Type(SuspendEventType)));
}
Esempio n. 24
0
/**
 * Callback called when libspotify has new metadata available
 *
 * @sa sp_session_callbacks#metadata_updated
 */
static void metadata_updated(sp_session *sess)
{
	puts("Metadata updated, trying to start playback");

	if (sp_track_error(g_currenttrack) != SP_ERROR_OK)
		return;

	printf("Now playing \"%s\"...\n", sp_track_name(g_currenttrack));
	fflush(stdout);

	sp_session_player_load(g_sess, g_currenttrack);
	sp_session_player_play(g_sess, 1);
}
Esempio n. 25
0
Spotify::Error Spotify::Session::stop()
{
    Spotify::Error error;
    if( m_playing )
    {
        error = sp_session_player_play( m_session, false );
        if( !error.isError() )
        {
            sp_session_player_unload( m_session );
            m_playing = false;
        }
    }
    return error;
}
Esempio n. 26
0
static PyObject *
Session_play(PyObject *self, PyObject *args)
{
    int play;

    /* TODO: Expect bool or something that can be coerced into one? */
    if (!PyArg_ParseTuple(args, "i", &play))
        return NULL;

    Py_BEGIN_ALLOW_THREADS;
    sp_session_player_play(Session_SP_SESSION(self), play);
    Py_END_ALLOW_THREADS;

    Py_RETURN_NONE;
}
Esempio n. 27
0
Spotify::Error Spotify::Session::play( Spotify::Track* track )
{
    m_playing = false;
    m_currentTrack = track;
    Spotify::Error error;

    // Clean up
    audio_fifo_flush(&m_audiofifo);
    sp_session_player_unload( m_session );

    // Disregard tracks that are not available:
    if( !track->isAvailable() )
    {
        qDebug() << "ERROR: Asked to play back a unavailable track..";
        return Spotify::Error( SP_ERROR_TRACK_NOT_PLAYABLE );
    }

    // Load track:
    error = load( track );
    if( error.isError() )
    {
        qDebug() << "ERROR: Could not load track: " << error.toString();
        return error;
    }

    // Disregard unloaded og unavailable tracks:
    if( !track->isLoaded() )
    {
        qDebug() << "ERROR: Asked to play back a unloaded track..";
        return Spotify::Error( SP_ERROR_RESOURCE_NOT_LOADED );
    }

    // Play track:
    error = sp_session_player_play( m_session, true );
    if( !error.isError() )
    {
        m_trackPos = 0;
        m_playing = true;
    }
    else
    {
        qDebug() << "ERROR: Could not play track: " << error.toString();
        return error;
    }
    return Spotify::Error( SP_ERROR_OK );
}
Esempio n. 28
0
void session_unload() {
    session_callback_data scbd;

    g_debug("Unloading track.");

    /* First call callbacks */
    scbd.type = SPOP_SESSION_UNLOAD;
    scbd.data = NULL;
    g_list_foreach(g_session_callbacks, session_call_callback, &scbd);

    /* Then really unload */
    sp_session_player_play(g_session, FALSE);
    g_audio_delivery_func(NULL, NULL, 0);
    sp_session_player_unload(g_session);
    cb_notify_main_thread(NULL);
    g_audio_samples = 0;
    g_audio_time = 0;
}
Esempio n. 29
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;
  }
Esempio n. 30
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;
    }



}