『子供の科学』2020年8月号の別冊付録
「QRコードプログラミングBOOK」は読んでくれたかな?
今回はこの付録の中で紹介
した「QRジュークボックス」を改造
して、演奏
する楽器
やテンポ、音符
の拍
を指定
できるようにしてみよう。別冊付録で紹介したコードを元にして改造をしていくよ。まずは別冊付録を読んでQRジュークボックスのしくみを確認
しておこう。改造前のコードは特設サイトの「3.3 プロジェクト#3 QRジュークボックス」からダウンロードすることができるぞ。
1 改造前のQRジュークボックス
最初に改造する前のQRジュークボックスのコードについて、整理
をしておこう。QRコードの拡張機能
が使えるScratchを使って、以下のようなコードをつくっておいた。
緑
の旗
をクリックするとQRコードが読み取れるまで待ち、読み取りが完了すると変数の「数」を1ずつ増やしながら、QRコードの文字のASCIIコードを音階
に変換
して演奏をするというしくみだ。
きらきら星のメロディーを演奏するためのQRコードは以下のようになるね。
このコードだと、全ての音符を0.25拍で鳴らしているので、原曲
と雰囲気
が少し違
うし、楽器の選択
などもできないという問題
がある。今回はQRコードに記録
する音楽データを設計
しなおして、楽器・テンポ・音階・拍を保存
し、より原曲に忠実
な演奏ができるジュークボックスに改造してみよう。
2 音楽データの再設計
まずは音楽データをどのようにQRコードに保存
するかを考えてみよう。これまでは音階の数字に対応する文字をQRコードに保存していたね。きらきら星のはじめについて図にしてみると、以下のようになっていた。
今回はQRコードの内容の先頭
に「テンポ」と「楽器」の情報
を格納
するようにして、その後にメロディーとなる「音階」と「拍」をセット(1つの音に関して情報が2つ)にして保存するようにしてみよう。つまり以下のような内容をQRコードに記録していくことにしよう。
きらきら星のメロディーを、テンポを「60」、楽器を「クラリネット(楽器の番号は10)」に設定をして、演奏する場合について考えよう。拍についても必要
な音は伸ばすようにしてみるよ。
QRコードを使わずに、ブロックを使って演奏する場合のはじめの方は以下のようになる。QRコードを読み取ったときに、このコードをつくったのと同じ演奏ができるようになればOKだ。
ここで考えなければいけない問題が2つあるぞ。順番
に解決策
を考えていこう。
1つ目は楽器の選択の方法だ。Scratchでは楽器に番号がついていて、1から21までの21種類
が選べるようになっている。
QRコードに演奏したい楽器の番号を記録しておけばよいのだけれど、1から21に対応するASCII(アスキー)コードの文字はNULL(ヌル)文字や改行
などの特殊
な文字で、これをQRコードに記録することはできない。QRコード作成サイトを使ってうまく記録できる文字のASCIIコードは33(「!」)から126(「~」)の間なので、少し工夫が必要だね。先頭の楽器の番号については、読み取った文字のASCIIコードから「32」を引いた数に設定するようにしておくという方法にしよう。
例えば、楽器の番号が「1」のピアノを設定したい場合は、ASCIIコードが33の「!」を記録しておけばよいことになる。つまりASCIIコードの数字をシフトするという作戦
だ。テンポについてはほとんどの場合がそのまま設定できるので、文字のASCIIコードをそのまま設定しよう。
2つ目の問題は拍の指定方法だ。Scratchで音楽を演奏する場合、例えばテンポを60にした場合は、4分音符の拍は1、8分音符の拍は0.5にすればよい。つまり、1や0.5といった小さな数値を指定する必要がある。
テンポを指定できるようにするので、テンポを速く(大きく)して、指定する拍の数字も大きくするという方法もあるけれど、拍として指定する数字のパターンは多くないので、違う方法で拍を指定してみよう。
全音符、2分音符、4分音符、8分音符、16分音符の5種類の拍を指定できるとして、それぞれをQRコードに記録できる範囲
のASCIIコードの文字に対応させて記録することにしよう。ABCDEのそれぞれの文字に5種類の音符を対応させたルールを考えてみたぞ。
このルールに従うと、きらきら星の最初の1小節
を演奏するQRコードのデータは「<C<CCCCCECECCB」となる。1音目の音階と拍を表現した「<C」は「<」のASCIIコードの「60」が音階、拍が「C」で1拍となるというしくみだ。次からこのルールに基づいてQRコードをメロディーに変換するコードをつくってみよう。
3 テンポと楽器を読み取る
まずはテンポと楽器を読み取って設定するコードからつくってみよう。QRコードを読み取るところまでは同じで、テンポ(QRコードの1番目の文字をASCIIコードにしたもの)と楽器(2番目の文字をQRコードしたものから、32を引いたもの)を設定するコード(赤枠
)を追加しよう。
4 指定された音階と拍で演奏する
次に音階を指定した拍で演奏する部分をつくっていこう。まずは拍を設定するための分岐
の部分をつくってみよう。拍を保存しておくための「拍」という変数を、すでにつくってある「数」の変数に追加してつくろう。
次は変数「拍」を指定した数字に設定する分岐を作成しよう。A(65)、B(66)、C(67)、D(68)、E(69)のそれぞれのASCIIコードによって、全音符から16分音符までを設定する。数という変数を1ずつ増やしながらQRコードの内容を演奏していくので、数+1番目の文字を読み取って拍を決めればよいね。
最後に音階を読み取って演奏をする部分と組み合わせよう。テンポと楽器を読み取った後の3文字目から順番にQRコードの情報を読み取るぞ。何番目を読み取りしているかを保存しておく変数「数」は3からスタートさせよう。この「数」を2ずつ増やしながら、音階の数分(QRコードの長さからテンポと楽器のデータの2文字を引いて、半分にした)だけ繰
り返していくよ。
これでも演奏はできるけれど、拍を決める部分が少し長いので、ブロック定義
で「拍を決める」というブロックをつくって分割
してみよう。引数
にはASCIIコードを指定するようにして、ルールに従って変数「拍」の値を設定する。演奏のコードからは定義したブロックを使って、拍を決めるようにしてみた。これでコードがわかりやすくなったね。
このコードで演奏ができる『きらきら星』のQRコードを掲載
しておこう。クラリネットで演奏するぞ。
QRコードのつくり方は別冊付録でも解説をしたけれど、以下のような文字列をQRコード作成サイトでQRコードに変換
すればOKだ。
<*<C<CCCCCECECCBACAC@C@C>C>C<BCCCCACAC@C@C>BCCCCACAC@C@C>B<C<CCCCCECECCBACAC@C@C>C>C<B
最後に『夕焼け小焼け』をフルートで演奏するQRコードを掲載しておこう。自分の好きな曲をQRコードにして演奏して楽しんでみてね。
今回改造したQRジュークボックスのコードは以下からダウンロードできるぞ。リンク先にアクセスをして、zipファイルをダウンロードしてね。zipで圧縮
されているので、解凍
して、できたsb3ファイルを読み込んで使用してね。
<文/杉浦 学(鎌倉女子大学)>
子供の科学2020年8月号
特集ではサイエンスアーティスト・YouTuberとしても活躍している市岡元気先生の実験術を伝授! とじ込み付録は図形認識能力が身につく算数パズル「三食問題の謎を解け」。出題されている問題をパズルで解いてみよう!
8月号の詳細はこちら