Skip to content

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
end
▶ コンソールで開く
  • note_on(音の番号) で鳴らし始め、note_off(音の番号) で止めます
  • 音の番号は MIDI の番号で、60 が MML の o4 c(約 262Hz のド)です。1 増えると半音上がります(62 がレ、64 がミ)

やってみよう

  • 好きな曲を MML で書いてみましょう
  • ゲームで、ボタンを押したときに短い音を鳴らしてみましょう(play_mml("o5 l32 c"))