-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsound.py
84 lines (74 loc) · 2.25 KB
/
sound.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import os
import sound_lib
from sound_lib import stream
from sound_lib import output as o
import globals
out = o.Output()
handle = None
import re
import youtube_dl
ydl=None
player=None
title=None
def ydl_url(url):
global title
global ydl
if ydl is None:
ydl = youtube_dl.YoutubeDL(params=dict(outtmpl = u"%(title)s [%(extractor)s '%(id)s].%(ext)s", quiet=True, ))
ydl.add_default_info_extractors()
info = ydl.extract_info(url, download=False, process=False)
title=info.get('title',None)
uploader=info.get('uploader',None)
if uploader!=None:
if title==None:
title=uploader
else:
title+=" ("+uploader+")"
return info['formats'][-1]['url']
def return_url(url):
return url
audio_matchlist = [{"match": r"https://sndup.net/[a-zA-Z0-9]+/[ad]$", "func":return_url},
{"match": r"^http:\/\/\S+(\/\S+)*(\/)?\.(mp3|m4a|ogg|opus|flac)$", "func":return_url},
{"match": r"^https:\/\/\S+(\/\S+)*(\/)?\.(mp3|m4a|ogg|opus|flac)$", "func":return_url},
{"match": r"^http:\/\/\S+:[+-]?[1-9]\d*|0(\/\S+)*(\/)?$", "func":return_url},
{"match": r"^https:\/\/\S+:[+-]?[1-9]\d*|0(\/\S+)*(\/)?$", "func":return_url},
{"match": r"https?://twitter.com/.+/status/.+/video/.+", "func":ydl_url},
# {"match": r"https?://vm.tiktok.com/.+", "func":ydl_url},
{"match": r"https?://soundcloud.com/.+", "func":ydl_url},
{"match": r"https?://t.co/.", "func":ydl_url},
{"match": r"^(?:https?:\/\/)?(?:m\.|www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$", "func":ydl_url}
]
def get_audio_urls(urls):
result = []
for u in urls:
for service in audio_matchlist:
if re.match(service['match'], u.lower()) != None:
result.append({"url":u, "func":service['func']})
return result
def play_url(url):
global player
if player!=None and player.is_playing==True:
stop()
return
player = stream.URLStream(url)
player.volume = globals.prefs.volume
player.play()
return True
def stop():
global player
if player == None: return False
player.stop()
player.free()
player = None
return True
def seek(step):
global player
pos=player.bytes_to_seconds(player.get_position())
pos+=step
pos=player.set_position(player.seconds_to_bytes(pos))
def playpause():
global player
if player.is_playing == True:
player.pause()
else:
player.play()