2020-02-06 00:09:09 +01:00
|
|
|
import argparse
|
|
|
|
from path import Path
|
|
|
|
from PIL import Image
|
|
|
|
import json
|
|
|
|
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()
|
|
|
|
|
|
|
|
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()
|
2020-02-06 00:09:09 +01:00
|
|
|
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,
|
2020-02-06 00:09:09 +01:00
|
|
|
"music path": "",
|
|
|
|
"album cover path": output_image.name,
|
|
|
|
"BPM": 120,
|
|
|
|
"offset": 0,
|
|
|
|
},
|
|
|
|
"data": {
|
|
|
|
"BSC" : {
|
|
|
|
"level": 1,
|
|
|
|
"resolution": 4,
|
|
|
|
"notes": []
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
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")
|