├── demo ├── index.md ├── 3.ogg └── logo.jpg ├── requirements.txt ├── _config.yml ├── logo.ico ├── logo.jpg ├── tools ├── hyph_en_US.dic ├── inputs │ ├── midi │ │ ├── somebodyThatIUsedToKnow.mid │ │ └── somebodyThatIUsedToKnow_voice.mid │ ├── lyrics │ │ └── somebodyThatIUsedToKnow_lyrics.txt │ └── musicXMLs │ │ ├── voice-ja.xml │ │ └── voice.xml ├── voiceTag.py ├── test.txt ├── musicxml.py └── hyphenator.py ├── inputs ├── midi │ ├── somebodyThatIUsedToKnow.mid │ └── somebodyThatIUsedToKnow_voice.mid ├── lyrics │ └── somebodyThatIUsedToKnow_lyrics.txt └── musicXMLs │ ├── voice.xml │ └── voice-en.xml ├── curl.py ├── wavresample.py ├── utils.py ├── appveyor.yml ├── main.spec ├── LICENSE ├── wavsave.py ├── README.md ├── main.py ├── voice.py └── voice.xml /demo/index.md: -------------------------------------------------------------------------------- 1 | ! 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | scipy 2 | requests 3 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman 2 | show_downloads: true 3 | -------------------------------------------------------------------------------- /logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuzukiTsuru/SinsyPlus/HEAD/logo.ico -------------------------------------------------------------------------------- /logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuzukiTsuru/SinsyPlus/HEAD/logo.jpg -------------------------------------------------------------------------------- /demo/3.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuzukiTsuru/SinsyPlus/HEAD/demo/3.ogg -------------------------------------------------------------------------------- /demo/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuzukiTsuru/SinsyPlus/HEAD/demo/logo.jpg -------------------------------------------------------------------------------- /tools/hyph_en_US.dic: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuzukiTsuru/SinsyPlus/HEAD/tools/hyph_en_US.dic -------------------------------------------------------------------------------- /inputs/midi/somebodyThatIUsedToKnow.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuzukiTsuru/SinsyPlus/HEAD/inputs/midi/somebodyThatIUsedToKnow.mid -------------------------------------------------------------------------------- /inputs/midi/somebodyThatIUsedToKnow_voice.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuzukiTsuru/SinsyPlus/HEAD/inputs/midi/somebodyThatIUsedToKnow_voice.mid -------------------------------------------------------------------------------- /tools/inputs/midi/somebodyThatIUsedToKnow.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuzukiTsuru/SinsyPlus/HEAD/tools/inputs/midi/somebodyThatIUsedToKnow.mid -------------------------------------------------------------------------------- /tools/inputs/midi/somebodyThatIUsedToKnow_voice.mid: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/YuzukiTsuru/SinsyPlus/HEAD/tools/inputs/midi/somebodyThatIUsedToKnow_voice.mid -------------------------------------------------------------------------------- /tools/voiceTag.py: -------------------------------------------------------------------------------- 1 | import sys 2 | sys.path.append('.') 3 | from utils import * 4 | import subprocess 5 | 6 | output = WAVS_ROOT + 'voice_' + tag() + '.wav' 7 | subprocess.Popen("cp " + LAST_VOICE_WAV + " " + output, shell=True) -------------------------------------------------------------------------------- /curl.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | # 下载(语言,语言名称,XML文件) 5 | def curl(lang, langstr, XML): 6 | f = os.popen("curl -X POST -F \"SPKR_LANG=" + langstr + "\" -F \"SPKR=" + lang +"\" -F 'SYNALPHA=0.55' -F 'VIBPOWER=1' -F 'F0SHIFT=0' -F \"SYNSRC=@" + XML + "\" http://sinsy.sp.nitech.ac.jp/index.php | grep \"lf0\"") 7 | textsrc = f.readlines() 8 | # print(textsrc) # Debug 9 | return textsrc -------------------------------------------------------------------------------- /wavresample.py: -------------------------------------------------------------------------------- 1 | from scipy.io import wavfile 2 | 3 | 4 | # 读取文件 5 | def wavwrite(wavsrc): 6 | return wavsrc 7 | 8 | # 文件压缩 9 | def wavzip(wavsrc, filename, ziprate): 10 | # 读取原始文件采样率 11 | sampleRate, musicdata = wavfile.read(wavsrc) 12 | # 压缩,储存 13 | wavfile.write(filename, sampleRate // ziprate, musicdata[::5]) 14 | 15 | 16 | # wavzip("test.wav", "testout.wav", 5) # debug 17 | -------------------------------------------------------------------------------- /utils.py: -------------------------------------------------------------------------------- 1 | import time 2 | import datetime 3 | from functools import reduce 4 | 5 | VOICE_XML_ROOT_PATH = "inputs/musicXMLs/" 6 | WAVS_ROOT = "output/" 7 | LAST_VOICE_WAV = WAVS_ROOT + "voice_last_recording.wav" 8 | 9 | # 时间 10 | def tag(): 11 | ts = time.time() 12 | return datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d_%H-%M-%S') 13 | 14 | 15 | # 获取文件名称 16 | def text(src): 17 | text = reduce(lambda accum,x: accum + x, src, "") 18 | index = text.find('./temp/') + len('./temp/') 19 | text = text[index:index+40].split(".")[0] 20 | print ("Get target File:" + text) 21 | return text 22 | -------------------------------------------------------------------------------- /tools/test.txt: -------------------------------------------------------------------------------- 1 | Now and then I think of when we were together 2 | Like when you said you felt so happy you could die 3 | Told myself that you were right for me 4 | But felt so lonely in your company 5 | But that was love and it's an ache I still remember 6 | You can get addicted to a certain kind of sadness 7 | Like resignation to the end, always the end 8 | So when we found that we could not make sense 9 | Well you said that we would still be friends 10 | But I'll admit that I was glad it was over 11 | But you didn't have to cut me off 12 | Make out like it never happened and that we were nothing 13 | And I don't even need your love 14 | But you treat me like a stranger and that feels so rough 15 | No, you didn't have to stoop so low 16 | Have your friends collect your records and then change your number 17 | I guess -------------------------------------------------------------------------------- /inputs/lyrics/somebodyThatIUsedToKnow_lyrics.txt: -------------------------------------------------------------------------------- 1 | Now and then I think of when we were together 2 | Like when you said you felt so happy you could die 3 | Told myself that you were right for me 4 | But felt so lonely in your company 5 | But that was love and it's an ache I still remember 6 | You can get addicted to a certain kind of sadness 7 | Like resignation to the end, always the end 8 | So when we found that we could not make sense 9 | Well you said that we would still be friends 10 | But I'll admit that I was glad it was over 11 | But you didn't have to cut me off 12 | Make out like it never happened and that we were nothing 13 | And I don't even need your love 14 | But you treat me like a stranger and that feels so rough 15 | No, you didn't have to stoop so low 16 | Have your friends collect your records and then change your number 17 | I guess -------------------------------------------------------------------------------- /tools/inputs/lyrics/somebodyThatIUsedToKnow_lyrics.txt: -------------------------------------------------------------------------------- 1 | Now and then I think of when we were together 2 | Like when you said you felt so happy you could die 3 | Told myself that you were right for me 4 | But felt so lonely in your company 5 | But that was love and it's an ache I still remember 6 | You can get addicted to a certain kind of sadness 7 | Like resignation to the end, always the end 8 | So when we found that we could not make sense 9 | Well you said that we would still be friends 10 | But I'll admit that I was glad it was over 11 | But you didn't have to cut me off 12 | Make out like it never happened and that we were nothing 13 | And I don't even need your love 14 | But you treat me like a stranger and that feels so rough 15 | No, you didn't have to stoop so low 16 | Have your friends collect your records and then change your number 17 | I guess -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | image: Visual Studio 2017 2 | 3 | platform: 4 | - x64 5 | 6 | environment: 7 | matrix: 8 | - PYTHON: "C:\\Python36-x64" 9 | PYTHON_VERSION: "3.6.8" 10 | PYTHON_ARCH: "64" 11 | 12 | init: 13 | - git config --global core.autocrlf input 14 | 15 | install: 16 | - virtualenv -p C:\\Python36-x64\\python.exe . 17 | - cd Scripts 18 | - activate 19 | - cd .. 20 | - python -m pip install --upgrade pip 21 | - pip install -r requirements.txt && pip install pyinstaller 22 | 23 | build_script: 24 | - pyinstaller -F main.spec 25 | 26 | test: off 27 | 28 | version: 0.0.{build}.Appveyor 29 | 30 | artifacts: 31 | - path: dist\*exe 32 | name: SinsyPlus-{build} 33 | 34 | 35 | deploy: 36 | - provider: GitHub 37 | auth_token: 38 | secure: s4Qh6C0lm0rZIKztCRjl69ER4IzK4voYH4O8XgMNu88/8pSW3Vb9h6kwq35UDq3V 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /main.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python -*- 2 | 3 | block_cipher = None 4 | 5 | 6 | a = Analysis(['main.py'], 7 | pathex=['C:\\Users\\GloomyGhost\\PycharmProjects\\SinsyPlus-win'], 8 | binaries=[], 9 | datas=[], 10 | hiddenimports=[], 11 | hookspath=[], 12 | runtime_hooks=[], 13 | excludes=[], 14 | win_no_prefer_redirects=False, 15 | win_private_assemblies=False, 16 | cipher=block_cipher, 17 | noarchive=False) 18 | pyz = PYZ(a.pure, a.zipped_data, 19 | cipher=block_cipher) 20 | exe = EXE(pyz, 21 | a.scripts, 22 | a.binaries, 23 | a.zipfiles, 24 | a.datas, 25 | [], 26 | name='main', 27 | debug=False, 28 | bootloader_ignore_signals=False, 29 | strip=False, 30 | upx=True, 31 | runtime_tmpdir=None, 32 | console=True, 33 | icon='logo.ico') 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 GloomyGhost 4 | Copyright (c) 2018 Mathias Gatti 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. -------------------------------------------------------------------------------- /wavsave.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import requests 3 | 4 | 5 | # 下载文件 6 | def downloadfile(link, filename): 7 | # 把下载地址发送给requests模块 8 | file = requests.get(link) 9 | # 下载文件 10 | with open(filename, "wb") as feed: 11 | feed.write(file.content) 12 | 13 | 14 | # 下载文件,显示进度条 15 | def download(url, file_path): 16 | # verify=False 这一句是为了有的网站证书问题,为True会报错 17 | r = requests.get(url, stream=True, verify=False) 18 | 19 | # 既然要实现下载进度,那就要知道你文件大小啊,下面这句就是得到总大小 20 | total_size = int(r.headers['Content-Length']) 21 | temp_size = 0 22 | 23 | with open(file_path, "wb+") as f: 24 | # iter_content()函数就是得到文件的内容, 25 | # 有些人下载文件很大怎么办,内存都装不下怎么办? 26 | # 那就要指定chunk_size=1024,大小自己设置, 27 | # 意思是下载一点写一点到磁盘。 28 | for chunk in r.iter_content(chunk_size=1024): 29 | if chunk: 30 | temp_size += len(chunk) 31 | f.write(chunk) 32 | f.flush() 33 | done = int(50 * temp_size / total_size) 34 | # 调用标准输出刷新命令行,看到\r回车符了吧 35 | # 相当于把每一行重新刷新一遍 36 | sys.stdout.write("\r[%s%s] %d%%" % ('#' * done, ' ' * (50 - done), 100 * temp_size / total_size)) 37 | sys.stdout.flush() 38 | print() # 避免上面\r 回车符,执行完后需要换行了,不然都在一行显示 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # SinsyPlus 4 | Singing Voice Synthesis System based on Sinsy 5 | 6 | [![Build status](https://ci.appveyor.com/api/projects/status/est4cx966u4fevcg?svg=true)](https://ci.appveyor.com/project/GloomyGhost-MosquitoCoil/sinsyplus) 7 | 8 | セパレイト (Japanese):[XML](demo/3.xml)(UST by YoshikageFuckwad) 9 | 13 | 14 | This script relies on the sinsy.jp website from the Nagoya Institute of Technology which implements a HMM-based Singing Voice Synthesis System. 15 | 16 | ```bash 17 | The HMM/DNN-Based Singing Voice Syntheis System "SinsyPlus" 18 | Version 0.0.1 (https://github.com/740291272/SinsyPlus) 19 | Copyright (C)2009-2018 Nagoya Institute of Technology 20 | Copyright (C)2017-2018 GloomyGhost 21 | All rights reserved 22 | 23 | Usage: 24 | SinsyPlus [infile] [Language] 25 | Language: 26 | Japanese:ja 27 | Chinese :ch 28 | English :en 29 | Example : sinsyplus voice.xml ja 30 | 31 | ``` 32 | 33 | ## Requirements 34 | - musescore 35 | - curl 36 | - numpy 37 | - matplotlib 38 | - requests 39 | - scipy 40 | - urllib 41 | 42 | ## For Unix User 43 | You need to download curl before running. 44 | ```bash 45 | sudo apt-get install curl 46 | ``` 47 | ## Reference: 48 | https://github.com/mathigatti/midi2voice 49 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | from urllib import request 4 | from wavsave import * 5 | from wavresample import * 6 | from utils import * 7 | from curl import * 8 | from voice import * 9 | 10 | 11 | def usage(): 12 | print("The HMM/DNN-Based Singing Voice Syntheis System \"SinsyPlus\"") 13 | print("Version 0.0.1 (https://github.com/740291272/SinsyPlus)") 14 | print("Copyright (C)2009-2018 Nagoya Institute of Technology") 15 | print("Copyright (C)2017-2018 GloomyGhost") 16 | print("All rights reserved") 17 | print() 18 | print("Usage:") 19 | print("\tSinsyPlus [infile] [Language]") 20 | print("\t\tLanguage:") 21 | print("\t\t\tJapanese:ja") 22 | print("\t\t\tChinese :ch") 23 | print("\t\t\tEnglish :en") 24 | print("\tExample : sinsyplus voice.xml ja ") 25 | os.system('pause') 26 | 27 | 28 | 29 | # 程序入口 30 | if __name__ == '__main__': 31 | if len(sys.argv) < 2: 32 | usage() 33 | else: 34 | XML = sys.argv[1] # 读取XML 35 | if len(sys.argv) < 3: 36 | lang = lang() # 读取语言 37 | else: 38 | lang = langnum(sys.argv[2]) 39 | langstr = langstr(lang) # 获取语言 40 | print(langstr) 41 | print("Upload MusicXML...") 42 | fileName = text(curl(lang, langstr, XML)) # 获取文件名 43 | print("Synthesising from servers...") 44 | req = request.Request('http://sinsy.sp.nitech.ac.jp/temp/'+ fileName + ".wav") 45 | link = "http://sinsy.sp.nitech.ac.jp/temp/"+ fileName + ".wav" 46 | # Save Wav 47 | fileNameSave = fileName + ".wav" 48 | download(link, fileNameSave) 49 | -------------------------------------------------------------------------------- /tools/musicxml.py: -------------------------------------------------------------------------------- 1 | import math 2 | from utils import * 3 | from hyphenator import Hyphenator 4 | 5 | 6 | def cleanText(text): 7 | text.replace("\n", " ") 8 | text = text.lower() 9 | symbolsToDelete = ".,'!?" + '"' 10 | for symbol in symbolsToDelete: 11 | text = text.replace(symbol, "") 12 | return text 13 | 14 | 15 | def separarEnSilabas(text): 16 | text = cleanText(text) 17 | print(text) 18 | h = Hyphenator("hyph_en_US.dic") 19 | textSyllables = h.inserted(text) 20 | print(textSyllables) 21 | return list(filter(lambda x: len(x) > 0, textSyllables.replace(" ", "-").split("-"))) 22 | 23 | 24 | def addVoiceTags(tempo, text, content): 25 | output = "" 26 | tempo_xml = '\n\n'.format(tempo) 27 | lyrics_xml = '1\n\n{}\n' 28 | i = 0 29 | for line in content: 30 | if " 2 | 4 | 5 | 6 | 7 | Finale 2010 for Windows 8 | Dolet Light for Finale 2010 9 | 2011-02-28 10 | 11 | 12 | 13 | 14 | 15 | 16 | 6.9674 17 | 40 18 | 19 | 20 | 1705 21 | 1206 22 | 23 | 86 24 | 86 25 | 86 26 | 86 27 | 28 | 29 | 30 | 31 | 0 32 | 0 33 | 34 | 146 35 | 97 36 | 37 | 38 | 1.0417 39 | 5 40 | 0.944 41 | 1.4583 42 | 5 43 | 1.4583 44 | 1.0417 45 | 1.25 46 | 0.944 47 | 1.25 48 | 75 49 | 75 50 | 51 | 52 | 53 | 54 | 55 | 56 | phrase01 57 | 58 | 59 | 60 | MusicXML Part 61 | 62 | Grand Piano 63 | 64 | 65 | 1 66 | 1 67 | 80 68 | 0 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 57 78 | 0 79 | 80 | 230 81 | 82 | 83 | 84 | 1 85 | 86 | 0 87 | major 88 | 89 | 93 | 94 | G 95 | 2 96 | 97 | 98 | 99 | 100 | 101 | quarter 102 | 100 103 | 104 | 105 | 106 | 107 | 108 | 109 | 4 110 | 1 111 | 112 | 113 | 114 | 115 | 116 | C 117 | 4 118 | 119 | 2 120 | 1 121 | half 122 | up 123 | 124 | single 125 | 126 | 127 | 128 | 129 | 130 | D 131 | 4 132 | 133 | 2 134 | 1 135 | half 136 | up 137 | 138 | single 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | E 147 | 4 148 | 149 | 2 150 | 1 151 | half 152 | up 153 | 154 | single 155 | 156 | 157 | 158 | 159 | 160 | F 161 | 4 162 | 163 | 2 164 | 1 165 | half 166 | up 167 | 168 | single 169 | ふぁ 170 | 171 | 172 | 173 | 174 | 175 | 176 | G 177 | 4 178 | 179 | 2 180 | 1 181 | half 182 | up 183 | 184 | single 185 | 186 | 187 | 188 | 189 | 190 | A 191 | 4 192 | 193 | 2 194 | 1 195 | half 196 | up 197 | 198 | single 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 137 207 | 208 | 209 | 210 | 211 | B 212 | 4 213 | 214 | 2 215 | 1 216 | half 217 | down 218 | 219 | single 220 | 221 | 222 | 223 | 224 | 225 | C 226 | 5 227 | 228 | 2 229 | 1 230 | half 231 | down 232 | 233 | single 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 4 242 | 1 243 | 244 | 245 | light-heavy 246 | 247 | 248 | 249 | 250 | -------------------------------------------------------------------------------- /inputs/musicXMLs/voice.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | Finale 2010 for Windows 8 | Dolet Light for Finale 2010 9 | 2011-02-28 10 | 11 | 12 | 13 | 14 | 15 | 16 | 6.9674 17 | 40 18 | 19 | 20 | 1705 21 | 1206 22 | 23 | 86 24 | 86 25 | 86 26 | 86 27 | 28 | 29 | 30 | 31 | 0 32 | 0 33 | 34 | 146 35 | 97 36 | 37 | 38 | 1.0417 39 | 5 40 | 0.944 41 | 1.4583 42 | 5 43 | 1.4583 44 | 1.0417 45 | 1.25 46 | 0.944 47 | 1.25 48 | 75 49 | 75 50 | 51 | 52 | 53 | 54 | 55 | 56 | phrase01 57 | 58 | 59 | 60 | MusicXML Part 61 | 62 | Grand Piano 63 | 64 | 65 | 1 66 | 1 67 | 80 68 | 0 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 57 78 | 0 79 | 80 | 230 81 | 82 | 83 | 84 | 1 85 | 86 | 0 87 | major 88 | 89 | 93 | 94 | G 95 | 2 96 | 97 | 98 | 99 | 100 | 101 | quarter 102 | 100 103 | 104 | 105 | 106 | 107 | 108 | 109 | 4 110 | 1 111 | 112 | 113 | 114 | 115 | 116 | C 117 | 4 118 | 119 | 2 120 | 1 121 | half 122 | up 123 | 124 | single 125 | 126 | 127 | 128 | 129 | 130 | D 131 | 4 132 | 133 | 2 134 | 1 135 | half 136 | up 137 | 138 | single 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | E 147 | 4 148 | 149 | 2 150 | 1 151 | half 152 | up 153 | 154 | single 155 | 156 | 157 | 158 | 159 | 160 | F 161 | 4 162 | 163 | 2 164 | 1 165 | half 166 | up 167 | 168 | single 169 | ふぁ 170 | 171 | 172 | 173 | 174 | 175 | 176 | G 177 | 4 178 | 179 | 2 180 | 1 181 | half 182 | up 183 | 184 | single 185 | 186 | 187 | 188 | 189 | 190 | A 191 | 4 192 | 193 | 2 194 | 1 195 | half 196 | up 197 | 198 | single 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 137 207 | 208 | 209 | 210 | 211 | B 212 | 4 213 | 214 | 2 215 | 1 216 | half 217 | down 218 | 219 | single 220 | 221 | 222 | 223 | 224 | 225 | C 226 | 5 227 | 228 | 2 229 | 1 230 | half 231 | down 232 | 233 | single 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 4 242 | 1 243 | 244 | 245 | light-heavy 246 | 247 | 248 | 249 | 250 | -------------------------------------------------------------------------------- /tools/inputs/musicXMLs/voice-ja.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | Finale 2010 for Windows 8 | Dolet Light for Finale 2010 9 | 2011-02-28 10 | 11 | 12 | 13 | 14 | 15 | 16 | 6.9674 17 | 40 18 | 19 | 20 | 1705 21 | 1206 22 | 23 | 86 24 | 86 25 | 86 26 | 86 27 | 28 | 29 | 30 | 31 | 0 32 | 0 33 | 34 | 146 35 | 97 36 | 37 | 38 | 1.0417 39 | 5 40 | 0.944 41 | 1.4583 42 | 5 43 | 1.4583 44 | 1.0417 45 | 1.25 46 | 0.944 47 | 1.25 48 | 75 49 | 75 50 | 51 | 52 | 53 | 54 | 55 | 56 | phrase01 57 | 58 | 59 | 60 | MusicXML Part 61 | 62 | Grand Piano 63 | 64 | 65 | 1 66 | 1 67 | 80 68 | 0 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 57 78 | 0 79 | 80 | 230 81 | 82 | 83 | 84 | 1 85 | 86 | 0 87 | major 88 | 89 | 93 | 94 | G 95 | 2 96 | 97 | 98 | 99 | 100 | 101 | quarter 102 | 100 103 | 104 | 105 | 106 | 107 | 108 | 109 | 4 110 | 1 111 | 112 | 113 | 114 | 115 | 116 | C 117 | 4 118 | 119 | 2 120 | 1 121 | half 122 | up 123 | 124 | single 125 | 126 | 127 | 128 | 129 | 130 | D 131 | 4 132 | 133 | 2 134 | 1 135 | half 136 | up 137 | 138 | single 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | E 147 | 4 148 | 149 | 2 150 | 1 151 | half 152 | up 153 | 154 | single 155 | 156 | 157 | 158 | 159 | 160 | F 161 | 4 162 | 163 | 2 164 | 1 165 | half 166 | up 167 | 168 | single 169 | ふぁ 170 | 171 | 172 | 173 | 174 | 175 | 176 | G 177 | 4 178 | 179 | 2 180 | 1 181 | half 182 | up 183 | 184 | single 185 | 186 | 187 | 188 | 189 | 190 | A 191 | 4 192 | 193 | 2 194 | 1 195 | half 196 | up 197 | 198 | single 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 137 207 | 208 | 209 | 210 | 211 | B 212 | 4 213 | 214 | 2 215 | 1 216 | half 217 | down 218 | 219 | single 220 | 221 | 222 | 223 | 224 | 225 | C 226 | 5 227 | 228 | 2 229 | 1 230 | half 231 | down 232 | 233 | single 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 4 242 | 1 243 | 244 | 245 | light-heavy 246 | 247 | 248 | 249 | 250 | -------------------------------------------------------------------------------- /tools/hyphenator.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | This is a Pure Python module to hyphenate text. 4 | 5 | It is inspired by Ruby's Text::Hyphen, but currently reads standard *.dic files, 6 | that must be installed separately. 7 | 8 | In the future it's maybe nice if dictionaries could be distributed together with 9 | this module, in a slightly prepared form, like in Ruby's Text::Hyphen. 10 | 11 | Wilbert Berendsen, March 2008 12 | info@wilbertberendsen.nl 13 | 14 | License: LGPL. 15 | 16 | """ 17 | 18 | import sys 19 | import re 20 | 21 | __all__ = ("Hyphenator") 22 | 23 | # cache of per-file Hyph_dict objects 24 | hdcache = {} 25 | 26 | # precompile some stuff 27 | parse_hex = re.compile(r'\^{2}([0-9a-f]{2})').sub 28 | parse = re.compile(r'(\d?)(\D?)').findall 29 | 30 | def hexrepl(matchObj): 31 | return unichr(int(matchObj.group(1), 16)) 32 | 33 | 34 | class parse_alt(object): 35 | """ 36 | Parse nonstandard hyphen pattern alternative. 37 | The instance returns a special int with data about the current position 38 | in the pattern when called with an odd value. 39 | """ 40 | def __init__(self, pat, alt): 41 | alt = alt.split(',') 42 | self.change = alt[0] 43 | if len(alt) > 2: 44 | self.index = int(alt[1]) 45 | self.cut = int(alt[2]) + 1 46 | else: 47 | self.index = 1 48 | self.cut = len(re.sub(r'[\d\.]', '', pat)) + 1 49 | if pat.startswith('.'): 50 | self.index += 1 51 | 52 | def __call__(self, val): 53 | self.index -= 1 54 | val = int(val) 55 | if val & 1: 56 | return dint(val, (self.change, self.index, self.cut)) 57 | else: 58 | return val 59 | 60 | 61 | class dint(int): 62 | """ 63 | Just an int some other data can be stuck to in a data attribute. 64 | Call with ref=other to use the data from the other dint. 65 | """ 66 | def __new__(cls, value, data=None, ref=None): 67 | obj = int.__new__(cls, value) 68 | if ref and type(ref) == dint: 69 | obj.data = ref.data 70 | else: 71 | obj.data = data 72 | return obj 73 | 74 | 75 | class Hyph_dict(object): 76 | """ 77 | Reads a hyph_*.dic file and stores the hyphenation patterns. 78 | Parameters: 79 | -filename : filename of hyph_*.dic to read 80 | """ 81 | def __init__(self, filename): 82 | self.patterns = {} 83 | f = open(filename) 84 | charset = f.readline().strip() 85 | if charset.startswith('charset '): 86 | charset = charset[8:].strip() 87 | 88 | for pat in f: 89 | pat = (charset).strip() 90 | if not pat or pat[0] == '%': continue 91 | # replace ^^hh with the real character 92 | pat = parse_hex(hexrepl, pat) 93 | # read nonstandard hyphen alternatives 94 | if '/' in pat: 95 | pat, alt = pat.split('/', 1) 96 | factory = parse_alt(pat, alt) 97 | else: 98 | factory = int 99 | tag, value = zip(*[(s, factory(i or "0")) for i, s in parse(pat)]) 100 | # if only zeros, skip this pattern 101 | if max(value) == 0: continue 102 | # chop zeros from beginning and end, and store start offset. 103 | start, end = 0, len(value) 104 | while not value[start]: start += 1 105 | while not value[end-1]: end -= 1 106 | self.patterns[''.join(tag)] = start, value[start:end] 107 | f.close() 108 | self.cache = {} 109 | self.maxlen = max(map(len, self.patterns.keys())) 110 | 111 | def positions(self, word): 112 | """ 113 | Returns a list of positions where the word can be hyphenated. 114 | E.g. for the dutch word 'lettergrepen' this method returns 115 | the list [3, 6, 9]. 116 | 117 | Each position is a 'data int' (dint) with a data attribute. 118 | If the data attribute is not None, it contains a tuple with 119 | information about nonstandard hyphenation at that point: 120 | (change, index, cut) 121 | 122 | change: is a string like 'ff=f', that describes how hyphenation 123 | should take place. 124 | index: where to substitute the change, counting from the current 125 | point 126 | cut: how many characters to remove while substituting the nonstandard 127 | hyphenation 128 | """ 129 | word = word.lower() 130 | points = self.cache.get(word) 131 | if points is None: 132 | prepWord = '.%s.' % word 133 | res = [0] * (len(prepWord) + 1) 134 | for i in range(len(prepWord) - 1): 135 | for j in range(i + 1, min(i + self.maxlen, len(prepWord)) + 1): 136 | p = self.patterns.get(prepWord[i:j]) 137 | if p: 138 | offset, value = p 139 | s = slice(i + offset, i + offset + len(value)) 140 | res[s] = map(max, value, res[s]) 141 | 142 | points = [dint(i - 1, ref=r) for i, r in enumerate(res) if r % 2] 143 | self.cache[word] = points 144 | return points 145 | 146 | 147 | class Hyphenator(object): 148 | """ 149 | Reads a hyph_*.dic file and stores the hyphenation patterns. 150 | Provides methods to hyphenate strings in various ways. 151 | Parameters: 152 | -filename : filename of hyph_*.dic to read 153 | -left: make the first syllabe not shorter than this 154 | -right: make the last syllabe not shorter than this 155 | -cache: if true (default), use a cached copy of the dic file, if possible 156 | 157 | left and right may also later be changed: 158 | h = Hyphenator(file) 159 | h.left = 1 160 | """ 161 | def __init__(self, filename, left=2, right=2, cache=True): 162 | self.left = left 163 | self.right = right 164 | if not cache or filename not in hdcache: 165 | hdcache[filename] = Hyph_dict(filename) 166 | self.hd = hdcache[filename] 167 | 168 | def positions(self, word): 169 | """ 170 | Returns a list of positions where the word can be hyphenated. 171 | See also Hyph_dict.positions. The points that are too far to 172 | the left or right are removed. 173 | """ 174 | right = len(word) - self.right 175 | return [i for i in self.hd.positions(word) if self.left <= i <= right] 176 | 177 | def iterate(self, word): 178 | """ 179 | Iterate over all hyphenation possibilities, the longest first. 180 | """ 181 | if isinstance(word, str): 182 | word = word.decode('latin1') 183 | for p in reversed(self.positions(word)): 184 | if p.data: 185 | # get the nonstandard hyphenation data 186 | change, index, cut = p.data 187 | if word.isupper(): 188 | change = change.upper() 189 | c1, c2 = change.split('=') 190 | yield word[:p+index] + c1, c2 + word[p+index+cut:] 191 | else: 192 | yield word[:p], word[p:] 193 | 194 | def wrap(self, word, width, hyphen='-'): 195 | """ 196 | Return the longest possible first part and the last part of the 197 | hyphenated word. The first part has the hyphen already attached. 198 | Returns None, if there is no hyphenation point before width, or 199 | if the word could not be hyphenated. 200 | """ 201 | width -= len(hyphen) 202 | for w1, w2 in self.iterate(word): 203 | if len(w1) <= width: 204 | return w1 + hyphen, w2 205 | 206 | def inserted(self, word, hyphen='-'): 207 | """ 208 | Returns the word as a string with all the possible hyphens inserted. 209 | E.g. for the dutch word 'lettergrepen' this method returns 210 | the string 'let-ter-gre-pen'. The hyphen string to use can be 211 | given as the second parameter, that defaults to '-'. 212 | """ 213 | if isinstance(word, str): 214 | word = ('latin1') 215 | l = list(word) 216 | for p in reversed(self.positions(word)): 217 | if p.data: 218 | # get the nonstandard hyphenation data 219 | change, index, cut = p.data 220 | if word.isupper(): 221 | change = change.upper() 222 | l[p + index : p + index + cut] = change.replace('=', hyphen) 223 | else: 224 | l.insert(p, hyphen) 225 | return ''.join(l) 226 | 227 | __call__ = iterate 228 | 229 | 230 | if __name__ == "__main__": 231 | 232 | dict_file = sys.argv[1] 233 | word = sys.argv[2].decode('latin1') 234 | 235 | h = Hyphenator(dict_file, left=1, right=1) 236 | 237 | for i in h(word): 238 | print (i) 239 | 240 | -------------------------------------------------------------------------------- /inputs/musicXMLs/voice-en.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | Finale 2011 for Windows 8 | Dolet Light for Finale 2011 9 | 2012-12-24 10 | 11 | 12 | 13 | 14 | 15 | 16 | 6.9427 17 | 40 18 | 19 | 20 | 1711 21 | 1210 22 | 23 | 86 24 | 86 25 | 86 26 | 86 27 | 28 | 29 | 30 | 31 | 0 32 | 0 33 | 34 | 146 35 | 97 36 | 37 | 38 | 1.0417 39 | 5 40 | 0.944 41 | 1.4583 42 | 5 43 | 1.4583 44 | 1.0417 45 | 1.25 46 | 0.944 47 | 1.25 48 | 75 49 | 75 50 | 51 | 52 | 53 | 54 | 55 | 56 | - 2 - 57 | 58 | 59 | 60 | MusicXML Part 61 | 62 | Grand Piano 63 | 64 | 65 | 1 66 | 1 67 | 80 68 | 0 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 57 79 | 0 80 | 81 | 230 82 | 83 | system 84 | 85 | 86 | 4 87 | 88 | 1 89 | major 90 | 91 | 95 | 96 | G 97 | 2 98 | 99 | 100 | 101 | 102 | 103 | 8 104 | 1 105 | half 106 | 107 | 108 | 109 | 4 110 | 1 111 | quarter 112 | 113 | 114 | 115 | D 116 | 4 117 | 118 | 4 119 | 1 120 | quarter 121 | up 122 | 123 | single 124 | my 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | G 133 | 4 134 | 135 | 4 136 | 1 137 | quarter 138 | up 139 | 140 | begin 141 | grand 142 | 143 | 144 | 145 | 146 | F 147 | 1 148 | 4 149 | 150 | 2 151 | 1 152 | eighth 153 | up 154 | begin 155 | 156 | middle 157 | fa 158 | 159 | 160 | 161 | 162 | G 163 | 4 164 | 165 | 2 166 | 1 167 | eighth 168 | up 169 | end 170 | 171 | end 172 | ther's 173 | 174 | 175 | 176 | 177 | A 178 | 4 179 | 180 | 3 181 | 1 182 | eighth 183 | 184 | up 185 | 186 | single 187 | clock 188 | 189 | 190 | 191 | 192 | 1 193 | 1 194 | 16th 195 | 196 | 197 | 198 | G 199 | 4 200 | 201 | 2 202 | 1 203 | eighth 204 | up 205 | begin 206 | 207 | single 208 | was 209 | 210 | 211 | 212 | 213 | A 214 | 4 215 | 216 | 2 217 | 1 218 | eighth 219 | up 220 | end 221 | 222 | single 223 | too 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | B 232 | 4 233 | 234 | 4 235 | 1 236 | quarter 237 | down 238 | 239 | single 240 | large 241 | 242 | 243 | 244 | 245 | C 246 | 5 247 | 248 | 2 249 | 1 250 | eighth 251 | down 252 | begin 253 | 254 | single 255 | for 256 | 257 | 258 | 259 | 260 | B 261 | 4 262 | 263 | 2 264 | 1 265 | eighth 266 | down 267 | end 268 | 269 | single 270 | the 271 | 272 | 273 | 274 | 275 | E 276 | 4 277 | 278 | 3 279 | 1 280 | eighth 281 | 282 | up 283 | 284 | single 285 | shelf 286 | 287 | 288 | 289 | 290 | 1 291 | 1 292 | 16th 293 | 294 | 295 | 296 | A 297 | 4 298 | 299 | 2 300 | 1 301 | eighth 302 | up 303 | begin 304 | 305 | single 306 | so 307 | 308 | 309 | 310 | 311 | A 312 | 4 313 | 314 | 2 315 | 1 316 | eighth 317 | up 318 | end 319 | 320 | single 321 | it 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 137 330 | 331 | 332 | 333 | 334 | G 335 | 4 336 | 337 | 4 338 | 1 339 | quarter 340 | up 341 | 342 | single 343 | stood 344 | 345 | 346 | 347 | 348 | G 349 | 4 350 | 351 | 2 352 | 1 353 | eighth 354 | up 355 | begin 356 | 357 | begin 358 | nine 359 | 360 | 361 | 362 | 363 | G 364 | 4 365 | 366 | 2 367 | 1 368 | eighth 369 | up 370 | end 371 | 372 | end 373 | ty 374 | 375 | 376 | 377 | 378 | F 379 | 1 380 | 4 381 | 382 | 4 383 | 1 384 | quarter 385 | up 386 | 387 | single 388 | years 389 | 390 | 391 | 392 | 393 | E 394 | 4 395 | 396 | 2 397 | 1 398 | eighth 399 | up 400 | begin 401 | 402 | single 403 | on 404 | 405 | 406 | 407 | 408 | F 409 | 1 410 | 4 411 | 412 | 2 413 | 1 414 | eighth 415 | up 416 | end 417 | 418 | single 419 | the 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | G 428 | 4 429 | 430 | 8 431 | 1 432 | half 433 | up 434 | 435 | single 436 | floor 437 | 438 | 439 | 440 | 441 | 4 442 | 1 443 | quarter 444 | 445 | 446 | 447 | D 448 | 4 449 | 450 | 2 451 | 1 452 | eighth 453 | up 454 | begin 455 | 456 | single 457 | it 458 | 459 | 460 | 461 | 462 | D 463 | 4 464 | 465 | 2 466 | 1 467 | eighth 468 | up 469 | end 470 | 471 | single 472 | was 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | G 481 | 4 482 | 483 | 4 484 | 1 485 | quarter 486 | up 487 | 488 | begin 489 | tall 490 | 491 | 492 | 493 | 494 | F 495 | 1 496 | 4 497 | 498 | 2 499 | 1 500 | eighth 501 | up 502 | begin 503 | 504 | end 505 | er 506 | 507 | 508 | 509 | 510 | G 511 | 4 512 | 513 | 2 514 | 1 515 | eighth 516 | up 517 | end 518 | 519 | single 520 | by 521 | 522 | 523 | 524 | 525 | A 526 | 4 527 | 528 | 3 529 | 1 530 | eighth 531 | 532 | up 533 | 534 | single 535 | half 536 | 537 | 538 | 539 | 540 | 1 541 | 1 542 | 16th 543 | 544 | 545 | 546 | G 547 | 4 548 | 549 | 2 550 | 1 551 | eighth 552 | up 553 | begin 554 | 555 | single 556 | than 557 | 558 | 559 | 560 | 561 | A 562 | 4 563 | 564 | 2 565 | 1 566 | eighth 567 | up 568 | end 569 | 570 | single 571 | the 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 137 580 | 581 | 582 | 583 | 584 | B 585 | 4 586 | 587 | 4 588 | 1 589 | quarter 590 | down 591 | 592 | single 593 | old 594 | 595 | 596 | 597 | 598 | C 599 | 5 600 | 601 | 2 602 | 1 603 | eighth 604 | down 605 | begin 606 | 607 | single 608 | man 609 | 610 | 611 | 612 | 613 | B 614 | 4 615 | 616 | 2 617 | 1 618 | eighth 619 | down 620 | end 621 | 622 | begin 623 | him 624 | 625 | 626 | 627 | 628 | E 629 | 4 630 | 631 | 3 632 | 1 633 | eighth 634 | 635 | up 636 | 637 | end 638 | self 639 | 640 | 641 | 642 | 643 | 1 644 | 1 645 | 16th 646 | 647 | 648 | 649 | A 650 | 4 651 | 652 | 2 653 | 1 654 | eighth 655 | up 656 | begin 657 | 658 | single 659 | though 660 | 661 | 662 | 663 | 664 | A 665 | 4 666 | 667 | 2 668 | 1 669 | eighth 670 | up 671 | end 672 | 673 | single 674 | it 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | G 683 | 4 684 | 685 | 4 686 | 1 687 | quarter 688 | up 689 | 690 | single 691 | weighed 692 | 693 | 694 | 695 | 696 | G 697 | 4 698 | 699 | 2 700 | 1 701 | eighth 702 | up 703 | begin 704 | 705 | single 706 | not 707 | 708 | 709 | 710 | 711 | G 712 | 4 713 | 714 | 2 715 | 1 716 | eighth 717 | up 718 | end 719 | 720 | single 721 | a 722 | 723 | 724 | 725 | 726 | F 727 | 1 728 | 4 729 | 730 | 4 731 | 1 732 | quarter 733 | up 734 | 735 | begin 736 | penny 737 | 738 | 739 | 740 | 741 | E 742 | 4 743 | 744 | 2 745 | 1 746 | eighth 747 | up 748 | begin 749 | 750 | middle 751 | wei 752 | 753 | 754 | 755 | 756 | F 757 | 1 758 | 4 759 | 760 | 2 761 | 1 762 | eighth 763 | up 764 | end 765 | 766 | end 767 | ght 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | G 776 | 4 777 | 778 | 8 779 | 1 780 | half 781 | up 782 | 783 | single 784 | more 785 | 786 | 787 | 788 | 789 | 4 790 | 1 791 | quarter 792 | 793 | 794 | 795 | G 796 | 4 797 | 798 | 2 799 | 1 800 | eighth 801 | up 802 | begin 803 | 804 | single 805 | it 806 | 807 | 808 | 809 | 810 | B 811 | 4 812 | 813 | 2 814 | 1 815 | eighth 816 | up 817 | end 818 | 819 | single 820 | was 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 137 829 | 830 | 831 | 832 | 833 | D 834 | 5 835 | 836 | 4 837 | 1 838 | quarter 839 | down 840 | 841 | single 842 | bought 843 | 844 | 845 | 846 | 847 | B 848 | 4 849 | 850 | 2 851 | 1 852 | eighth 853 | up 854 | begin 855 | 856 | single 857 | on 858 | 859 | 860 | 861 | 862 | A 863 | 4 864 | 865 | 2 866 | 1 867 | eighth 868 | up 869 | end 870 | 871 | single 872 | the 873 | 874 | 875 | 876 | 877 | G 878 | 4 879 | 880 | 4 881 | 1 882 | quarter 883 | up 884 | 885 | single 886 | morn 887 | 888 | 889 | 890 | 891 | F 892 | 1 893 | 4 894 | 895 | 2 896 | 1 897 | eighth 898 | up 899 | begin 900 | 901 | single 902 | of 903 | 904 | 905 | 906 | 907 | G 908 | 4 909 | 910 | 2 911 | 1 912 | eighth 913 | up 914 | end 915 | 916 | single 917 | the 918 | 919 | 920 | 921 | 922 | 923 | 924 | 925 | A 926 | 4 927 | 928 | 2 929 | 1 930 | eighth 931 | up 932 | begin 933 | 934 | single 935 | day 936 | 937 | 938 | 939 | 940 | G 941 | 4 942 | 943 | 2 944 | 1 945 | eighth 946 | up 947 | continue 948 | 949 | single 950 | that 951 | 952 | 953 | 954 | 955 | F 956 | 1 957 | 4 958 | 959 | 2 960 | 1 961 | eighth 962 | up 963 | continue 964 | 965 | single 966 | he 967 | 968 | 969 | 970 | 971 | E 972 | 4 973 | 974 | 2 975 | 1 976 | eighth 977 | up 978 | end 979 | 980 | single 981 | was 982 | 983 | 984 | 985 | 986 | D 987 | 4 988 | 989 | 3 990 | 1 991 | eighth 992 | 993 | up 994 | 995 | single 996 | born 997 | 998 | 999 | 1000 | 1001 | 1 1002 | 1 1003 | 16th 1004 | 1005 | 1006 | 1007 | G 1008 | 4 1009 | 1010 | 2 1011 | 1 1012 | eighth 1013 | up 1014 | begin 1015 | 1016 | single 1017 | and 1018 | 1019 | 1020 | 1021 | 1022 | B 1023 | 4 1024 | 1025 | 2 1026 | 1 1027 | eighth 1028 | up 1029 | end 1030 | 1031 | single 1032 | was 1033 | 1034 | 1035 | 1036 | 1037 | 1038 | 1039 | 1040 | D 1041 | 5 1042 | 1043 | 4 1044 | 1 1045 | quarter 1046 | down 1047 | 1048 | begin 1049 | al 1050 | 1051 | 1052 | 1053 | 1054 | B 1055 | 4 1056 | 1057 | 2 1058 | 1 1059 | eighth 1060 | up 1061 | begin 1062 | 1063 | end 1064 | ways 1065 | 1066 | 1067 | 1068 | 1069 | A 1070 | 4 1071 | 1072 | 2 1073 | 1 1074 | eighth 1075 | up 1076 | end 1077 | 1078 | single 1079 | his 1080 | 1081 | 1082 | 1083 | 1084 | G 1085 | 4 1086 | 1087 | 4 1088 | 1 1089 | quarter 1090 | up 1091 | 1092 | begin 1093 | trea 1094 | 1095 | 1096 | 1097 | 1098 | F 1099 | 1 1100 | 4 1101 | 1102 | 2 1103 | 1 1104 | eighth 1105 | up 1106 | begin 1107 | 1108 | end 1109 | sure 1110 | 1111 | 1112 | 1113 | 1114 | G 1115 | 4 1116 | 1117 | 2 1118 | 1 1119 | eighth 1120 | up 1121 | end 1122 | 1123 | single 1124 | and 1125 | 1126 | 1127 | 1128 | 1129 | 1130 | 1131 | 1132 | 137 1133 | 1134 | 1135 | 1136 | 1137 | A 1138 | 4 1139 | 1140 | 8 1141 | 1 1142 | half 1143 | up 1144 | 1145 | single 1146 | pride 1147 | 1148 | 1149 | 1150 | 1151 | 4 1152 | 1 1153 | quarter 1154 | 1155 | 1156 | 1157 | D 1158 | 4 1159 | 1160 | 2 1161 | 1 1162 | eighth 1163 | up 1164 | begin 1165 | 1166 | single 1167 | but 1168 | 1169 | 1170 | 1171 | 1172 | D 1173 | 4 1174 | 1175 | 2 1176 | 1 1177 | eighth 1178 | up 1179 | end 1180 | 1181 | single 1182 | it 1183 | 1184 | 1185 | 1186 | 1187 | 1188 | 1189 | 1190 | G 1191 | 4 1192 | 1193 | 4 1194 | 1 1195 | quarter 1196 | up 1197 | 1198 | single 1199 | stopped 1200 | 1201 | 1202 | 1203 | 1204 | 4 1205 | 1 1206 | quarter 1207 | 1208 | 1209 | 1210 | A 1211 | 4 1212 | 1213 | 4 1214 | 1 1215 | quarter 1216 | up 1217 | 1218 | single 1219 | short 1220 | 1221 | 1222 | 1223 | 1224 | 4 1225 | 1 1226 | quarter 1227 | 1228 | 1229 | 1230 | 1231 | 1232 | 1233 | B 1234 | 4 1235 | 1236 | 2 1237 | 1 1238 | eighth 1239 | down 1240 | begin 1241 | 1242 | single 1243 | never 1244 | 1245 | 1246 | 1247 | 1248 | B 1249 | 4 1250 | 1251 | 2 1252 | 1 1253 | eighth 1254 | down 1255 | continue 1256 | 1257 | single 1258 | to 1259 | 1260 | 1261 | 1262 | 1263 | C 1264 | 5 1265 | 1266 | 2 1267 | 1 1268 | eighth 1269 | down 1270 | continue 1271 | 1272 | single 1273 | go 1274 | 1275 | 1276 | 1277 | 1278 | B 1279 | 4 1280 | 1281 | 2 1282 | 1 1283 | eighth 1284 | down 1285 | end 1286 | 1287 | begin 1288 | a 1289 | 1290 | 1291 | 1292 | 1293 | E 1294 | 4 1295 | 1296 | 3 1297 | 1 1298 | eighth 1299 | 1300 | up 1301 | 1302 | end 1303 | gain 1304 | 1305 | 1306 | 1307 | 1308 | 1 1309 | 1 1310 | 16th 1311 | 1312 | 1313 | 1314 | A 1315 | 4 1316 | 1317 | 2 1318 | 1 1319 | eighth 1320 | up 1321 | begin 1322 | 1323 | single 1324 | when 1325 | 1326 | 1327 | 1328 | 1329 | A 1330 | 4 1331 | 1332 | 2 1333 | 1 1334 | eighth 1335 | up 1336 | end 1337 | 1338 | single 1339 | the 1340 | 1341 | 1342 | 1343 | 1344 | 1345 | 1346 | 1347 | 137 1348 | 1349 | 1350 | 1351 | 1352 | G 1353 | 4 1354 | 1355 | 8 1356 | 1 1357 | half 1358 | up 1359 | 1360 | single 1361 | old 1362 | 1363 | 1364 | 1365 | 1366 | F 1367 | 1 1368 | 4 1369 | 1370 | 8 1371 | 1 1372 | half 1373 | up 1374 | 1375 | single 1376 | man 1377 | 1378 | 1379 | 1380 | 1381 | 1382 | 1383 | 1384 | G 1385 | 4 1386 | 1387 | 8 1388 | 1 1389 | half 1390 | up 1391 | 1392 | single 1393 | died 1394 | 1395 | 1396 | 1397 | 1398 | 4 1399 | 1 1400 | quarter 1401 | 1402 | 1403 | 1404 | D 1405 | 4 1406 | 1407 | 2 1408 | 1 1409 | eighth 1410 | up 1411 | begin 1412 | 1413 | begin 1414 | nine 1415 | 1416 | 1417 | 1418 | 1419 | D 1420 | 4 1421 | 1422 | 2 1423 | 1 1424 | eighth 1425 | up 1426 | end 1427 | 1428 | end 1429 | ty 1430 | 1431 | 1432 | 1433 | 1434 | 1435 | 1436 | 1437 | G 1438 | 4 1439 | 1440 | 4 1441 | 1 1442 | quarter 1443 | up 1444 | 1445 | single 1446 | years 1447 | 1448 | 1449 | 1450 | 1451 | D 1452 | 4 1453 | 1454 | 2 1455 | 1 1456 | eighth 1457 | up 1458 | begin 1459 | 1460 | begin 1461 | with 1462 | 1463 | 1464 | 1465 | 1466 | D 1467 | 4 1468 | 1469 | 2 1470 | 1 1471 | eighth 1472 | up 1473 | end 1474 | 1475 | end 1476 | out 1477 | 1478 | 1479 | 1480 | 1481 | E 1482 | 4 1483 | 1484 | 2 1485 | 1 1486 | eighth 1487 | up 1488 | begin 1489 | 1490 | begin 1491 | slum 1492 | 1493 | 1494 | 1495 | 1496 | D 1497 | 4 1498 | 1499 | 2 1500 | 1 1501 | eighth 1502 | up 1503 | end 1504 | 1505 | middle 1506 | be 1507 | 1508 | 1509 | 1510 | 1511 | D 1512 | 4 1513 | 1514 | 4 1515 | 1 1516 | quarter 1517 | up 1518 | 1519 | end 1520 | ring 1521 | 1522 | 1523 | 1524 | 1525 | 1526 | 1527 | 1528 | 137 1529 | 1530 | 1531 | 1532 | 1533 | B 1534 | 3 1535 | 1536 | 2 1537 | 1 1538 | eighth 1539 | up 1540 | begin 1541 | 1542 | 1543 | 1544 | 1545 | 1546 | 1547 | single 1548 | tick 1549 | 1550 | 1551 | 1552 | 1553 | 2 1554 | 1 1555 | eighth 1556 | 1557 | 1558 | 1559 | D 1560 | 4 1561 | 1562 | 2 1563 | 1 1564 | eighth 1565 | up 1566 | end 1567 | 1568 | 1569 | 1570 | 1571 | 1572 | 1573 | single 1574 | tock 1575 | 1576 | 1577 | 1578 | 1579 | 2 1580 | 1 1581 | eighth 1582 | 1583 | 1584 | 1585 | B 1586 | 3 1587 | 1588 | 2 1589 | 1 1590 | eighth 1591 | up 1592 | begin 1593 | 1594 | 1595 | 1596 | 1597 | 1598 | 1599 | single 1600 | tick 1601 | 1602 | 1603 | 1604 | 1605 | 2 1606 | 1 1607 | eighth 1608 | 1609 | 1610 | 1611 | D 1612 | 4 1613 | 1614 | 2 1615 | 1 1616 | eighth 1617 | up 1618 | continue 1619 | 1620 | 1621 | 1622 | 1623 | 1624 | 1625 | single 1626 | tock 1627 | 1628 | 1629 | 1630 | 1631 | D 1632 | 4 1633 | 1634 | 2 1635 | 1 1636 | eighth 1637 | up 1638 | end 1639 | 1640 | single 1641 | his 1642 | 1643 | 1644 | 1645 | 1646 | 1647 | 1648 | 1649 | G 1650 | 4 1651 | 1652 | 4 1653 | 1 1654 | quarter 1655 | up 1656 | 1657 | single 1658 | life 1659 | 1660 | 1661 | 1662 | 1663 | D 1664 | 4 1665 | 1666 | 2 1667 | 1 1668 | eighth 1669 | up 1670 | begin 1671 | 1672 | begin 1673 | se 1674 | 1675 | 1676 | 1677 | 1678 | D 1679 | 4 1680 | 1681 | 2 1682 | 1 1683 | eighth 1684 | up 1685 | end 1686 | 1687 | end 1688 | conds 1689 | 1690 | 1691 | 1692 | 1693 | E 1694 | 4 1695 | 1696 | 2 1697 | 1 1698 | eighth 1699 | up 1700 | begin 1701 | 1702 | begin 1703 | num 1704 | 1705 | 1706 | 1707 | 1708 | D 1709 | 4 1710 | 1711 | 2 1712 | 1 1713 | eighth 1714 | up 1715 | end 1716 | 1717 | middle 1718 | be 1719 | 1720 | 1721 | 1722 | 1723 | D 1724 | 4 1725 | 1726 | 4 1727 | 1 1728 | quarter 1729 | up 1730 | 1731 | end 1732 | ring 1733 | 1734 | 1735 | 1736 | 1737 | 1738 | 1739 | 1740 | B 1741 | 3 1742 | 1743 | 2 1744 | 1 1745 | eighth 1746 | up 1747 | begin 1748 | 1749 | 1750 | 1751 | 1752 | 1753 | 1754 | single 1755 | tick 1756 | 1757 | 1758 | 1759 | 1760 | 2 1761 | 1 1762 | eighth 1763 | 1764 | 1765 | 1766 | D 1767 | 4 1768 | 1769 | 2 1770 | 1 1771 | eighth 1772 | up 1773 | end 1774 | 1775 | 1776 | 1777 | 1778 | 1779 | 1780 | single 1781 | tock 1782 | 1783 | 1784 | 1785 | 1786 | 2 1787 | 1 1788 | eighth 1789 | 1790 | 1791 | 1792 | B 1793 | 3 1794 | 1795 | 2 1796 | 1 1797 | eighth 1798 | up 1799 | begin 1800 | 1801 | 1802 | 1803 | 1804 | 1805 | 1806 | single 1807 | tick 1808 | 1809 | 1810 | 1811 | 1812 | 2 1813 | 1 1814 | eighth 1815 | 1816 | 1817 | 1818 | D 1819 | 4 1820 | 1821 | 2 1822 | 1 1823 | eighth 1824 | up 1825 | continue 1826 | 1827 | 1828 | 1829 | 1830 | 1831 | 1832 | single 1833 | tock 1834 | 1835 | 1836 | 1837 | 1838 | D 1839 | 4 1840 | 1841 | 2 1842 | 1 1843 | eighth 1844 | up 1845 | end 1846 | 1847 | single 1848 | it 1849 | 1850 | 1851 | 1852 | 1853 | 1854 | 1855 | 1856 | 1857 | G 1858 | 4 1859 | 1860 | 4 1861 | 1 1862 | quarter 1863 | up 1864 | 1865 | single 1866 | stopped 1867 | 1868 | 1869 | 1870 | 1871 | 4 1872 | 1 1873 | quarter 1874 | 1875 | 1876 | 1877 | A 1878 | 4 1879 | 1880 | 4 1881 | 1 1882 | quarter 1883 | up 1884 | 1885 | single 1886 | short 1887 | 1888 | 1889 | 1890 | 1891 | 4 1892 | 1 1893 | quarter 1894 | 1895 | 1896 | 1897 | 1898 | 1899 | 1900 | B 1901 | 4 1902 | 1903 | 2 1904 | 1 1905 | eighth 1906 | down 1907 | begin 1908 | 1909 | single 1910 | never 1911 | 1912 | 1913 | 1914 | 1915 | B 1916 | 4 1917 | 1918 | 2 1919 | 1 1920 | eighth 1921 | down 1922 | continue 1923 | 1924 | single 1925 | to 1926 | 1927 | 1928 | 1929 | 1930 | C 1931 | 5 1932 | 1933 | 2 1934 | 1 1935 | eighth 1936 | down 1937 | continue 1938 | 1939 | single 1940 | go 1941 | 1942 | 1943 | 1944 | 1945 | B 1946 | 4 1947 | 1948 | 2 1949 | 1 1950 | eighth 1951 | down 1952 | end 1953 | 1954 | begin 1955 | a 1956 | 1957 | 1958 | 1959 | 1960 | E 1961 | 4 1962 | 1963 | 3 1964 | 1 1965 | eighth 1966 | 1967 | up 1968 | 1969 | end 1970 | gain 1971 | 1972 | 1973 | 1974 | 1975 | 1 1976 | 1 1977 | 16th 1978 | 1979 | 1980 | 1981 | A 1982 | 4 1983 | 1984 | 2 1985 | 1 1986 | eighth 1987 | up 1988 | begin 1989 | 1990 | single 1991 | when 1992 | 1993 | 1994 | 1995 | 1996 | A 1997 | 4 1998 | 1999 | 2 2000 | 1 2001 | eighth 2002 | up 2003 | end 2004 | 2005 | single 2006 | the 2007 | 2008 | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | G 2015 | 4 2016 | 2017 | 8 2018 | 1 2019 | half 2020 | up 2021 | 2022 | single 2023 | old 2024 | 2025 | 2026 | 2027 | 2028 | F 2029 | 1 2030 | 4 2031 | 2032 | 8 2033 | 1 2034 | half 2035 | up 2036 | 2037 | single 2038 | man 2039 | 2040 | 2041 | 2042 | 2043 | 2044 | 2045 | 2046 | G 2047 | 4 2048 | 2049 | 12 2050 | 1 2051 | half 2052 | 2053 | up 2054 | 2055 | single 2056 | died 2057 | 2058 | 2059 | 2060 | 2061 | 4 2062 | 1 2063 | quarter 2064 | 2065 | 2066 | light-heavy 2067 | 2068 | 2069 | 2070 | 2071 | 2072 | -------------------------------------------------------------------------------- /tools/inputs/musicXMLs/voice.xml: -------------------------------------------------------------------------------- 1 | MuseScore 2.3.12018-07-167.05556401683.781190.5556.692956.692956.6929113.38656.692956.692956.6929113.386OboeOb.Oboe16978.74020 2 | 3 | 0.00-0.0070.0041G2quarter1201611 4 | 5 | n 6 | 7 | 8 | 1611 9 | 10 | o 11 | 12 | 13 | 1611 14 | 15 | w 16 | 17 | 18 | 1611 19 | 20 | 21 | 22 | 23 | 1611 24 | 25 | a 26 | 27 | 28 | 1611 29 | 30 | n 31 | 32 | 33 | 1611 34 | 35 | d 36 | 37 | 38 | 1611 39 | 40 | 41 | 42 | 43 | 1611 44 | 45 | t 46 | 47 | 48 | 1611 49 | 50 | h 51 | 52 | 53 | 1611 54 | 55 | e 56 | 57 | 58 | 1611 59 | 60 | n 61 | 62 | 63 | 1611 64 | 65 | 66 | 67 | 68 | 1611 69 | 70 | i 71 | 72 | 73 | 41quarter1 74 | 75 | 76 | A421eighthupbegin1 77 | 78 | t 79 | A421eighthupend1 80 | 81 | h 82 | G421eighthupbegin1 83 | 84 | i 85 | G421eighthupcontinue1 86 | 87 | n 88 | G421eighthupcontinue1 89 | 90 | k 91 | G421eighthupend1 92 | 93 | 94 | 95 | 96 | 0.000.00126.71C541quarterdown1 97 | 98 | o 99 | G441quarterup1 100 | 101 | f 102 | F441quarternaturalup1 103 | 104 | 105 | E421eighthupbegin1 106 | 107 | w 108 | E421eighthupend1 109 | 110 | h 111 | 112 | 113 | D4121halfup1 114 | 115 | e 116 | 41quarter1 117 | 118 | n 119 | 120 | 121 | 1611 122 | 123 | 124 | 125 | 126 | 21eighth1 127 | 128 | w 129 | A421eighthupbegin1 130 | 131 | e 132 | A421eighthupcontinue1 133 | 134 | 135 | A421eighthupend1 136 | 137 | w 138 | G421eighthupbegin1 139 | 140 | e 141 | G421eighthupcontinue1 142 | 143 | r 144 | G421eighthupcontinue1 145 | 146 | e 147 | G421eighthupend1 148 | 149 | 150 | 151 | 152 | C541quarterdown1 153 | 154 | t 155 | A421eighthupbegin1 156 | 157 | o 158 | G421eighthupend1 159 | 160 | g 161 | G441quarterup1 162 | 163 | e 164 | G421eighthupbegin1 165 | 166 | t 167 | A421eighthupend1 168 | 169 | h 170 | 171 | 172 | A4161whole1 173 | 174 | e 175 | 176 | 177 | 1611 178 | 179 | r 180 | 181 | 182 | 21eighth1 183 | 184 | 185 | 186 | A421eighthupbegin1 187 | 188 | l 189 | A421eighthupcontinue1 190 | 191 | i 192 | A421eighthupend1 193 | 194 | k 195 | G421eighthupbegin1 196 | 197 | e 198 | G421eighthupcontinue1 199 | 200 | 201 | G421eighthupcontinue1 202 | 203 | w 204 | G421eighthupend1 205 | 206 | h 207 | 208 | 209 | C541quarterdown1 210 | 211 | e 212 | A441quarterup1 213 | 214 | n 215 | G441quarterup1 216 | 217 | 218 | 41quarter1 219 | 220 | y 221 | 222 | 223 | 0.000.00126.7121eighth1 224 | 225 | o 226 | F421eighthnaturalupbegin1 227 | 228 | u 229 | F421eighthupcontinue1 230 | 231 | 232 | F421eighthupend1 233 | 234 | s 235 | G421eighthupbegin1 236 | 237 | a 238 | F421eighthupcontinue1 239 | 240 | i 241 | E421eighthupcontinue1 242 | 243 | d 244 | F421eighthupend1 245 | 246 | 247 | 248 | 249 | E441quarterup1 250 | 251 | y 252 | D421eighthupbegin1 253 | 254 | o 255 | D421eighthupend1 256 | 257 | u 258 | D441quarterup1 259 | 260 | 261 | 41quarter1 262 | 263 | f 264 | 265 | 266 | 21eighth1 267 | 268 | e 269 | A421eighthupbegin1 270 | 271 | l 272 | A421eighthupcontinue1 273 | 274 | t 275 | A421eighthupend1 276 | 277 | 278 | G421eighthupbegin1 279 | 280 | s 281 | G421eighthupcontinue1 282 | 283 | o 284 | G421eighthupcontinue1 285 | 286 | 287 | G421eighthupend1 288 | 289 | h 290 | 291 | 292 | C541quarterdown1 293 | 294 | a 295 | A441quarterup1 296 | 297 | p 298 | G441quarterup1 299 | 300 | p 301 | E421eighthupbegin1 302 | 303 | y 304 | E421eighthupend1 305 | 306 | 307 | 308 | 309 | D4161whole1 310 | 311 | y 312 | 313 | 314 | 1611 315 | 316 | o 317 | 318 | 319 | 1611 320 | 321 | u 322 | 323 | 324 | 1611 325 | 326 | 327 | 328 | 329 | 1611 330 | 331 | c 332 | 333 | 334 | 1611 335 | 336 | o 337 | 338 | 339 | 0.000.00126.711611 340 | 341 | u 342 | 343 | 344 | 1611 345 | 346 | l 347 | 348 | 349 | 1611 350 | 351 | d 352 | 353 | 354 | 1611 355 | 356 | 357 | 358 | 359 | A421eighthupbegin1 360 | 361 | d 362 | A421eighthupcontinue1 363 | 364 | i 365 | A421eighthupcontinue1 366 | 367 | e 368 | A421eighthupend1 369 | 370 | 371 | 372 | G421eighthupbegin1 373 | 374 | t 375 | G421eighthupcontinue1 376 | 377 | o 378 | G421eighthupcontinue1 379 | 380 | l 381 | G421eighthupend1 382 | 383 | d 384 | 385 | 386 | C541quarterdown1 387 | 388 | 389 | G441quarterup1 390 | 391 | m 392 | F441quarternaturalup1 393 | 394 | y 395 | E421eighthupbegin1 396 | 397 | s 398 | E421eighthupend1 399 | 400 | e 401 | 402 | 403 | E421eighthup1 404 | 405 | l 406 | D461quarterup1 407 | 408 | f 409 | D441quarterup1 410 | 411 | 412 | 41quarter1 413 | 414 | t 415 | 416 | 417 | 1611 418 | 419 | h 420 | 421 | 422 | 21eighth1 423 | 424 | a 425 | A421eighthupbegin1 426 | 427 | t 428 | A421eighthupcontinue1 429 | 430 | 431 | A421eighthupend1 432 | 433 | y 434 | G421eighthupbegin1 435 | 436 | o 437 | G421eighthupcontinue1 438 | 439 | u 440 | G421eighthupcontinue1 441 | 442 | 443 | G421eighthupend1 444 | 445 | w 446 | 447 | 448 | 0.000.00126.71A481halfup1 449 | 450 | e 451 | E431eighthupbegin1 452 | 453 | r 454 | E41116thupendbackward hook1 455 | 456 | e 457 | E421eighthupbegin1 458 | 459 | 460 | C421eighthupend1 461 | 462 | r 463 | 464 | 465 | C481halfup1 466 | 467 | i 468 | 81half1 469 | 470 | g 471 | 472 | 473 | 1611 474 | 475 | h 476 | 477 | 478 | 21eighth1 479 | 480 | t 481 | A421eighthupbegin1 482 | 483 | 484 | A421eighthupcontinue1 485 | 486 | f 487 | A421eighthupend1 488 | 489 | o 490 | G421eighthupbegin1 491 | 492 | r 493 | G421eighthupcontinue1 494 | 495 | 496 | G421eighthupcontinue1 497 | 498 | m 499 | G421eighthupend1 500 | 501 | e 502 | 503 | 504 | C541quarterdown1 505 | 506 | 507 | 508 | A441quarterup1 509 | 510 | b 511 | G441quarterup1 512 | 513 | u 514 | 41quarter1 515 | 516 | t 517 | 518 | 519 | 21eighth1 520 | 521 | 522 | F421eighthnaturalupbegin1 523 | 524 | f 525 | F421eighthupcontinue1 526 | 527 | e 528 | F421eighthupend1 529 | 530 | l 531 | G421eighthupbegin1 532 | 533 | t 534 | F421eighthupcontinue1 535 | 536 | 537 | E421eighthupcontinue1 538 | 539 | s 540 | F421eighthupend1 541 | 542 | o 543 | 544 | 545 | E441quarterup1 546 | 547 | 548 | D421eighthupbegin1 549 | 550 | l 551 | D421eighthupend1 552 | 553 | o 554 | D441quarterup1 555 | 556 | n 557 | 41quarter1 558 | 559 | e 560 | 561 | 562 | 0.000.00126.7121eighth1 563 | 564 | l 565 | A421eighthupbegin1 566 | 567 | y 568 | A421eighthupcontinue1 569 | 570 | 571 | A421eighthupend1 572 | 573 | i 574 | G421eighthupbegin1 575 | 576 | n 577 | G421eighthupcontinue1 578 | 579 | 580 | G421eighthupcontinue1 581 | 582 | y 583 | G421eighthupend1 584 | 585 | o 586 | 587 | 588 | C581halfdown1 589 | 590 | u 591 | G421eighthup1 592 | 593 | r 594 | E441quarterup1 595 | 596 | 597 | E421eighthup1 598 | 599 | c 600 | 601 | 602 | D4161whole1 603 | 604 | o 605 | 606 | 607 | 1611 608 | 609 | m 610 | 611 | 612 | 41quarter1 613 | 614 | p 615 | D421eighthupbegin1 616 | 617 | a 618 | D421eighthupend1 619 | 620 | n 621 | D421eighthupbegin1 622 | 623 | y 624 | F421eighthnaturalupcontinue1 625 | 626 | 627 | 628 | F421eighthupcontinue1 629 | 630 | b 631 | F421eighthupend1 632 | 633 | u 634 | 635 | 636 | B-1461quarterflatdown1 637 | 638 | t 639 | A421eighthup1 640 | 641 | 642 | A481halfup1 643 | 644 | t 645 | 646 | 647 | 41quarter1 648 | 649 | h 650 | A421eighthupbegin1 651 | 652 | a 653 | A421eighthupend1 654 | 655 | t 656 | G421eighthupbegin1 657 | 658 | 659 | G421eighthupcontinue1 660 | 661 | w 662 | G421eighthupcontinue1 663 | 664 | a 665 | G421eighthupend1 666 | 667 | s 668 | 669 | 670 | 0.000.00126.71C521eighthdownbegin1 671 | 672 | 673 | C521eighthdowncontinue1 674 | 675 | l 676 | C521eighthdowncontinue1 677 | 678 | o 679 | C521eighthdownend1 680 | 681 | v 682 | B-1421eighthflatdown1 683 | 684 | e 685 | A441quarterup1 686 | 687 | 688 | G421eighthup1 689 | 690 | a 691 | 692 | 693 | F441quarternaturalup1 694 | 695 | n 696 | 41quarter1 697 | 698 | d 699 | D421eighthupbegin1 700 | 701 | 702 | F421eighthupcontinue1 703 | 704 | i 705 | F421eighthupcontinue1 706 | 707 | t 708 | F421eighthupend1 709 | 710 | s 711 | 712 | 713 | B-1461quarterflatdown1 714 | 715 | 716 | A421eighthup1 717 | 718 | a 719 | A441quarterup1 720 | 721 | n 722 | G421eighthupbegin1 723 | 724 | 725 | G421eighthupend1 726 | 727 | a 728 | 729 | 730 | G421eighthupbegin1 731 | 732 | c 733 | A421eighthupcontinue1 734 | 735 | h 736 | A421eighthupcontinue1 737 | 738 | e 739 | A421eighthupend1 740 | 741 | 742 | G421eighthupbegin1 743 | 744 | i 745 | D421eighthupcontinue1 746 | 747 | 748 | D421eighthupcontinue1 749 | 750 | s 751 | D421eighthupend1 752 | 753 | t 754 | 755 | 756 | D441quarterup1 757 | 758 | i 759 | C441quarterup1 760 | 761 | l 762 | C441quarterup1 763 | 764 | l 765 | 41quarter1 766 | 767 | 768 | 769 | 770 | 41quarter1 771 | 772 | r 773 | C421eighthupbegin1 774 | 775 | e 776 | C421eighthupend1 777 | 778 | m 779 | D421eighthupbegin1 780 | 781 | e 782 | F421eighthnaturalupcontinue1 783 | 784 | m 785 | F421eighthupcontinue1 786 | 787 | b 788 | F421eighthupend1 789 | 790 | e 791 | 792 | 793 | 0.000.00126.71B-1461quarterflatdown1 794 | 795 | r 796 | A421eighthup1 797 | 798 | 799 | 800 | A481halfup1 801 | 802 | y 803 | 804 | 805 | 41quarter1 806 | 807 | o 808 | A421eighthupbegin1 809 | 810 | u 811 | A421eighthupend1 812 | 813 | 814 | G421eighthupbegin1 815 | 816 | c 817 | G41116thupcontinuebegin1 818 | 819 | a 820 | G41116thupendend1 821 | 822 | n 823 | G421eighthupbegin1 824 | 825 | 826 | G421eighthupend1 827 | 828 | g 829 | 830 | 831 | C521eighthdownbegin1 832 | 833 | e 834 | C521eighthdowncontinue1 835 | 836 | t 837 | C521eighthdowncontinue1 838 | 839 | 840 | C521eighthdownend1 841 | 842 | a 843 | B-1421eighthflatdown1 844 | 845 | d 846 | A441quarterup1 847 | 848 | d 849 | G421eighthup1 850 | 851 | i 852 | 853 | 854 | F441quarternaturalup1 855 | 856 | c 857 | 41quarter1 858 | 859 | t 860 | D421eighthupbegin1 861 | 862 | e 863 | F421eighthupcontinue1 864 | 865 | d 866 | F421eighthupcontinue1 867 | 868 | 869 | D421eighthupend1 870 | 871 | t 872 | 873 | 874 | A461quarterup1 875 | 876 | o 877 | G421eighthup1 878 | 879 | 880 | G441quarterup1 881 | 882 | a 883 | 41quarter1 884 | 885 | 886 | 887 | 888 | G421eighthupbegin1 889 | 890 | c 891 | A421eighthupcontinue1 892 | 893 | e 894 | A421eighthupcontinue1 895 | 896 | r 897 | A421eighthupend1 898 | 899 | t 900 | F421eighthnaturalupbegin1 901 | 902 | a 903 | G421eighthupcontinue1 904 | 905 | i 906 | G421eighthupcontinue1 907 | 908 | n 909 | A421eighthupend1 910 | 911 | 912 | 913 | 914 | 0.000.00126.71G441quarterup1 915 | 916 | k 917 | F441quarternaturalup1 918 | 919 | i 920 | F481halfup1 921 | 922 | n 923 | 924 | 925 | 1611 926 | 927 | d 928 | 929 | 930 | 1611 931 | 932 | 933 | 934 | 935 | G421eighthupbegin1 936 | 937 | o 938 | A421eighthupcontinue1 939 | 940 | f 941 | A421eighthupcontinue1 942 | 943 | 944 | A421eighthupend1 945 | 946 | s 947 | F421eighthnaturalupbegin1 948 | 949 | a 950 | G421eighthupcontinue1 951 | 952 | d 953 | G421eighthupcontinue1 954 | 955 | n 956 | A421eighthupend1 957 | 958 | e 959 | 960 | 961 | G441quarterup1 962 | 963 | s 964 | F441quarternaturalup1 965 | 966 | s 967 | F481halfup1 968 | 969 | 970 | 971 | --------------------------------------------------------------------------------