# 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}" })