太子プログラミングクラブ中級第2期・初級第2期(2026年9月)~音を計算する~

太子プログラミングクラブは、音をプログラミングの続き。初級は、3D造形に取り組みます。

初級は3DCAD初挑戦

8月にJavaScript のコードから3Dの造形をしたメンバーたち。9月は3DCADを使って造形に挑戦します。

3DCADが初級にいいなと考えたのは、これがマウス操作必須だからです。タッチデバイスが当たり前になった今のデジタルネイティブの子どもたちは、マウス操作が異質なものと感じているようです。マウスを使うようにと何回も言っても、ついついノートパソコンのタッチパッドに手が伸びてしまうという実態があります。

これを、強制的にマウスに慣れさせる手段はないかなと考えていたところです。ゲームも一つの手段ですが、あまりゲームばかりやるのも芸がないと思います。そこで、「自分の作りたいものを3DCADで作ってしまう」という強烈なモチベーションを餌に、マウス操作を覚えてしまおうという作戦です。

Windows 95や98が出た頃に小中学校の思春期を迎えた私たちにとっては、マインスイーパーやフリーセルを徹夜でやっているうちに、自然とマウス操作を身につけたというような経験がある方も多いかと思います。そこに通ずるようなモチベーションを餌にするという作戦を考えました。

3DCADの使い方から覚えよう

3D CADを使うのは初めてですから、マウス操作もすぐにできるというわけではありません。

まずは簡単な立体(正二十面体)を空間に置くこと、空間に置いて視点を変えること、それから立体の大きさを変えること、このあたりを最初に練習します。

続いて、立体を組み合わせて新しい立体を作り上げます。これは継ぎ足していくばかりではなく、引き算(穴を開ける)といった操作も練習します。穴の考え方も、足し算の考え方と基本的には一緒です。ソリッドなのか穴なのかを選択するだけです。

それができたら、板の上に自分の名前のテキストを抜く(穴を開ける)練習をします。これも造形の練習です。

今日のお土産はネームプレート

自分の名前のテキストを抜くネームプレートができたら、3Dプリンターで印刷します。

簡単なところですが、名前をくり抜くと、例えば「ま」や「o」のような丸がある文字は、真ん中の部分が脱落してしまいます。ここが今回の失敗点で、誰も改善することができませんでした。ここは次回以降改善していきます。世の中にある知恵や知識を使ってもいいですし、自分で考えるのもいいので、どうすればいいかを考えていきましょう。

一方で、完全に抜かない(要は溝を掘る)ということで解決したメンバーもいました。これはこれで一つの正解ですが、求められているのは穴抜きですから、それとは少し違います。今日のところは、これでOKかなと思います。

中級は音を計算する

中級のメンバーは、引き続き音をプログラミングしていきます。

最初にやったのは、周波数を変えることで波形がどのように変化するかを視覚的にわかりやすくしたプログラムを動かしてもらいました。これはGitHubに私が公開したプログラムをそのまま動かすだけです。

円運動(単振動)と波形・周波数の視覚化
円運動(単振動)がどのような波形を描くか、周波数を変化させると波形がどのように変わるか視覚化したプログラム

目的は、周波数を変えたら波形がどのように変化するかを体感してもらうことです。かなり難しいプログラムになってしまうので、プログラムを打つ・入力することが本意ではありません。数字を変化させて(周波数を変化させて)波形が変わることを体感してくれれば、それでOKです。

変化できる周波数は0.25から5ヘルツぐらいなので、とても音と呼べるようなものではありません。振動レベルですが、それでも連続的に波形が変わるところを目の当たりにして、歓声というか、どよめきが上がっていました。これには「してやったり」です。

つづいてドレミファソラシドの周波数を自動で取得

前回までのプログラムでは、音階(ドレミファソラシド)の周波数を数字で入力していました。例えば「ラ」の音だったら440Hz で、それにいくつかの数字を足してあげると「シ」の音になるとか「ド」の音になるとかといった感じです。その数字をリスト化しておいて引き出してくる、というようなことをしました。

しかしながら、その数字を手計算するのはセンスがありません。機械的に計算できるのであれば計算しましょう、というのが今回の狙いです。

