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()
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
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)