Пример #1
0
 def __chord_and_length(self):
     #分解脳を拍子の分母(?)で割りますー(全音=1920)
     self._minimumunit = 1920 / self._nn
     qNList = MAutoChorus.noteQuantization(self._anotes, self._minimumunit)
     hamList = MAutoChorus.melodyrestoration(self._anotes, qNList, self._key, self._dd, self._nn)
     MChord.autoChord(hamList)
     MUnderThree.autoUnderThree(hamList)
     self._CLList = [{'Chord': ham.chord, 'Length': ham.length} for ham in hamList]
     self.__list_lyric()
     self.__list_chord()
Пример #2
0
    def __unpack_events(self, anotes, singers):
        """unpackする

        Args:
            anotes: 音符イベントのリスト
            singers: 歌手変更イベントのリスト
        Returns:
            events: イベント情報(ID#xxxxタグ以下の情報)のリスト
            details: イベント詳細情報(h#xxxxタグ以下の情報)のリスト
        """
        soprano_notes = []
        for i in range(0, len(anotes)):
            soprano_notes.append(anotes[i].note)
        # !!! execAutoChorus(anotes, 調, 分子, 分母)[パート] をpack !!!
        packed = MAutoChorus.execAutoChorus(anotes, aeks.aeks(soprano_notes),
                                self._nn, self._dd)[self._part] + singers
        packed.sort(key=lambda x: int(x.start))
        details = []
        events = []
        for p in packed:
            e = p.event
            if e['Type'] == 'Anote':
                e.update({'LyricHandle': 'h#%04d' % len(details)})
                details.append(p.lyric_event)
                vibrato = p.vibrato_event
                if vibrato:
                    e.update({'VibratoHandle': 'h#%04d' % len(details)})
                    details.append(vibrato)
            elif e['Type'] == 'Singer':
                e.update({'IconHandle': 'h#%04d' % len(details)})
                details.append(p.singer_event)
            events.append(e)
        return events, details
Пример #3
0
    def parse(self):
        """ vsqxファイルを受け取ってコーラスのを返す
        Rets:
            XMLファイルの文字列
        """
        elem = ET.fromstring(self._vsqx)
        xmlns = '{http://www.yamaha.co.jp/vocaloid/schema/vsq3/}'
 
        masterTrack = elem.find(xmlns+"masterTrack")
        timeSig = masterTrack.find(xmlns+"timeSig")
        vsTrack = elem.find(xmlns + "vsTrack")
        musicalPart = vsTrack.find(xmlns + "musicalPart")
 
        self._nn = int(timeSig.findtext(xmlns+"nume"))
        self._dd = int(timeSig.findtext(xmlns+"denomi"))
 
        anotes = AnoteList()
        for i, note in enumerate(musicalPart.findall(xmlns+"note")):
            time=note.findtext(xmlns+"posTick")     #相対開始時間
            length=note.findtext(xmlns+"durTick")   #音の長さ
            anote=note.findtext(xmlns+"noteNum")    #音の高さ
            anotes.append(Anote(int(time), int(anote), length=int(length)))
 
        soprano_notes = [n.note for n in anotes]
        packed = MAC.execAutoChorus(anotes, aeks(soprano_notes),
                                    self._nn, self._dd)[self._part]
        notes = [] 
        for p in packed:
            notes.append(p.note)

        for i, note in enumerate(musicalPart.findall(xmlns+"note")):
            noteNum = note.find(xmlns+"noteNum")
            noteNum.text = str(notes[i])

        #return ET.dump(elem)
        return ET.tostring(elem)