ABC notation for micro:bit
目的
音楽の入力と演奏を簡単にすること。Mozartの音楽のサイコロ遊びをmicro:bitで遊びたいな。
複数台のmicro:bitで合唱や和音が演奏できること。
音符の再生や音楽の始まり・終わりでトリガーを発して処理できること。演奏に合わせてLEDが点滅するとか。
✗ すでにあるABC楽譜に完全に対応するのがゴールではない。できたらやるけど、曖昧な定義とか例外が多すぎて多分無理。ちゃんとそれを実現できてるabcjs(JavaScript for rendering abc music notation)等は本当にすごい。
でもいまは時間も技術もないので、miniかsubsetか、なんならpseudoな拡張を作ろう。
→ABCnotation(mini)を作ることにする。
msonrm/pxt-abc-notation: MakeCode extention "ABC notation" beta 作りかけ。
ABC 最新作りかけ
https://gyazo.com/aae406555e237865244a20fcc9cea428
クラス無しだと、途中割込みできない?既存のmusic.tsの動作検証が必要
参考 JavaScriptでの実装例abcjs(JavaScript for rendering abc music notation)
radioで複数台連動させて、和音とか合奏させたい
1音演奏毎にアクション起こせるようにしたい。ピアノロール表示もどきとか、複数台のときにどっから音出てるか見えるようにしたり、サーボ連動とか
小節の繰り返し指定、連符、タイ、付点(>)、スタッカートは最初は対応しない
① 臨時記号、音名、オクターブ指定、音長(省略形も対応予定)、休符、のみで対応
② 小節をまたがないタイ
② スタッカート(.)→音長を半分にし、同じ長さの休符をつける
③ 付点、連符など、複数音符にまたがる音長指定
④ 小節をまたぐタイ(小節化の処理を作り直す羽目になる)
⑤ 小節の繰り返し指定
score(文字列)→小節の配列、小節の配列→音符の配列の配列、を関数化しておいて、あとでいじれるようにしておく
最初に音符要素・小節要素に分けて配列にし、配列の要素を一つ一つ見ていって、音楽構造をつける?
小節線は、|(小節線)、|](終止線)、||(複縦線)、[|(?)、|:(繰り返し開始)、:|(繰り返し終了)、::(繰り返しの開始と終了)、[1とか[2(繰り返しの1カッコ2カッコ)の、8種類を対象に
頭から1文字ずつ見ていって、|、[、:、の3種類が出現したら、次の文字を見て、、、
前後にデリミタを挿入して、あとで配列の要素にする?
それか、単純にデリミタに変換して、小節配列の区切りにする(いつかちゃんと音楽構造に反映させたい)
要素の区切りごとにカンマを挿入していって、splitメソッドを使って配列(一次)に
まず、ABCで区切り文字として機能しているスペースとバッククォートを全削除してから処理。あと、機能しないからスラー(丸カッコ)も削除対象ね
Python Tips:文字列を複数の区切り文字で分割したい - Life with Python