最近メロディーがらみのものが多いので、勢いでいつも使っている8pinのPICで楽器もどきを作ってみることにした。音色が選べ、和音も鳴らせるものを目指す。
使うPICは8bit,8pinのPIC12F1822。秋月で1ヶ100円で買えるもの。5bitのDACを内蔵しているので、これを使って音を出す。クロックは最高の32MHzで動かす。音源方式は一番単純なピッチ同期の波形メモリとする。再生できる最高音を16KHzとするとサンプリング周波数は32KHzになる。250Hzの音の場合32,000/250 = 128なので、波形の1周期のサンプル数は128とする。波形を読みだす間隔は約30μsになる。これより1オクターブ高い音は波形を1つおきに読むようにすれば、波形を読みだす間隔の最小値は15μsになる。1オクターブ低い音は2回ずつ同じところを読むようにする。
サイン波、三角波、鋸歯状波の波形メモリを用意して鳴らしてみたところ、5bitのDACでも一応それらしい音が出ることが確認できた。
音量や音色を変化させたいので、サンプル毎に波形の値にEGを掛け算するようにしてみたところ、計算が間に合わないことが判明した。それでも音色を変化させたいと思い、波形を順に切り替えていくようにしてみた。波形はPCのVisualStudioでFM音源のシミュレータを作り、変調の深さが徐々に浅くなる8種類の波形を用意した。これを音の出だしのところで一定間隔で切り替えていき、最後の波形までいったら、その波形を繰り返して読むようにした。波形の切り替えのところでノイズが聞こえるが我慢する。波形切り替えの間隔は音程が高くなると短くなる。
2声の和音を鳴らせるよう、PICを2ヶ使う。2つのPICのDACの出力を抵抗でミキシングして鳴らしてみたところ、ひどい歪でとても聞けない。しかたないので、テスト中はそれぞれのPICに圧電ブザーをつけて鳴らすようにした。きちんと聴く場合は、ステレオの右と左にそれぞれの出力を出し、スピーカで鳴らせるようにしてある。
和音を弾けるよう、鍵盤で演奏する。単音なら鍵盤にスイッチをつければよいが、和音を出したいので他の方法を考えることにした。以前、楽器の研究をしていた時の同僚が、手袋の指先にセンサーをつけて専用の鍵盤を弾くようにすれば音源が10ヶあれば両手で弾ける、という特許を出したのを思い出し、これを採用することにした。
鍵盤も自作することにし、ユニバーサル基板にメッキ線で2オクターブの鍵盤を作成した。音程を検出するため、電源とグランドの間に100Ωの抵抗を直列に25ヶつなぎ、それぞれの音程の鍵盤のメッキ線に特定の電圧が出てくるようにした。
両手の人差し指にメッキ線で作ったセンサーを巻きつけ、これで鍵盤を弾くと、それぞれのPICで鍵盤の電圧をAD変換して音程を決め、音を出す。
ついでにマスタークロックの周波数を調整する機能を使い、ビブラートがかかるようにした。ビブラートをオフにすることもできる。
音源ごとにオクターブと音色を選ぶことができる。オクターブはボリュームの位置を合わせてスイッチを押す。音色は鍵盤を弾いたときにボリュームの位置をみて使う波形を決めるようにした。