mirror of
https://github.com/kokarare1212/librespot-python.git
synced 2024-09-17 10:20:44 +02:00
99 lines
3.6 KiB
Python
99 lines
3.6 KiB
Python
from librespot.core import Session
|
|
from librespot.metadata import TrackId
|
|
from librespot.player.codecs import AudioQuality, VorbisOnlyAudioQuality
|
|
import logging
|
|
import os
|
|
import platform
|
|
import requests
|
|
import subprocess
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
|
|
def streaming(session: Session, uri: str, quality: AudioQuality):
|
|
stream = session.content_feeder().load(TrackId.from_uri(uri), VorbisOnlyAudioQuality(quality), False, None)
|
|
process = subprocess.Popen(
|
|
["ffplay", "-autoexit", "-nodisp", "-loglevel", "quiet", "-"],
|
|
stdin=subprocess.PIPE)
|
|
while True:
|
|
i = stream.input_stream.stream().read()
|
|
if i == -1:
|
|
process.kill()
|
|
break
|
|
process.stdin.write(bytes([i]))
|
|
|
|
|
|
def main():
|
|
session = Session.Builder().stored().create()
|
|
|
|
quality: AudioQuality = AudioQuality.AudioQuality.VERY_HIGH
|
|
running: bool = True
|
|
while running:
|
|
try:
|
|
command = input("Librespot >>> ")
|
|
argv = command.split(" ")
|
|
|
|
if argv[0] == "clear" or argv[0] == "cls":
|
|
if platform.system() == "Windows":
|
|
os.system("cls")
|
|
else:
|
|
os.system("clear")
|
|
continue
|
|
elif argv[0] == "play" or argv[0] == "p":
|
|
try:
|
|
track = argv[1]
|
|
except IndexError:
|
|
continue
|
|
|
|
streaming(session, track, quality)
|
|
continue
|
|
elif argv[0] == "search" or argv[0] == "s":
|
|
try:
|
|
keyword = argv[1]
|
|
except IndexError:
|
|
continue
|
|
access_token = session.tokens().get("playlist-read")
|
|
resp = requests.get("https://api.spotify.com/v1/search?type=track&limit=5&q={}".format(keyword), headers={
|
|
"Authorization": "Bearer {}".format(access_token),
|
|
"Accept-Language": "ja"
|
|
})
|
|
obj = resp.json()
|
|
i = 1
|
|
for track in obj["tracks"]["items"]:
|
|
print("{}, {} - {}".format(i, track["name"], ",".join([artist["name"] for artist in track["artists"]])))
|
|
i += 1
|
|
user_str = input("SELECT (1~5) | Librespot >>> ")
|
|
try:
|
|
selected_number = int(user_str)
|
|
except ValueError:
|
|
continue
|
|
if selected_number not in range(1, 6):
|
|
continue
|
|
streaming(session, obj["tracks"]["items"][selected_number - 1]["uri"], quality)
|
|
elif argv[0] == "quality":
|
|
try:
|
|
new_quality = argv[1]
|
|
except IndexError:
|
|
print("Current Quality: {}".format(quality))
|
|
continue
|
|
if new_quality.lower() == "very_high":
|
|
quality = AudioQuality.AudioQuality.VERY_HIGH
|
|
elif new_quality.lower() == "high":
|
|
quality = AudioQuality.AudioQuality.HIGH
|
|
elif new_quality.lower() == "normal":
|
|
quality = AudioQuality.AudioQuality.NORMAL
|
|
else:
|
|
print("Unsupported Quality: {}".format(new_quality))
|
|
continue
|
|
elif argv[0] == "quit" or argv[0] == "q" or argv[0] == "exit":
|
|
running = False
|
|
session.close()
|
|
continue
|
|
except KeyboardInterrupt:
|
|
running = False
|
|
session.close()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|