-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathaudio_raffle.py
More file actions
118 lines (92 loc) · 3.05 KB
/
audio_raffle.py
File metadata and controls
118 lines (92 loc) · 3.05 KB
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import os
from os.path import basename
import sys
import re
import cmd
import random
from pathlib import Path
from mutagen import File as MutaFile
from lib.print_utils import wr
# Source directories for your video files
DATA_DIRS = [ 'put all of your', 'audio file paths', 'in this list' ]
# Path to your media player executable
MEDIA_PLAYER = 'C:\\Program Files\\change\\this\\path\\to\\your\\MediaPlayer.exe'
def is_audio(f,
audio_formats=('.mp3', '.m4a', '.ogg', '.wma', '.flac', '.wav')):
return f.endswith(audio_formats)
def genres(path_list):
genre_list = []
for folder in path_list:
for root, directory, files in os.walk(folder):
for fname in files:
fpath = root + '\\' + fname
if is_audio(fpath):
# I haven't figured out the most
# semantic way to read genre tags so
# for now, this works by grabbing it
# from the TCON property
if MutaFile(fpath) and MutaFile(fpath).tags.get('TCON'):
genre = str( MutaFile(fpath).tags.get('TCON') ).lower()
if genre not in genre_list:
genre_list.append(genre)
# common construct for removing duplicate list values
return genre_list
def get_genre(file):
if MutaFile(file) and MutaFile(file).tags.get('TCON'):
file_meta_genre = str( MutaFile(file).tags.get('TCON') ).lower()
return file_meta_genre
def generate_dir_list(data_path_list):
dir_list = []
for root_folder in data_path_list:
dir_list += [
os.path.join(root_folder, d)
for d in os.listdir(root_folder)
if Path(root_folder+d).is_dir()
]
return dir_list
def generate_select_list(data_path_list):
file_list = []
for root_folder in data_path_list:
for root, directory, files in os.walk(root_folder):
for fname in files:
fpath = root + '\\' + fname
if is_audio(fpath):
file_list.append(fpath)
return file_list
def choose_album(path_list, series_top_dir):
while True:
chosen_folder = random.choice(generate_dir_list(path_list))
if series_top_dir in chosen_folder:
break
series_list = []
for root, directory, files in os.walk(chosen_folder):
for fname in files:
fpath = root + '\\' + fname
if is_audio(fpath):
series_list.append(fpath)
return series_list
try:
# TODO: ADD SUPPORT FOR PLAYING A RANDOM ALBUM
# if '--album' in sys.argv:
# series = choose_album()
# sname = series[-1].split('\\')
# sname = sname[sname.index('tv_shows') + 1].split('_')
# sname = ' '.join(sname).title()
# print('\nplaying {}\n'.format(sname))
# arg_list = [wr(MEDIA_PLAYER, '"')] + [wr(f, '"') for f in series]
# os.execv(MEDIA_PLAYER, arg_list)
if any(genre in sys.argv for genre in genres(DATA_DIRS)):
choice_list = [
song for song in generate_select_list(DATA_DIRS)
if get_genre(song) in sys.argv
]
s = random.choice(choice_list)
else:
# Chooses one random video file
s = random.choice(generate_select_list(DATA_DIRS))
print('\n' + f'full path: "{s}"')
# TODO: get TITLE and ARTIST from Mutagen
print(f'playing "{basename(s)}"', end='\n\n')
os.execv(MEDIA_PLAYER, [wr(MEDIA_PLAYER, '"'), wr(s, '"')])
except Exception as e:
print(wr(e, '\n'))