少し前に我が家の電子ピアノが壊れました。鍵盤の一つが押し込まれたまま戻ってこなくなり、音が鳴らなくなってしまいました。思い返せば買ってから20年以上経っており、そろそろ壊れてもおかしくない年数でした。 そこでふと、電子ピアノと呼ばれるくらいなのだから、鍵盤をパソコンのキーボードに置き換えた擬似電子ピアノを作れるのでは?と思い至り、やってみることにしました。
そもそもピアノはどのように音が鳴っているのでしょうか?
多くの人がピアノといってイメージする、学校の音楽室や体育館に置かれているピアノは「アコースティックピアノ」と言います。
鍵盤を押し込むことでハンマーが動き、そのハンマーが弦を叩いて音が鳴ります。鍵盤を押し込む強さがハンマーの叩き加減にも伝わり、音の強弱が生まれます。
対して電子ピアノは、アコースティックピアノを電子化したものです。鍵盤を押し込むことで内部のセンサーが反応し、あらかじめ録音しておいた音が再生されます。このセンサーが鍵盤の押し込まれた強さや速さを細かく感知し、それらを反映させた音を出します。
おおまかには、以下のような仕組みです。
①(人が)鍵盤を押す
②センサーが反応する
③音が鳴る
今回は①の鍵盤をパソコンのキーボードに、②③をPythonのプログラムに置き換えて、「擬似電子ピアノ」を作成してみたいと思います。
まず準備したものがこちら。
・パソコン
・キーボード
・スピーカー
・Thonny(Python用の統合開発環境)
・ChatGPT(無料版でOK)
「キーボードを鍵盤に見立てた擬似電子ピアノで1曲弾いてみる」をゴールに定め、早速作成開始です。
今回はなるべく手軽にゴールへ辿り着くべく、すべてChatGPTにコードを作成してもらうことにしました。
Pythonで電子ピアノの仕組みを模したプログラムを作りたいことを伝え、結果的に以下2つのコードを作成してもらいました。
1つ目は、鳴らす音そのものを生成するコードです。
2つ目は、キーボードを押すと、対応した音が鳴るプログラムのコードです。
次に、2つ目のコードを実行します。
どのキーでどの音が鳴るのかわかりやすいよう、次のようにキーボードにマスキングテープを貼りました。
余談ですが、どのキーをどの音に対応させるかはすべてChatGPTが決めた通りに従ったのですが、ちゃんと黒鍵の位置が本物さながらで感心しました。
Thonnyで実行し、いざ実践!
※音が鳴ります
ちゃんと音が鳴りました! 思ったより感動です。
1つ目の音を作るコードは、ChatGPTが気を利かせて「鳴らした音が指数関数的に小さくなる」仕組みにしてくれました。どういうことかというと、ピアノの鍵盤を叩くと、最初は大きい音が徐々に小さくなっていくと思います。これをプログラムの中で再現していました。さらに「キーを押している間は音が鳴り続ける」という設定も組み込んでいたことにより、同じキー(音)を押し続けると音がループして大きい音と小さい音を繰り返すようになりました。このループの間隔をもう少し長く取って、違和感が減るように調整しました。
修正前
※音が鳴ります
修正後
※音が鳴ります
また、同じ音を同時に鳴らせるようにも改良しました。これで和音が再現できます。
和音
※音が鳴ります
細かい改良を重ねたことにより、最初に比べて音がブツブツすることが少なくなり、違和感が減りました。
それではゴールに辿り着けるのか、いざ実演!
※音が鳴ります
短いですが、なんとか弾けたのではないでしょうか……!
ChatGPTにコードを作ってもらったおかげで、かなりスムーズにプログラムを組めました。Thonnyをインストールするところから1曲弾くところまで、2時間かからないくらいです。コードの生成もエラーの解消もやってくれるため、思っていた以上に簡単にできました。
また、電子ピアノをPythonで擬似的に再現しましたがやはりキーを押してから音が鳴るまでのタイムラグは出てしまいました。本物の電子ピアノは鍵盤を押してから音が鳴るまでのラグがないのはもちろん、楽器としてスタッカートや音の強弱もちゃんとつけられます。これをセンサーで制御して音を出しているのですから、改めて電子ピアノの凄さを感じました。
思いつきの簡単なプログラムでも、やってみると意外と楽しかったです。家にピアノがなくても、こんなふうに擬似的に体験する方法もあります!というのを知ってもらい、プログラミングの可能性を感じてもらえたら嬉しいです。