Added downloading from spotify.

TODO: Two playing options - old stream and new download
This commit is contained in:
BarsTiger
2022-12-12 23:04:17 +02:00
parent 9d2bc0aeb6
commit 9dae35a537
15 changed files with 351 additions and 78 deletions

View File

@@ -1,30 +0,0 @@
import pydub
import validators
from urllib.request import urlopen
from io import BytesIO
from rich import print
import pafy
import hashlib
import os
def get_silenced_media(original: str) -> str | None:
if not os.path.isdir('temp'):
os.mkdir('temp')
try:
name = original
namehash = 'temp\\' + hashlib.md5(name.encode('utf-8')).hexdigest()
if not os.path.isfile(namehash):
if validators.url(original):
if 'youtu' in original:
original = pafy.new(original).getbestaudio().url
original = BytesIO(urlopen(original).read())
(pydub.AudioSegment.from_file(original) + pydub.AudioSegment.silent(1500))\
.export(namehash, format='mp3')
return namehash
except Exception as e:
print(e)
return None

42
modules/player/convert.py Normal file
View File

@@ -0,0 +1,42 @@
import pydub
import validators
from io import BytesIO
from rich import print
import pafy
import hashlib
import os
from modules.spotify.spotify_dl import Spotify
from gui.modules.core.popup import popup
import requests
def get_raw_link(url):
if validators.url(url):
if 'spotify' in url:
url = Spotify().get_youtube_url(url)
if 'youtu' in url:
url = pafy.new(url).audiostreams[0].url
else:
url = None
return url
def get_silenced_media(original: str) -> str | None:
if not os.path.isdir('temp'):
os.mkdir('temp')
try:
namehash = 'temp\\' + hashlib.md5(original.encode('utf-8')).hexdigest()
if not os.path.isfile(original):
if validators.url(original):
original = BytesIO(requests.get(get_raw_link(original)).content)
(pydub.AudioSegment.from_file(original) + pydub.AudioSegment.silent(1500))\
.export(namehash, format='mp3')
return namehash
except Exception as e:
raise e
print(e)
return None

View File

@@ -1,7 +1,7 @@
import vlc
from gui.gui import Ui_MainWindow
from gui.modules.core import popup
from modules.player.add_second import get_silenced_media
from modules.player.convert import get_silenced_media
def get_instance() -> vlc.Instance:
@@ -24,14 +24,16 @@ def get_devices(mediaplayer: vlc.MediaPlayer) -> dict:
class Player(object):
def __init__(self):
def __init__(self, ui: Ui_MainWindow):
self.instance_preview = get_instance()
self.instance_out = get_instance()
self.mediaplayer_preview = get_player(self.instance_preview)
self.mediaplayer_preview.audio_output_device_set(None, get_devices(self.mediaplayer_preview)['Default'])
self.mediaplayer_preview.audio_output_device_set(None, get_devices(self.mediaplayer_preview)[
ui.preview_device_play_box.currentText()
])
self.mediaplayer_out = get_player(self.instance_out)
self.mediaplayer_out.audio_output_device_set(None, get_devices(
self.mediaplayer_out)['CABLE Input (VB-Audio Virtual Cable)'])
self.mediaplayer_out)[ui.output_device_play_box.currentText()])
def set_media(self, media: str) -> None:
if get_silenced_media(media):
@@ -77,5 +79,10 @@ class Player(object):
self.mediaplayer_preview.set_position(pos)
self.mediaplayer_out.set_position(pos)
def update_devices(self):
pass
def update_devices(self, ui: Ui_MainWindow):
self.mediaplayer_preview.audio_output_device_set(None, get_devices(self.mediaplayer_preview)[
ui.preview_device_play_box.currentText()
])
self.mediaplayer_out.audio_output_device_set(None, get_devices(self.mediaplayer_out)[
ui.output_device_play_box.currentText()
])