fix exception if mp3 has no ID3 tag

This commit is contained in:
Terry Geng 2020-02-05 11:48:31 +08:00
parent c1c7c9851f
commit 25f3596372
2 changed files with 25 additions and 23 deletions

View File

@ -163,7 +163,7 @@ def index():
logging.info("web: add to playlist: " + request.form['add_radio']) logging.info("web: add to playlist: " + request.form['add_radio'])
elif 'delete_music' in request.form: elif 'delete_music' in request.form:
logging.info("web: delete from playlist: " + var.playlist.playlist[int(request.form['delete_music'])]) logging.info("web: delete from playlist: " + var.playlist.playlist[int(request.form['delete_music'])]['path'])
if len(var.playlist.playlist) >= int(request.form['delete_music']): if len(var.playlist.playlist) >= int(request.form['delete_music']):
if var.playlist.current_index == int(request.form['delete_music']): if var.playlist.current_index == int(request.form['delete_music']):
var.botamusique.pause() var.botamusique.pause()
@ -172,9 +172,8 @@ def index():
else: else:
var.playlist.remove(int(request.form['delete_music'])) var.playlist.remove(int(request.form['delete_music']))
elif 'play_music' in request.form: elif 'play_music' in request.form:
logging.info("web: jump to: " + var.playlist.playlist[int(request.form['play_music'])]) logging.info("web: jump to: " + var.playlist.playlist[int(request.form['play_music'])]['path'])
if len(var.playlist.playlist) >= int(request.form['play_music']): if len(var.playlist.playlist) >= int(request.form['play_music']):
var.botamusique.pause() var.botamusique.pause()
var.botamusique.launch_music(int(request.form['play_music'])) var.botamusique.launch_music(int(request.form['play_music']))

View File

@ -685,7 +685,7 @@ class MumbleBot:
command = ("ffmpeg", '-v', ffmpeg_debug, '-nostdin', '-i', command = ("ffmpeg", '-v', ffmpeg_debug, '-nostdin', '-i',
uri, '-ac', '1', '-f', 's16le', '-ar', '48000', '-') uri, '-ac', '1', '-f', 's16le', '-ar', '48000', '-')
logging.info("FFmpeg command : " + " ".join(command)) logging.info("bot: execute ffmpeg command: " + " ".join(command))
# The ffmpeg process is a thread # The ffmpeg process is a thread
self.thread = sp.Popen(command, stdout=sp.PIPE, bufsize=480) self.thread = sp.Popen(command, stdout=sp.PIPE, bufsize=480)
self.is_playing = True self.is_playing = True
@ -782,32 +782,35 @@ class MumbleBot:
uri = music['path'] uri = music['path']
if os.path.isfile(uri): if os.path.isfile(uri):
audio = EasyID3(uri) try:
if audio["title"]: audio = EasyID3(uri)
# take the title from the file tag if audio["title"]:
music['title'] = audio["title"][0] # take the title from the file tag
music['artist'] = ', '.join(audio["artist"]) music['title'] = audio["title"][0]
music['artist'] = ', '.join(audio["artist"])
path_thumbnail = uri[:-3] + "jpg" path_thumbnail = uri[:-3] + "jpg"
if os.path.isfile(path_thumbnail): if os.path.isfile(path_thumbnail):
im = Image.open(path_thumbnail) im = Image.open(path_thumbnail)
im.thumbnail((100, 100), Image.ANTIALIAS)
buffer = BytesIO()
im = im.convert('RGB')
im.save(buffer, format="JPEG")
music['thumbnail'] = base64.b64encode(buffer.getvalue()).decode('utf-8')
# try to extract artwork from mp3 ID3 tag
elif uri[-3:] == "mp3":
tags = mutagen.File(uri)
if "APIC:" in tags:
im = Image.open(BytesIO(tags["APIC:"].data))
im.thumbnail((100, 100), Image.ANTIALIAS) im.thumbnail((100, 100), Image.ANTIALIAS)
buffer = BytesIO() buffer = BytesIO()
im = im.convert('RGB') im = im.convert('RGB')
im.save(buffer, format="JPEG") im.save(buffer, format="JPEG")
music['thumbnail'] = base64.b64encode(buffer.getvalue()).decode('utf-8') music['thumbnail'] = base64.b64encode(buffer.getvalue()).decode('utf-8')
# try to extract artwork from mp3 ID3 tag
elif uri[-3:] == "mp3":
tags = mutagen.File(uri)
if "APIC:" in tags:
im = Image.open(BytesIO(tags["APIC:"].data))
im.thumbnail((100, 100), Image.ANTIALIAS)
buffer = BytesIO()
im = im.convert('RGB')
im.save(buffer, format="JPEG")
music['thumbnail'] = base64.b64encode(buffer.getvalue()).decode('utf-8')
except:
pass
return music return music