ESP32で昭和のゲーム風ピコピコ音を演奏してみた | a24a24a24のブログ

a24a24a24のブログ

アメピグ残党。
釣り、温泉、お出かけ、パソコン。最近、電子工作。

テーマ:

 

 

ESP32で、電子音を重ねて出力、「きらきら星」を演奏してみました。 

 

昭和の8bitパソコンやゲーム、MSXが搭載していた「PSG音源」のように、

ピコピコやブーなど、シンプルで懐かしい音です。

 

 

 

 

 

 

電子工作で音を出すというのは、

極端にいえば「低周波治療器を高速にしたようなもの」です。

1秒間に数百~数千回、電圧をアップダウンさせて、スピーカーやイヤホンを振動させます。

1音であれば、IOピンに出力→delay()で一定間隔待ち、を繰り返すだけでも音が鳴ります。

Arduino標準のtone()関数も電圧上下という点は同じです。

 

 

 

 

しかし複数の周波数の音を重ねて、和音で鳴らすとややこしくなります。

例えばド=261Hzと、ミ=329Hzと、ソ=391Hzの3つを同時出力する場合、時間軸(横方向)が不規則に。

 

 

 

 

そこで、タイマー割込みを64kHz(秒速6万回)で動かして

複数の波形の瞬間値をリアルタイムで計算し、DACポートに毎秒6万回出力してみました。

たとえばド=122.31カウント、ミ=97.07カウントの経過ごとに出力のHigh/Lowを入替えます。

我流で作った割りに、それっぽく鳴ったと思います。

 

 

今回サンプルとして5和音でプログラムしましたが、

CPUの処理能力が足りれば、理論上10和音でも20和音でも鳴らせそうです。

 

 

 

 

 

 

演奏する「きらきら星」の曲データは、こんな感じ。配列に音階・長さをベタ打ち。

適当なので、多少の間違いはご容赦を。

 

 

 

 

 

 

 

 

次は、単純なピコピコ音だけでなく、すこし手の込んだ音にも挑戦してみたいです。

 

おしまい。