emmental/tools/generate_tracks.py

97 lines
5.3 KiB
Python

# Copyright 2019 (c) Anna Schumaker.
import base64
import mutagen
import mutagen.flac
import mutagen.id3
import os
import subprocess
data = os.path.abspath("data")
ffmpeg = "ffmpeg -hide_banner -nostdin -f s16le -i /dev/zero -codec libvorbis -loglevel warning".split()
image = mutagen.flac.Picture()
image.data = open("data/emmental.png", "rb").read()
image.type = mutagen.id3.PictureType.COVER_FRONT
image.mime = u"image/png"
image.width = 512
image.height = 512
image.depth = 16
encoded_data = base64.b64encode(image.write())
image_data = encoded_data.decode("ascii")
def generate_track(length, filename, tags={}):
path = os.path.join(data, filename)
if os.path.exists(path):
return
os.makedirs(os.path.dirname(path), exist_ok=True)
subprocess.run(ffmpeg + [ "-t", str(length), path ])
fileinfo = mutagen.File(path)
for (key, value) in tags.items():
fileinfo[key] = value
fileinfo["metadata_block_picture"] = [ image_data ]
fileinfo.save()
# Create a bunch of tracks in the Test Album directory
generate_track( 0, "Test Album/00 - Empty Track.ogg")
generate_track(10, "Test Album/01 - Test Track.ogg", { "title" : "Test Track",
"artist" : "Test Artist",
"artistsort" : "Artist, Test",
"album" : "Test Album",
"genre" : "Test",
"date" : "2019-02",
"tracknumber" : "1",
"tracktotal" : "12",
"discnumber" : "1" })
generate_track(15, "Test Album/02 - Test {Disc 2}.ogg", { "Title" : "Test {Disc 2}",
"albumartist" : "Test Album Artist",
"albumartistsort" : "Album Artist, Test",
"artist" : "Test Artist",
"artistsort" : "Artist, Test",
"album" : "Test Album {Disc 2}",
"discsubtitle" : "Electric Boogaloo",
"genre" : "Test, Genre, List",
"originalyear" : "2019",
"date" : "2020-10-18"})
generate_track(20, "Test Album/03 - Test [Disk One].ogg", { "Title" : "Test [Disk One]",
"album" : "Test Album [Disk One]",
"discnumber" : "2"})
generate_track(25, "Test Album/04 - Test (Disc Two).ogg", { "Title" : "Test (Disc Two)",
"album" : "Test Album (Disc Two)" })
generate_track(30, "Test Album/05 - Test - Disc Three.ogg", { "Title" : "Test - Disc Three",
"album" : "Test - Disc Three" })
generate_track(35, "Test Album/06 - Test;CD Four.ogg", { "Title" : "Test;CD Four",
"album" : "Test;CD Four" })
generate_track(40, "Test Album/07 - Test;CdFive.ogg", { "Title" : "Test;CdFive",
"album" : "Test;CdFive" })
generate_track(45, "Test Album/08 - Test CD 6_10.ogg", { "Title" : "Test CD 6/10",
"album" : "Test CD 6/10" })
generate_track(50, "Test Album/09 - Test {Disc 02}.ogg", { "Title" : "Test {Disc 02}",
"album" : "Test Album {Disc 02}" })
generate_track(55, "Test Album/10 - Test {Disc 20}.ogg", { "Title" : "Test {Disc 20}",
"album" : "Test Album {Disc 20}" })
generate_track(60, "Test Album/11 - Test Track 11.ogg", { "Title" : "Test Track 11",
"album" : "Test Album 11",
"discnumber" : "1",
"tracknumber" : "11" })
with open(os.path.join(data, "Test Album/text.txt"), 'w') as f:
f.write("Test Text")
os.makedirs("data/Test Album/Test Subdir", exist_ok=True)
# Create a giant library for testing
for artistno in range(1, 26):
artist = f"Test Artist {artistno:02}"
for albumno in range(1, 6):
album = f"Test Album {albumno}"
for trackno in range(1, 11):
title = f"Test Track {trackno:02}"
genre = f"Test Genre {albumno}"
generate_track(trackno, f"Test Library/{artist}/{album}/{trackno:02} - {title}.ogg",
{ "title" : title,
"artist" : artist,
"album" : album,
"genre" : genre,
"date" : str(1970 + (albumno * 3)),
"tracknumber" : f"{trackno:02}" })