Two streaming options
This commit is contained in:
@@ -12,3 +12,4 @@ class ConfigModel:
|
||||
in_micro: str
|
||||
out_micro: str
|
||||
restream: bool
|
||||
direct_stream: bool
|
||||
|
||||
@@ -13,7 +13,8 @@ class Config:
|
||||
"preview_device": str(),
|
||||
"in_micro": str(),
|
||||
"out_micro": str(),
|
||||
"restream": False
|
||||
"restream": False,
|
||||
"direct_stream": True
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
import pydub
|
||||
import validators
|
||||
from io import BytesIO
|
||||
from modules.config import Config
|
||||
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
|
||||
|
||||
|
||||
@@ -15,28 +14,40 @@ def get_raw_link(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
|
||||
url = pafy.new(url).getbestaudio().url
|
||||
|
||||
return url
|
||||
|
||||
|
||||
def get_silenced_media(original: str) -> str | None:
|
||||
def get_ready_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 os.path.isfile(namehash):
|
||||
return namehash
|
||||
|
||||
if not os.path.isfile(original):
|
||||
if validators.url(original):
|
||||
original = BytesIO(requests.get(get_raw_link(original)).content)
|
||||
if not Config.get().direct_stream:
|
||||
with open('tempsound', 'wb') as f:
|
||||
f.write(requests.get(get_raw_link(original)).content)
|
||||
original = 'tempsound'
|
||||
else:
|
||||
original = get_raw_link(original)
|
||||
|
||||
if Config.get().direct_stream:
|
||||
return original
|
||||
|
||||
(pydub.AudioSegment.from_file(original) + pydub.AudioSegment.silent(1500))\
|
||||
.export(namehash, format='mp3')
|
||||
|
||||
if os.path.isfile('tempsound'):
|
||||
os.remove('tempsound')
|
||||
|
||||
return namehash
|
||||
|
||||
except Exception as e:
|
||||
raise e
|
||||
print(e)
|
||||
return None
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import vlc
|
||||
from gui.gui import Ui_MainWindow
|
||||
from gui.modules.core import popup
|
||||
from modules.player.convert import get_silenced_media
|
||||
from modules.player.convert import get_ready_media
|
||||
|
||||
|
||||
def get_instance() -> vlc.Instance:
|
||||
@@ -36,9 +36,9 @@ class Player(object):
|
||||
self.mediaplayer_out)[ui.output_device_play_box.currentText()])
|
||||
|
||||
def set_media(self, media: str) -> None:
|
||||
if get_silenced_media(media):
|
||||
self.mediaplayer_preview.set_media(self.instance_preview.media_new(get_silenced_media(media)))
|
||||
self.mediaplayer_out.set_media(self.instance_out.media_new(get_silenced_media(media)))
|
||||
if get_ready_media(media):
|
||||
self.mediaplayer_preview.set_media(self.instance_preview.media_new(get_ready_media(media)))
|
||||
self.mediaplayer_out.set_media(self.instance_out.media_new(get_ready_media(media)))
|
||||
else:
|
||||
popup.popup('Error', 'Error playing this media. \nIf it uses link, check is this link valid.')
|
||||
self.mediaplayer_preview.set_media(None)
|
||||
|
||||
Reference in New Issue
Block a user