Spaces:
Build error
Build error
import numpy as np | |
import mido, os, pickle, yaml, argparse, math, librosa, hgtk, logging | |
from tqdm import tqdm | |
from pysptk.sptk import rapt | |
from typing import List, Tuple | |
from argparse import Namespace # for type | |
import torch | |
from typing import Dict | |
from meldataset import mel_spectrogram, spectrogram, spec_energy | |
from Arg_Parser import Recursive_Parse | |
def Convert_Feature_Based_Music( | |
music: List[Tuple[float, str, int]], | |
sample_rate: int, | |
frame_shift: int, | |
consonant_duration: int= 3, | |
equality_duration: bool= False | |
): | |
previous_used = 0 | |
lyrics = [] | |
notes = [] | |
durations = [] | |
for message_time, lyric, note in music: | |
duration = round(message_time * sample_rate) + previous_used | |
previous_used = duration % frame_shift | |
duration = duration // frame_shift | |
if lyric == '<X>': | |
lyrics.append(lyric) | |
notes.append(note) | |
durations.append(duration) | |
else: | |
lyrics.extend(Decompose(lyric)) | |
notes.extend([note] * 3) | |
if equality_duration or duration < consonant_duration * 3: | |
split_duration = [duration // 3] * 3 | |
split_duration[1] += duration % 3 | |
durations.extend(split_duration) | |
else: | |
durations.extend([ | |
consonant_duration, # onset | |
duration - consonant_duration * 2, # nucleus | |
consonant_duration # coda | |
]) | |
return lyrics, notes, durations | |
def Expand_by_Duration( | |
lyrics: List[str], | |
notes: List[int], | |
durations: List[int], | |
): | |
lyrics = sum([[lyric] * duration for lyric, duration in zip(lyrics, durations)], []) | |
notes = sum([*[[note] * duration for note, duration in zip(notes, durations)]], []) | |
durations = [index for duration in durations for index in range(duration)] | |
return lyrics, notes, durations | |
def Decompose(syllable: str): | |
onset, nucleus, coda = hgtk.letter.decompose(syllable) | |
coda += '_' | |
return onset, nucleus, coda | |