Example #1
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
Example #2
0
 def __init__(self, anotes, nn, dd):
     self._nn = nn
     self._dd = 2 ** dd
     self._anotes = copy.deepcopy(anotes)
     soprano_notes = [anote.note for anote in self._anotes]
     self._key = aeks.aeks(soprano_notes)
     self._lyrics = []
     self._chords = []
     self.__chord_and_length()
Example #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)