Esempio n. 1
0
    def login(self):
        # Assuming a spotify_appkey.key in the current dir
        self.session = spotify.Session()

        # Process events in the background
        self._loop = spotify.EventLoop(self.session)
        self._loop.start()

        # Connect an audio sink
        if sys.platform == "darwin":
            audio = spotify.PortAudioSink(self.session)
        else:
            audio = spotify.AlsaSink(self.session)

        # Register event listeners
        self.session.on(spotify.SessionEvent.CONNECTION_STATE_UPDATED,
                        self._on_connection_state_updated)
        self.session.on(spotify.SessionEvent.END_OF_TRACK,
                        self._on_end_of_track)

        # Assuming a previous login with remember_me=True and a proper logout
        if self._settings.SPOTIFY_USERNAME == None or self._settings.SPOTIFY_PASSWORD == None:
            raise StandardError("No username/password")
        self.session.login(self._settings.SPOTIFY_USERNAME,
                           self._settings.SPOTIFY_PASSWORD)

        self._logged_in.wait()
        return self.session
Esempio n. 2
0
 def __init__(self):
     self.logger = logging.getLogger(__name__)
     self.session = spotify.Session()
     self.loop = spotify.EventLoop(self.session)
     self.audio = spotify.PortAudioSink(self.session)
     self.current_state = SpotifyService.STOPPED
     self.loop.start()
Esempio n. 3
0
    def account_login(self, source, username, passwd):
        if source == 'spotify':
            if self.session.connection.state is spotify.ConnectionState.LOGGED_IN:
                return

            # Process events in the background
            loop = spotify.EventLoop(self.session)
            loop.start()
            # Connect an audio sink
            try:
                audio = spotify.PortAudioSink(self.session)
            except:
                audio = spotify.AlsaSink(self.session)
            # Events for coordination
            self.logged_in = threading.Event()
            self.end_of_track = threading.Event()
            # Register event listeners
            self.session.on(spotify.SessionEvent.CONNECTION_STATE_UPDATED,
                            self.on_connection_state_updated)
            self.session.on(spotify.SessionEvent.END_OF_TRACK,
                            self.on_end_of_track)
            self.session.login(username, passwd)
            # Wait until flag is set true
            self.logged_in.wait()
            print self.session.user
            # self.session.inbox.load()
            logger.info("User %s successfully logged in.", self.session.user)
            self.logged_in.wait()
    def _set_audio_sink(self):
        """Sets audio sink for device."""

        # Patch the Spotify Port Audio Sink with this current Port Audio Sink
        spotify.PortAudioSink = MyPortAudio
        self._audio = spotify.PortAudioSink(self._session)

        print("###########################################")
        print("Audio sink set")
        print("###########################################")
Esempio n. 5
0
	def __init__(self):
		self.is_logged_in = False

		 # We assume a spotify_appkey.key is in the current directory
		self.session = spotify.Session()
		# Process Spotify events automatically in the background
		loop = spotify.EventLoop(self.session)
		loop.start()

		# Connect to the AlsaAudio Sink, which works best for the Pi if you're on Linux,
		# but otherwise connect to the more versatile PortAudio sink
		if platform.system() == "Linux":
			audio = spotify.AlsaSink(self.session)
		else:
			audio = spotify.PortAudioSink(self.session)
Esempio n. 6
0
    def __init__(self, uname, pw, sink):
        self.userName = uname
        self.playlists = []
        self.queue = deque()

        self.loggedIn = False
        self.status = "stopped"
        self.loggedInEvent = threading.Event()

        self.session = spotify.Session()

        if (sink == "alsa"):
            self.player = spotify.AlsaSink(self.session)
        elif (sink == "port"):
            self.player = spotify.PortAudioSink(self.session)
        else:
            print "unrecognized sink option: " + sink
            print "playback unavailable"

        self.loop = spotify.EventLoop(self.session)
        self.loop.start()

        self.session.on(
            spotify.SessionEvent.CONNECTION_STATE_UPDATED,
            self.connectionListener
        )

        self.session.on(
            spotify.SessionEvent.END_OF_TRACK,
            self.playNextTrack
        )

        self.session.login(uname, pw)

        while not self.loggedInEvent.wait(0.1):
            self.session.process_events()

        self.loggedIn = True
Esempio n. 7
0
    def __init__(self):
        self.end_of_track = threading.Event()
        self.logged_in = threading.Event()
        self.logged_out = threading.Event()
        self.logged_out.set()

        log.debug("Spawning spotify.Session()")
        self.session = spotify.Session()
        self.session.on(spotify.SessionEvent.CONNECTION_STATE_UPDATED,
                        self.on_connection_state_changed)
        self.session.on(spotify.SessionEvent.END_OF_TRACK,
                        self.on_end_of_track)
        self.tracks = []

        myPlatform = platform.system()

        log.debug("Detecting platform")
        try:
            if myPlatform == 'Linux':
                log.info(
                    "{0} platform detected; using ALSA".format(myPlatform))
                self.audio_driver = spotify.AlsaSink(self.session)
            else:
                log.info("{0} platform detected; using PortAudio".format(
                    myPlatform))
                self.audio_driver = spotify.PortAudioSink(self.session)
        except ImportError as e:
            log.warning(
                'No audio sink found; audio playback unavailable. Exception: {0}'
                .format(e.args))

        # log.debug("spotify.Config()")
        # self.config = spotify.Config()
        # self.config.user_agent = 'Alarm Clock'

        log.debug("Spotify event loop")
        self.event_loop = spotify.EventLoop(self.session)
        self.event_loop.start()
Esempio n. 8
0
    def __init__(self):
        # Spotify Session
        self.session = spotify.Session()

        # Queue to hold songs to be played
        self.SongQueue = SongQueue()

        # Event Blockers
        # self.logged_in_state_changed = Event()
        # self.play_state_changed = Event()
        self.is_logged_in = False

        # Spotify Event Loop
        self.loop = spotify.EventLoop(self.session)
        self.loop.start()

        # Set callbacks
        self.set_callbacks()

        # Audio player
        self.audio = spotify.PortAudioSink(self.session)

        # List of events to handle during run loop
        self.events = []
Esempio n. 9
0
 def setUp(self):
     self.session = mock.Mock()
     self.session.num_listeners.return_value = 0
     self.pyaudio = mock.Mock()
     with mock.patch.dict('sys.modules', {'pyaudio': self.pyaudio}):
         self.sink = spotify.PortAudioSink(self.session)