Skip to content

Instantly share code, notes, and snippets.

@kvvzr
Last active August 29, 2015 14:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kvvzr/9b5b86f1238e8993ea4e to your computer and use it in GitHub Desktop.
Save kvvzr/9b5b86f1238e8993ea4e to your computer and use it in GitHub Desktop.
eVY1をPythonで試す
# -*- coding: utf-8 -*-
import re, time, mido
# 参考: https://github.com/yamaha-webmusic/nsx1-apps/blob/master/text-input/js/nsx1.js
text_map = {
'あ': 'a', 'い': 'i', 'う': 'M', 'え': 'e', 'お': 'o',
'か': 'k a', 'き': 'k i', 'く': 'k M', 'け': 'k e', 'こ': 'k o',
'さ': 's a', 'し': 'S i', 'す': 's M', 'せ': 's e', 'そ': 's o',
'た': 't a', 'ち': 'tS i', 'つ': 'ts M', 'て': 't e', 'と': 't o',
'な': 'n a', 'に': 'J i', 'ぬ': 'n M', 'ね': 'n e', 'の': 'n o',
'は': 'h a', 'ひ': 'C i', 'ふ': 'p\\ M', 'へ': 'h e', 'ほ': 'h o',
'ま': 'm a', 'み': 'm i', 'む': 'm M', 'め': 'm e', 'も': 'm o',
'ら': '4 a', 'り': '4\' i', 'る': '4 M', 'れ': '4 e', 'ろ': '4 o',
'が': 'g a', 'ぎ': 'g\' i', 'ぐ': 'g M', 'げ': 'g e', 'ご': 'g o',
'ざ': 'dz a', 'じ': 'dZ i', 'ず': 'dz M', 'ぜ': 'dZ e', 'ぞ': 'dz o',
'だ': 'd a', 'ぢ': 'dZ i', 'づ': 'dz M', 'で': 'd e', 'ど': 'd o',
'ば': 'b a', 'び': 'b\' i', 'ぶ': 'b M', 'べ': 'b e', 'ぼ': 'b o',
'ぱ': 'p a', 'ぴ': 'p\' i', 'ぷ': 'p M', 'ぺ': 'p e', 'ぽ': 'p o',
'や': 'j a', 'ゆ': 'j M', 'よ': 'j o',
'わ': 'w a', 'ゐ': 'w i', 'ゑ': 'w e', 'を': 'o', 'ん': 'N\\',
'ふぁ': 'p\ a', 'つぁ': 'ts a',
'うぃ': 'w i', 'すぃ': 's i', 'ずぃ': 'dz i', 'つぃ': 'ts i', 'てぃ': 't\' i',
'でぃ': 'd\' i', 'ふぃ': 'p\' i',
'とぅ': 't M', 'どぅ': 'd M',
'いぇ': 'j e', 'うぇ': 'w e', 'きぇ': 'k\' e', 'しぇ': 'S e', 'ちぇ': 'tS e',
'つぇ': 'ts e', 'てぇ': 't\' e', 'にぇ': 'J e', 'ひぇ': 'C e', 'みぇ': 'm\' e',
'りぇ': '4\' e', 'ぎぇ': 'g\' e', 'じぇ': 'dZ e', 'でぇ': 'd\' e', 'びぇ': 'b\' e',
'ぴぇ': 'p\' e', 'ふぇ': 'p\ e',
'うぉ': 'w o', 'つぉ': 'ts o', 'ふぉ': 'p\ o',
'きゃ': 'k\' a', 'しゃ': 'S a', 'ちゃ': 'tS a', 'てゃ': 't\' a', 'にゃ': 'J a',
'ひゃ': 'C a', 'みゃ': 'm\' a', 'りゃ': '4\' a', 'ぎゃ': 'N\' a', 'じゃ': 'dZ a',
'でゃ': 'd\' a', 'びゃ': 'b\' a', 'ぴゃ': 'p\' a', 'ふゃ': 'p\' a',
'きゅ': 'k\' M', 'しゅ': 'S M', 'ちゅ': 'tS M', 'てゅ': 't\' M', 'にゅ': 'J M',
'ひゅ': 'C M', 'みゅ': 'm\' M', 'りゅ': '4\' M', 'ぎゅ': 'g\' M', 'じゅ': 'dZ M',
'でゅ': 'd\' M', 'びゅ': 'b\' M', 'ぴゅ': 'p\' M', 'ふゅ': 'p\' M',
'きょ': 'k\' o', 'しょ': 'S o', 'ちょ': 'tS o', 'てょ': 't\' o', 'にょ': 'J o',
'ひょ': 'C o', 'みょ': 'm\' o', 'りょ': '4\' o', 'ぎょ': 'N\' o', 'じょ': 'dZ o',
'でょ': 'd\' o', 'びょ': 'b\' o', 'ぴょ': 'p\' o'
}
kana = u'あいうえおか-もやゆよら-ろわをんゔー'
small_kana = u'ぁぃぅぇぉゃゅょゎ'
mora_pattern = re.compile(u'([' + kana + ']?[' + small_kana + ']?)')
def split_by_mora(kana):
return filter(lambda i: i, re.split(mora_pattern, kana))
input_text = u'こんにちは'
output = []
for t in list(split_by_mora(input_text)):
output += [text_map[t.encode('utf-8')]]
outport = mido.open_output('eVY1 MIDI')
for t in output:
sysex = mido.Message('sysex', data=[0x43, 0x79, 0x09, 0x00, 0x50, 0x10])
sysex.data += bytearray(t)
sysex.data += [0x00]
outport.send(sysex)
outport.send(mido.Message('note_on', note=72))
time.sleep(0.5)
outport.send(mido.Message('note_off', note=72))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment