専門知識がなくても、楽譜などから曲を出来るだけ簡単に入力できる様にしてあります。
const unsigned char songdata[]のカッコ内にテンポ、音階、長さを入れていきます。最後にCMD ENDで終了とします。
区切りは、スペースかタブで区切ります。
例
const unsigned char songdata[]={
CMD 100 TEMPO //テンポ定義
R L8D F$ T12 C$ T24 F$ T24 F$ T24 〜 G$ T12 F$ T48 //楽譜
CMD END //曲の終わり
};
コマンドは合計4つあります。
曲の終わり | CMD END | 曲の最後に必ず記入します |
テンポ指定 | CMD 数字 TEMPO | テンポは0〜254まで設定でき、0が一番速く、数字が大きくなると遅くなります。 テンポチェンジはどこで行っても構いません。 255はコマンドの予約語で使用不可です。 例 CMD 150 TEMPO C L4 A$ L2 CMD 80 TEMPO D L4 G L16 CMD END |
音階指定 | 音階を参照 | 音階を特定の記号でセットします。 |
音符長指定 | 音符長を参照 | 音階の音符長をセットします。 音階の後に必ずセットします。省略はできません。 |
ダイレクト数値設定は可能ですが、音階と音符長関係が分かりにくくなったりするなど、作業効率が低下する原因となり、あまりお勧めしません。
音符長のダイレクト指定 | 数字, | 直接音の長さを指定する場合は、直接数値を入力できます。 その場合は , (セミカンマ)を数字の後に入れます。また扱える数字は1〜254です。 255はコマンドの予約語で使用不可です。 例 C L4 D 254, E L6 F 122, A |
音階のダイレクト指定 | 数字, | アラビア音階や純旋律音階など、平均調律以外の音を使う場合は、直接数字を使って入力できます。 227以上は、割り込みが間に合わなくなる可能性があり、正常な動作ができません。 例 C L4 D L4 157, F L8 ..... |
音階 | setdata | 音階 | setdata | 音階 | setdata | |
---|---|---|---|---|---|---|
-1oct | middle | +1oct | ||||
C | 261.63 | 19 | 523.25 | 139 | 1,046.50 | 198 |
C# | 277.18 | 33 | 554.37 | 145 | 1,108.73 | 202 |
D | 293.66 | 45 | 587.33 | 152 | 1,174.66 | 205 |
D# | 311.13 | 57 | 622.25 | 158 | 1,244.51 | 208 |
E | 329.63 | 68 | 659.26 | 163 | 1,318.51 | 211 |
F | 349.23 | 79 | 698.46 | 169 | 1,396.91 | 213 |
F# | 369.99 | 89 | 739.99 | 174 | 1,479.98 | 216 |
G | 392.00 | 99 | 783.99 | 178 | 1,567.98 | 218 |
G# | 415.30 | 108 | 830.61 | 183 | 1,661.22 | 220 |
A | 440.00 | 116 | 880.00 | 187 | 1,760.00 | 222 |
A# | 466.16 | 124 | 932.33 | 191 | 1,864.66 | 224 |
B | 493.88 | 131 | 987.77 | 195 | 1,975.53 | 226 |
半音上げる記号#は$を使います。A#→A$
フラット♭については、シャープに読み替えます。
B♭→A$
これら音階と休符の後には必ずスペースもしくはタブで文字間を空けて、
音符長データを付加させます。
休符はRを使用します。無音となります。
音階(#) | ド | ド# | レ | レ# | ミ | ファ | ファ# | ソ | ソ# | ラ | ラ# | シ |
---|---|---|---|---|---|---|---|---|---|---|---|---|
C | C# | D | D# | E | F | F# | G | G# | A | A# | B | |
音階(♭) | ド | レ♭ | レ | ミ♭ | ミ | ファ | ソ♭ | ソ | ラ♭ | ラ | シ♭ | シ |
C | D♭ | D | E♭ | E | F | G♭ | G | A♭ | A | B♭ | B | |
-1oct. | CL | C$L | DL | D$L | EL | FL | F$L | GL | G$L | AL | A$L | BL |
default | C | C$ | D | D$ | E | F | F$ | G | G$ | A | A$ | B |
+1oct. | CH | C$H | DH | D$H | EH | FH | F$H | GH | G$H | AH | A$H | BH |
休符 | R |
English | 日本語 | 100%GATE | 66%GATE |
---|---|---|---|
whole | 全音符/休符 | L1 | T192 |
half | 2分音符/休符 | L2 | T96 |
triplets half | 3連2分音符/休符 | L3 | T64 |
quater | 4分音符/休符 | L4 | T48 |
dotted quater | 付点4分音符/休符 | L4D | T72 |
triplets quater | 3連4分音符/休符 | L6 | T32 |
eighth | 8分音符/休符 | L8 | T24 |
dotted eighth | 付点8分音符/休符 | L8D | T36 |
triplets eighth | 3連8分音符/休符 | L12 | T16 |
sixteenth | 16分音符/休符 | L16 | T12 |
dotted sixteenth | 付点16分音符/休符 | L16D | T18 |
triplets sixteenth | 3連16分音符/休符 | L24 | T8 |
32th | 32分音符/休符 | L32 | T6 |
dotted 32th | 付点32分音符/休符 | L32D | T9 |
triplets 32th | 3連32分音符/休符 | L48 | T4 |
64th | 64分音符/休符 | L64 | T3 |
triplets 64th | 3連64分音符/休符 | L96 | T2 |
192th(The minimum unit) | 192分音符/休符 | L192 | T1 |
※音符について詳しい事はWikipediaの音符等を参照してください。
32分音符以上の速い音符は装飾音や効果音位の利用となるでしょう。上記表中で3連音符と書いていますが、便宜上であり、曲によっては5連符や7連符だったり、装飾音だったりします。
例 4分音符でドレミファ C L4 D L4 E L4 F L4
全音符以上の長さの場合は、同じ音をつなげます。同じ音が続くと、実際の再生は音がつながります。
例 ドの音がスラーで4小節続く場合 C L1 C
L1 C L1 C L1
同じ音が続いて音を切りたい場合は、休符を入れます。その場合は音符+休符でオリジナルの音符長になるようにします。
例 1小節中に ラの音が4つある
A L4 A L4 A L4 A L4 //これだと音がつながって、全音符のラの音になってしまう。
A L8D R L16 A L8D R L16 A L8D R L16 A L8D R L16 //付点8分音符と16分休符の組み合わせを使う。
同音を簡単に切れるようにTxx を用意しています。これを使えば音符を簡単に分ける事ができて、煩わしい休符計算が不要になります。なお、数字がLxxと違う表記ですが、全音符を192タイムコードと意識した表現になった為です。
A T48 A T48 A T48 A T48 //66%ゲートで全音符が4回切れて聞こえる
Txxコマンドは便利ですが、1音符について2回分のデータを消費します。Rなどの休符の後や異なる音符が続く場合は、Txxコマンドを使わずにLxxコマンドを使用する事でメモリー消費を抑える事ができます。
現在の仕様書と同じです。
テンポ指定 直接メモリーに値を入れます。
テンポチェンジはどこで行っても構いません。
例 tempocont = 176;
特別ルール
全音符以上の長さの場合は、同じ音の指定を省略できます。
C L1 C L1 C L1 →C L1 L1 L1
直接音の長さを指定する場合は、wtime();を使います
例 C L4 D wtime(254); E L6 F wtime(122);
A
2和音が使用できます。
2つ目のパートは最初にHをつけます。
音が切り替わったパートに対して音符長データをつけます。
// CH1 CH2 Length
FL HA L8
AL L8
C L8
F L8
出来るだけ、音がダブらないように入力するほうが良い音がだせます。
C HC L8 → 同じドの音がなる。
CL HC L8 → チャンネル1のドの音を1オクターブ低くした
履歴
2011/12/18 一部修正、加筆。
2011/9/3 HI-TECH C PRO for the PIC10/12/16 MCU Family (Lite mode)に対応に伴う説明変更。
2003/12/23 初版
(C)2003-2011 air variable All Rights Reserved..