5. 音を鳴らす
スピーカーでメロディを鳴らします。
rb
▶ コンソールで開く# チュートリアル 5: MML でメロディを鳴らす。
require 'adventure_board'
GC.start
speaker = AdventureBoard.speaker
speaker.reset
speaker.play_mml("t120 o4 l8 c d e f g4 g4 a a a a g2")シミュレータで音が出ないとき
ブラウザは、ボタンを押すまで音を出させてくれません。Run を押すと音が出せるようになります。 音が聞こえなくても、「▸ 鳴った音を見る」で何が鳴ったかを確かめられます。
MML
曲は MML(音楽を文字で書く書き方)で書きます。
| 書き方 | 意味 |
|---|---|
c d e f g a b | ドレミファソラシ |
r | 休み |
c4 c8 c2 | 音の長さ(4 で 4 分音符、8 で 8 分音符、2 で 2 分音符) |
l8 | 長さを書かなかった音の長さ |
o4 | 高さ(オクターブ)。数が大きいほど高くなります |
> < | > で 1 オクターブ上げ、< で下げます |
t120 | 速さ(1 分間に 4 分音符いくつ) |
v12 | 音量(0〜15) |
@0 @1 @2 | 音色(四角い波・三角の波・のこぎりの波) |
$ | loop: true のとき、ここから最後までをくり返します |
ruby
speaker.reset前のプログラムが変えた音量や音色を元に戻します。音を鳴らすプログラムの最初に書いておきます。
いくつかの曲を同時に鳴らすこともできます(3 つまで)。サンプルの一覧の「3 声のメロディ」を見てみてください。
ruby
speaker.play_mml([メロディ, 和音, ベース], loop: true) # 3 つ同時に。それぞれの $ からくり返し1 音ずつ鳴らす:ボタンのピアノ
ボタンを押しているあいだだけ音を出します。
rb
▶ コンソールで開く# チュートリアル 5: ボタンのピアノ。押しているあいだだけ音が出る。
require 'adventure_board'
GC.start
matrix = AdventureBoard.matrix
buttons = AdventureBoard.buttons
speaker = AdventureBoard.speaker
# ボタンと音の高さ。MIDI の番号で、60 が MML の o4 c(約 262Hz のド)。1 増えると半音上がる
KEYS = { left: 60, down: 62, right: 64, up: 65, b: 67, a: 69 }
speaker.reset
sounding = nil # いま鳴っている音
while true
note = nil
KEYS.each do |name, n|
note = n if buttons.pressed?(name)
end
if note != sounding
speaker.note_off(sounding) if sounding # 前の音を止める
speaker.note_on(note) if note # 新しい音を鳴らす
sounding = note
matrix.clear
matrix.fill(0x30) if note # 鳴っているあいだ光らせる
matrix.show
end
sleep_ms 10
endnote_on(音の番号)で鳴らし始め、note_off(音の番号)で止めます- 音の番号は MIDI の番号で、60 が MML の
o4 c(約 262Hz のド)です。1 増えると半音上がります(62 がレ、64 がミ)
やってみよう
- 好きな曲を MML で書いてみましょう
- ゲームで、ボタンを押したときに短い音を鳴らしてみましょう(
play_mml("o5 l32 c"))