1
0
mirror of synced 2025-02-02 04:17:54 +01:00
jujube/utils/test_songs_generator.py

80 lines
2.2 KiB
Python
Raw Permalink Normal View History

import argparse
from path import Path
from PIL import Image
import json
import random
from functools import partial
from faker import Faker
fake = Faker()
parser = argparse.ArgumentParser()
parser.add_argument("input_folder", type=Path)
parser.add_argument("output_folder", type=Path)
parser.add_argument("--music-folder-mode", action="store_true", dest="music_folder_mode")
parser.add_argument("--clean", action="store_true")
parser.add_argument("--random-name", action="store_true", dest="random_name")
args = parser.parse_args()
DIF_NAMES = [
lambda : "BSC",
lambda : "ADV",
lambda : "EXT",
partial(fake.lexify, text="????", letters="abcdefghijklmnopqrstuvwxyz"),
]
def create_song_folder_from_image(image: Path):
song_name = fake.sentence().strip(".") if args.random_name else image.stem
2020-02-15 20:50:47 +01:00
song_artist = fake.name()
song_folder = args.output_folder / song_name
song_folder.mkdir()
output_image = song_folder / f"{song_name}.jpg"
Image.open(str(image)).save(str(output_image))
memon = {
"version": "0.1.0",
"metadata": {
"song title": song_name,
2020-02-15 20:50:47 +01:00
"artist": song_artist,
"music path": "",
"album cover path": output_image.name,
"BPM": 120,
"offset": 0,
}
}
data = memon.setdefault("data", {})
for i in range(random.randint(1,6)):
data[DIF_NAMES[3 if i > 3 else i]()] = {
"level": random.randint(1,10),
"notes": [],
"resolution": 4
}
json.dump(
memon,
open(song_folder/f"{song_name}.memon", "w"),
indent=4,
sort_keys=True,
)
if args.clean:
args.output_folder.rmtree_p()
args.output_folder.mkdir()
def walk_music_folder(folder: Path):
for album in folder.dirs():
yield from album.files()
files = walk_music_folder(args.input_folder) if args.music_folder_mode else args.input_folder.files()
for file in files:
try:
Image.open(str(file))
except IOError as e:
print(f"{file} : {e}")
try:
create_song_folder_from_image(file)
except Exception as e:
print(f"{file} : {e}")
print(f"{file} : ok")