QRジュークボックスを改造してみよう

 『子供の科学』2020年8月号の別冊付録
べっさつふろく
「QRコードプログラミングBOOK」は読んでくれたかな?

QRコードプログラミングBOOK表紙

 今回はこの付録の中で紹介
しょうかい
した「QRジュークボックス」を改造
かいぞう
して、演奏
えんそう
する楽器
がっき
やテンポ、音符
おんぷ

はく
指定
してい
できるようにしてみよう。別冊付録で紹介したコードを元にして改造をしていくよ。まずは別冊付録を読んでQRジュークボックスのしくみを確認
かくにん
しておこう。改造前のコードは特設サイトの「3.3 プロジェクト#3 QRジュークボックス」からダウンロードすることができるぞ。

1  改造前のQRジュークボックス

 最初に改造する前のQRジュークボックスのコードについて、整理
せいり
をしておこう。QRコードの拡張機能
かくちょうきのう
が使えるScratchを使って、以下のようなコードをつくっておいた。

QRジュークボックスのコード(改造前)

 
みどり

はた
をクリックするとQRコードが読み取れるまで待ち、読み取りが完了すると変数の「数」を1ずつ増やしながら、QRコードの文字のASCIIコードを音階
おんかい
変換
へんかん
して演奏をするというしくみだ。

 きらきら星のメロディーを演奏するためのQRコードは以下のようになるね。

きらきら星のQRコード

 このコードだと、全ての音符を0.25拍で鳴らしているので、原曲
げんきょく
雰囲気
ふんいき
が少し
ちが
うし、楽器の選択
せんたく
などもできないという問題
もんだい
がある。今回はQRコードに記録
きろく
する音楽データを設計
せっけい
しなおして、楽器・テンポ・音階・拍を保存
ほぞん
し、より原曲に忠実
ちゅうじつ
な演奏ができるジュークボックスに改造してみよう。

2  音楽データの再設計

 まずは音楽データをどのようにQRコードに保存
ほぞん
するかを考えてみよう。これまでは音階の数字に対応する文字をQRコードに保存していたね。きらきら星のはじめについて図にしてみると、以下のようになっていた。

きらきら星のQRコードをASCIIコードに変換

 今回はQRコードの内容の先頭
せんとう
に「テンポ」と「楽器」の情報
じょうほう
格納
かくのう
するようにして、その後にメロディーとなる「音階」と「拍」をセット(1つの音に関して情報が2つ)にして保存するようにしてみよう。つまり以下のような内容をQRコードに記録していくことにしよう。

改造後の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コードをそのまま設定しよう。

QRコードの内容を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コード作成サイトで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コード

 今回改造したQRジュークボックスのコードは以下からダウンロードできるぞ。リンク先にアクセスをして、zipファイルをダウンロードしてね。zipで圧縮
あっしゅく
されているので、解凍
かいとう
して、できたsb3ファイルを読み込んで使用してね。

<文/杉浦 学(鎌倉女子大学)>

子供の科学2020年8月号

特集ではサイエンスアーティスト・YouTuberとしても活躍している市岡元気先生が実験術を伝授! とじ込み付録は図形認識能力が身につく算数パズル「三色問題の謎を解け」。出題されている問題をパズルで解いてみよう!
8月号の詳細はこちら

最新情報をチェックしよう!