ドレミファソラシドの周波数については計算できます。したがって、計算できる部分を関数としてまとめて、それと音名を結びつけます。呼び出すときはその音名を呼び出すだけで、音を奏でることができます。

音階周波数の計算
音階の周波数を計算して取得するプログラム

プログラム自体は難しくないので、すぐに終わります。つまずいていたのは、他のモジュールとの関係やそのモジュールが間違っていたり、写経するときに打ち間違えていたりといったところでした。ただ、自分たちでも、すぐに解決できていたようでした。半分くらいが完成していました。

次回は予備日にしていますので、そこでできていない人はサポートし、できている人はさらにここまでのプログラムでできることをやっていきます。

歓喜していた

私が用意した課題については、あっという間に終わってしまったメンバー。そこからの発展で「かえるの合唱(カエルの歌)」の楽譜をインターネット上(ウェブ上)から探してきて、その譜面を入力していました。カエルの歌はすぐにできたようです。

続けて別の譜面を入力していたところ、八分音符の入力がこのプログラムだとうまくいかないということでした。そこで私に「どうしたもんかな」という相談があったので、「四分音符を基準にするのではなく、八分音符を基準にして全部2倍にしていけばいいんじゃないの?」というアドバイスをしたところ、「それだと音が間延びして面白くない」とのこと。

「だったら、今私と話したことを生成AIに全部入力してみたらどう?」とアドバイスすると、「なるほど」というような顔をして早速生成AIに入力し始めました。

そうなんですよね。先生に聞くようなことは全部AIに聞いてしまえばいいと思います。生成AIから良い答えを引き出すには、聞きたい内容を自分で整理できるかどうかで全て決まると言っても過言ではありません。そこまで自分のやりたいことが明確になっていれば、生成AIはかなりの精度の答えを導き出してくれます。

しばらく遠目に見ていると、生成AIとの対話の中でプログラムが完成したようで、第九(歓喜の歌)を作っていました。「ちょっと3ヶ月ほど早いんじゃないの?」と茶化しながら、私は心の中で歓喜しました。

中学生であっても専門家には敵わない

メンバーの中には、吹奏楽部に所属しているメンバーや、ピアノを習っているメンバーがいます。そういったメンバーは、プログラムの見方がさらに専門的です。

私は音楽に関してほぼ知識を持ち合わせないので、技術的な観点でしか見ていません。また、音楽の常識というものを知りません。だから彼らが話す内容が理解できないこともありますが、「これっていいな」と思いながら見ています。

小学生ぐらいまでだと、どの分野においても大人が引っ張っていかなければならないところがあります。しかし、中学生ぐらいになると専門領域で大人を凌駕するような部分が出てきます。そこが人間の面白いところで、分業体制の中でそれぞれの専門領域を生かして、さらにより良いものを作り上げることができます。

私はプログラムの基本的な考え方や、それを生かしたエンジニアリングの世界で知識や技術を提供できます。それらを元にして、自分の専門領域(彼らであれば音楽)と結びつけ、私が考えもつかないようなものを作り上げてくれたらいいなと思います

ちなみに、先ほどの「第九」のメンバーとは違うメンバーです。「第九」のメンバーは私と似たような感じのプログラムの専門家ですが、同じ学年の吹奏楽部のメンバーやピアノを弾くメンバーと組み合わせたら、プログラムというものが接着剤となって、中学生同士で革命的なものが生まれるのではないかなと期待しております。

ところで+(電子工作+3D造形)を思いついた

音のプログラムを進めながら、帰りしなに思いつきました。これと電子工作、それから3D造形を結びつけたらもっと面白いなということです。

プログラムで目の前にあるパソコンの中だけでしか動かないものではなくて、実際に世の中にあるものとして作れたら、これは面白いんじゃないのかなと。彼らにとって良い経験(機会)になるのではないかなと考えます。

動作確認や私の準備に時間がかかりますので、すぐにというわけではないですが、中級第2期の終わりか、続く第3期として考えています。

ハンダ付け、それから3DCAD、3Dプリンター、これらを抱き合わせて音のプログラムと結びつけたら楽しそうだなというネタです。

これについては乞うご期待ということで、続報をお待ちください。