Team Ai
Apppublic

codejin/diffsingerkr

sourceHugging Facemitupdated 4y agoView on Hugging Face
6likes
Pattern_Generator.py65 linesDownload Raw Back to root
1import numpy as np2import mido, os, pickle, yaml, argparse, math, librosa, hgtk, logging3from tqdm import tqdm4from pysptk.sptk import rapt5from typing import List, Tuple6from argparse import Namespace  # for type7import torch8from typing import Dict9 10from meldataset import mel_spectrogram, spectrogram, spec_energy11from Arg_Parser import Recursive_Parse12 13def Convert_Feature_Based_Music(14    music: List[Tuple[float, str, int]],15    sample_rate: int,16    frame_shift: int,17    consonant_duration: int= 3,18    equality_duration: bool= False19    ):20    previous_used = 021    lyrics = []22    notes = []23    durations = []24    for message_time, lyric, note in music:25        duration = round(message_time * sample_rate) + previous_used26        previous_used = duration % frame_shift27        duration = duration // frame_shift28 29        if lyric == '<X>':30            lyrics.append(lyric)31            notes.append(note)32            durations.append(duration)33        else:34            lyrics.extend(Decompose(lyric))35            notes.extend([note] * 3)36            if equality_duration or duration < consonant_duration * 3:37                split_duration = [duration // 3] * 338                split_duration[1] += duration % 339                durations.extend(split_duration)40            else:41                durations.extend([42                    consonant_duration,    # onset43                    duration - consonant_duration * 2, # nucleus44                    consonant_duration # coda45                    ])46 47    return lyrics, notes, durations48 49def Expand_by_Duration(50    lyrics: List[str],51    notes: List[int],52    durations: List[int],53    ):54    lyrics = sum([[lyric] * duration for lyric, duration in zip(lyrics, durations)], [])55    notes = sum([*[[note] * duration for note, duration in zip(notes, durations)]], [])56    durations = [index for duration in durations for index in range(duration)]57 58    return lyrics, notes, durations59 60def Decompose(syllable: str):61    onset, nucleus, coda = hgtk.letter.decompose(syllable)62    coda += '_'63 64    return onset, nucleus, coda65