micro:bitを楽器にするためのチャレンジをしている今回の連載。これまでの2回で、micro:bitを楽器にしてみるプログラムをつくってきたね。まだ読んでない人や、おさらいしたい人は「micro:bitでいろいろ音を鳴らそう」、「micro:bitで演奏しよう」をチェックしてみてね。
「音楽」カテゴリーのブロックに慣れてきたところで、今回はリズムマシンをつくってみよう。リズムマシンとは、音楽をつくるときに使われる機械の一種で、自動でリズムを演奏する装置なんだ。
もしかしたら、この連載を今回初めて読む人もいるかな。コカネットでは、micro:bitを使ったツール「探検ウォッチ」にプログラミングをすることで、いろいろな機能を追加しているよ。雑誌での連載
を含めたバックナンバーは、micro:bit特設サイトでまとめているので、ぜひ見てみてね(記事のバックナンバーを読むのは、コカネット無料会員登録が必要)。
1 音を選ぼう
リズムということで、打楽器のような音が使いたい。こんな時はこれまでにも使った「音楽」カテゴリーの「micro:bit(V2)」にある、「play sound」ブロックが使えるぞ。試しに鳴らしてみたいので、「入力」カテゴリーの「ボタンAが押されたとき」ブロックに、「play sound」ブロックを入れてみよう。
自分で打楽器風の音をつくることもできるけど、まずは用意されている音を使ってみよう。ブロックの波の模様がある部分をクリックして表示された編集画面の、ギャラリーから選んでみるぞ。
「Kick Drum」、「Tom」、「Snare」、「Hi-Hat」あたりが使いやすそうだ。音楽が好きな人は知っているかもしれないが、これらはドラムセットに欠かせない音の種類だね。ギャラリーの音も、選択した後は編集画面で編集できるようになるので、もし興味があれば好みの音になるように調整してもいいぞ。どんな音か聞いてみたい場合は、MakeCodeのシミュレーターで試してみることができるよ。
2 しくみを考えよう
次に、リズムマシンの仕組みを考えるぞ。micro:bitのLED画面を使って、リズムのパターンをつくり出せるように考えてみる。micro:bitには、5×5で25個のLEDがあるけれど、リズムの定番は4拍なので、4×5マスを使うとつくりやすそうだ。
まず、左上の4×4マス分を、リズムを作成するエリアにする。4段あるので4種類の音を鳴らすことができる。そして一番下の4つのLEDは、今、何拍目なのかを表示する。
一番右の1列が余っているけど、あとで機能を追加したいときに使えるので、そのままにしておこう。
3 4拍刻んでみる
さっそく、一番下のLEDで何拍目なのかを表示するプログラムをつくろう。左から順に1、2、3、4と拍を刻ませるぞ。
「ループ」カテゴリーの「変数(カウンター)を0~(4)に変えてくりかえす」ブロックを使うと、「カウンター」という名前の変数を0、1、2、3と1周ごとに変化させながらくり返すことができる。今回は、変化の幅を0~3に変える。変数「カウンター」を「LED」カテゴリーの「点灯 x(0) y(0)」ブロックのxに入れる。yを4にすると、LEDは左から4つをくり返し点灯させることになる。
ただ、このままだとLEDが点灯しっぱなしなので、「消灯 x(0) y(0)」ブロックも使う。変数「カウンター」をxに入れるぞ。
点灯と消灯のブロックの間には「音」カテゴリーの「休符」ブロックを入れると、LEDが順番に点灯することがわかるだろう。
ちなみに「カウンター」という変数名は初期的につけられた名前というだけなので、自分でわかりやすい名前にした変数でも、このくり返しのブロックで使うことができるぞ。
4 4種類の音を鳴らす
次に、4種類の音を鳴らすプログラムをつくっていくぞ。「論理」カテゴリーの「もし~なら」ブロックを次のような形に編集しよう。
一番下にある「+」ボタンで「でなければもし~なら」を追加できる。3つ目の「でなければもし~」を追加したら、そのあと、最後の「でなければ」は「-」ボタンで消しておこう。4種類の音を入れられるようになればOKだ。この「もし~なら…」ブロックは「点灯 x(カウンター) y(0)」ブロックのすぐ後に入れるぞ。
ここでリズムをつくる4種類の音を入れておこう。今回は「Kick Drum」、「Tom」、「Snare」、「Hi-Hat」を上から順に入れていくぞ。これだけだと、「kick Drum」の音が4拍鳴るはずだ。
さてここで、どのようなときに音を鳴らすのか条件を考えてみよう。「LED」カテゴリーのブロックを見てみると、LEDが点灯しているかどうかを条件として使える「LED x(0) y(0)が点灯している」というブロックがあるのに気づくだろう。
このブロックは「もし〜なら」ブロックの条件の部分に入れられるので使えそうだ。xには変数「カウンター」を入れて、yは0として1番目の条件にしよう。
これは、現在再生している列のLEDの0番目(1番上)が点灯していると、「Kick Drum」の音が鳴ることになる。2〜4番目の条件にも、xには変数「カウンター」を入れて、yは1~3を入れて次のように組み立てるぞ。
5 リズムのパターンを入力する
しかしこのままでは音は鳴らなくなってしまう。音を鳴らす条件は0から3番目までのLEDが点灯しているかどうかなので、LEDを点灯させるプログラムをつくろう。このプログラムは「最初だけ」ブロックと組み合わせて、最初に音の設定をする。
さて、LEDを点灯させる「点灯 x(0) y(0)」ブロックを4つ使って、次のようにしてみたぞ。xは0~3全てを使い、yは0~3で自由に入れてみてほしい。
4拍のリズムが鳴り出したら成功だ。「最初だけ」ブロックのyの値を、1~3の間でいろいろ変えると、異なるリズムがつくれるぞ。
6 もっとおもしろくしてみよう
もし自分でリズムをつくるのが大変なら、yの値を「計算」カテゴリーにある「(0)から(10)までの乱数」ブロックにして、自動的につくることもできるぞ。その時は「(0)から(3)までの乱数」に数値を変えておこう。「最初だけ」ブロックは最初に一度だけ実行されるので、裏面のリセットスイッチを押すことで、毎回新しいリズムが楽しめるはずだ。
今のプログラムだと、少しテンポがゆっくりに感じるかもしれない。その場合は休符を短くしてみよう。
また、「play spund」ブロックの右端の設定にも注目してみよう。「until done」は音が鳴り終わるまでそのブロックの処理時間となり、「in background」は音を鳴らし始めたら次の処理に進むようだ。ドラムの種類によって多少音の再生時間が異なるので、リズムを正確に刻みたいなら、「in background」の方が良さそうだ。
ランダムでリズムのパターンが変わるだけでなく、LEDの点灯する場所を変更するプログラムをつくればMakeCodeでプログラムの変更をせずに、micro:bitだけでいろいろなリズムをつくれそうだ。ボタンA、Bで操作したり、傾きセンサーを使って、リズムを変えるスイッチにするのもよいかもしれない。いろいろな機能を追加して、音楽づくりを楽しんでほしい。
文