プログラミング 中部大学2025年春期
Scratch で音楽録音&再生
Scratchで音楽を演奏する
音の再生
スプライトに音を登録する。一つのスプライトに複数の音を登録できる。
登録した音は「~の音を鳴らす」(紫)で再生できる。~の部分は選択になっているが、文字列で指定することもできる。
音のライブラリには「音楽の音符」というカテゴリーがあり、様々な楽器のドレミの音がある(Aがラの音で、アルファベット順に上がる)。
音を順に再生することで音楽にする。
文字列の操作の練習
- 「~と聞いて待つ」(水色)を使うと、操作者が文字列をプログラムに与えることができる。
- 「答え」(水色)のブロックを「~と〇秒言う」(紫)に入れて、入力値がブロックで使えることを理解する。下の図の上のスクリプト。
- 名前を入力すると「○○さんおはようございます。」と答えるプログラムに改良する。「~と~」(緑)ブロックを使って、入力された文字列と「さんおはようございます。」をつなぐ。
つないだ文字列を表示させる。下の図の下のスクリプト。
配列の操作の練習
一続きのデータは配列(Scratchではリストと呼ぶ)に入れると操作しやすい。
- データ(オレンジ)の「リストをつくる」ボタンをクリックしてリストを作成する。
「主語」と「述語」という名前の二つのリストをつくる。
- リストの中身を編集する。
ステージ画面(スプライトがあるところ)にリストが表示されているので、左下の+をクリックして項目を増やす。それぞれのリストに適当な語を追加する。
- 「〇番目(リスト名)」のブロックを「~と〇秒言う」ブロックにいれる。
リストの〇番目の数値を変更すると表示される文字が変わることを確認する。
- 「〇から〇までの乱数」(緑)をリストの番号にいれる。
1からリストの長さ(例えば3)までの乱数をつくって、リストの文字列をランダムに表示するようにする。
- 乱数の上限を「(リスト名)の長さ」(オレンジ)ブロックにする。
最初に作成した主語リストと述語リストを連結して面白いことをネコにしゃべらせる。
音を順に再生する
- ネコの音にどれか一つの楽器の音をCからC2まで登録する。
例えばC PianoからC2 Pianoを登録する。
- 「~の音を鳴らす」で登録した音が出ることを確認する。
- 「~の音を鳴らす」の「~」の部分は文字列で置き換えることができる。
演算の「〇と〇」(文字列連結)の左に「C」、右に「 Piano」(先頭の空白に注意)といれ、これを「~の音を鳴らす」の~にいれる。
同様に音がなることを確認する。
- keyという名前のリストを作成する。
データとしてCからC2まで入れる。
- 変数kを作成する。kを1からkeyの長さまで変化させる。
kを1ずつ変えながら、k = keyの長さ まで繰り返す。
- 「終わるまで〇の音を鳴らす」を使って登録した音を順に再生する。
キーボードで演奏する
押されたキーに応じて音を鳴らす
AからH(C2の代わりに使用する)のキーを使って音を鳴らす。
- 「スペースキーが押されたとき」(茶色)のイベントをとらえてスクリプトを実行する。
- キーボードの操作(キーが押されたかどうか)を監視する。
Aが押されたとき、「A Piano の音を鳴らす」を実行する。
- 同様にして他のキーも監視して、音を鳴らすようにする。(下の図ではAキー以外は省略している)。
押された順序を記録する
キーを押した順番を配列keyに入れる。
- Scratchのリストは前回実行時のデータが残っているので最初にこれを初期化する。
初期化とはすなわち空にすることである。
- 押されたキーを変数kにいれる。
変数kを使って音を鳴らし、リストkeyにデータを追加する。
キーを押した間隔を記録する
それぞれの音を鳴らす間隔を記録する。
- リストsecを用意する。
- keyと同様に初期化する。
- 「タイマーをリセット」(水色)のブロックを実行する。
- それぞれのキーが押されたタイミングで「タイマー」の値をsecにいれ、「タイマーをリセット」する。
記録した演奏を再生する
- secに記録した時間待つブロックをいれる。
演奏して再生する
簡単な曲を演奏して、Scratchに再生させよ。
完成したScratchのプロジェクトファイル
課題
文字を入力して、それが回文(上から読んでも下から読んでもおなじことば)のとき、「逆さ言葉だニャー」と答え、回文でないとき「違うニャー」と答えるプログラムを作成せよ。
プログラムはScratchのメニューの「ファイル」-「コンピュータに保存する」で保存することができる。
作成したプログラムを提出すること(これまでのようにスクリーンショットではないことに注意する)。
プログラム作成のヒント
- 空のリストを用意する。
- ユーザーに文字列を入力させる。
- 変数nを用意し、1にする。
- nを1から答えの長さまで変えながら、入力された文字列のn番目の文字をリストに追加する。
- 文字列を逆さにしたものをいれる変数(例えばr)を用意する。
- nをリストの長さから1つずつ減らしながらリストのn番目をrに付け加える。rとリストのn番目を結合して、それをrにいれるようにする。
- ユーザーの入力値とrが等しいか比べ、それぞれに応じた返事をさせる。
回文をいれたとき
回文でない言葉をいれたとき