Han Jionghao commited on
Commit
0e589bd
·
unverified ·
2 Parent(s): be053b4 0ea9ae5

Merge pull request #1 from FengJin1117/fwh_dev

Browse files
data/genre/word_data_en.json ADDED
The diff for this file is too large to render. See raw diff
 
data/genre/word_data_zh.json ADDED
The diff for this file is too large to render. See raw diff
 
data_handlers/genre.py ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from .base import MelodyDatasetHandler
2
+
3
+
4
+ class Genre(MelodyDatasetHandler):
5
+ name = "genre"
6
+
7
+ def __init__(self, melody_type, *args, **kwargs):
8
+ import json
9
+
10
+ with open("data/genre/word_data_zh.json", "r", encoding="utf-8") as f:
11
+ song_db_zh = json.load(f)
12
+ song_db_zh = {f"zh_{song['id']}": song for song in song_db_zh} # id as major
13
+ with open("data/genre/word_data_en.json", "r", encoding="utf-8") as f:
14
+ song_db_en = json.load(f)
15
+ song_db_en = {f"en_{song['id']}": song for song in song_db_en} # id as major
16
+ self.song_db = {**song_db_zh, **song_db_en}
17
+
18
+ def get_song_ids(self):
19
+ return list(self.song_db.keys())
20
+
21
+ def get_style_keywords(self, song_id):
22
+ genre = self.song_db[song_id]["genre"]
23
+ super_genre = self.song_db[song_id]["super-genre"]
24
+ gender = self.song_db[song_id]["gender"]
25
+ return (genre, super_genre, gender)
26
+
27
+ def get_phrase_length(self, song_id):
28
+ # Return the number of lyrics (excluding SP/AP) in each phrase of the song
29
+ song = self.song_db[song_id]
30
+ note_lyrics = song.get("note_lyrics", [])
31
+
32
+ phrase_lengths = []
33
+ for phrase in note_lyrics:
34
+ count = sum(1 for word in phrase if word not in ("SP", "AP"))
35
+ phrase_lengths.append(count)
36
+
37
+ return phrase_lengths
38
+
39
+ def iter_song_phrases(self, song_id):
40
+ segment_id = 1
41
+ song = self.song_db[song_id]
42
+ for phrase_score, phrase_lyrics in zip(song["score"], song["note_lyrics"]):
43
+ segment = {
44
+ "note_start_times": [n[0] for n in phrase_score],
45
+ "note_end_times": [n[1] for n in phrase_score],
46
+ "note_lyrics": [character for character in phrase_lyrics],
47
+ "note_midi": [n[2] for n in phrase_score],
48
+ }
49
+ yield segment
50
+ segment_id += 1