Spaces:
				
			
			
	
			
			
					
		Running
		
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
	| from .base import MelodyDatasetHandler | |
| class Genre(MelodyDatasetHandler): | |
| name = "genre" | |
| def __init__(self, melody_type, *args, **kwargs): | |
| import json | |
| with open("data/genre/word_data_zh.json", "r", encoding="utf-8") as f: | |
| song_db_zh = json.load(f) | |
| song_db_zh = {f"zh_{song['id']}": song for song in song_db_zh} # id as major | |
| with open("data/genre/word_data_en.json", "r", encoding="utf-8") as f: | |
| song_db_en = json.load(f) | |
| song_db_en = {f"en_{song['id']}": song for song in song_db_en} # id as major | |
| self.song_db = {**song_db_zh, **song_db_en} | |
| def get_song_ids(self): | |
| return list(self.song_db.keys()) | |
| def get_style_keywords(self, song_id): | |
| genre = self.song_db[song_id]["genre"] | |
| super_genre = self.song_db[song_id]["super-genre"] | |
| gender = self.song_db[song_id]["gender"] | |
| return (genre, super_genre, gender) | |
| def get_phrase_length(self, song_id): | |
| # Return the number of lyrics (excluding SP/AP) in each phrase of the song | |
| song = self.song_db[song_id] | |
| note_lyrics = song.get("note_lyrics", []) | |
| phrase_lengths = [] | |
| for phrase in note_lyrics: | |
| count = sum(1 for word in phrase if word not in ("SP", "AP")) | |
| phrase_lengths.append(count) | |
| return phrase_lengths | |
| def iter_song_phrases(self, song_id): | |
| segment_id = 1 | |
| song = self.song_db[song_id] | |
| for phrase_score, phrase_lyrics in zip(song["score"], song["note_lyrics"]): | |
| segment = { | |
| "note_start_times": [n[0] for n in phrase_score], | |
| "note_end_times": [n[1] for n in phrase_score], | |
| "note_lyrics": [character for character in phrase_lyrics], | |
| "note_midi": [n[2] for n in phrase_score], | |
| } | |
| yield segment | |
| segment_id += 1 | |