「笛太郎」開発日誌(中間報告①)

「笛太郎」開発日誌(中間報告①)

さてさて、どうですか?皆さん。
ご無沙汰してます。ミスターペシェントのおじさんですよー^^。

いやぁ、書きたいこと沢山あるんだけどね、なかなかアレでねー。
別の記事で書きたいと思ってるんだけど、僕はねアニメの「響け!ユーフォニアム」が好きでね。
そうそう、あの京都アニメーションのやつね。萌ぇえ~な作画のアレですね。
それのね、音楽をね、洗足学園の吹奏楽団がね、やるっていうステージにね、この前行ってきた。
「響け!」が好きすぎて、こんな動画作っちゃうくらい。

(アホでしょw)
まぁとにかく、それが凄いよかったって話とか、あとは読んだ漫画でいうとね、
「キーチVS」とか「宮本から君へ」とか、同じ作者のボクシングのやつとか、どれも面白かったので、それも書こうと思ったけど書かなかったんだよなぁ。

あ、そうそう!あとアレ買ったよ!「Oculus GO」!
https://www.oculus.com/go/
こりゃーやばいね!
もうホテヘルとか要らないね!

で、今日はアレですよ。
以前、電子フルートを作る!って息巻いて記事書いてから、これのこと触れてなかったけど、
実は水面下でネチネチ進めててね。今やっとある程度の段階まで来たから、書く。

btr

まぁ簡単にいうとね、「arduino」
https://ja.wikipedia.org/wiki/Arduino
っていうマイコンと、FM音源チップを繋げて、キーマトリックスっていうスイッチの構造をこしらえて、
スイッチの状態に合わせて発音する音を変える。というデバイスを作ってます。

まぁ何が苦労してるって、電子回路の組み方と、あとやっぱプログラミングですね。
これはもう、ホントに素人には敷居が高いっす。
ダイオードが必要だからってんで、ダイオード買ったら、スイッチダイオードとか整流ダイオードが必要なのに、家に届いたらツェナーダイオードだったよ。ああー発注ミスったよ。とか、「{」こういうカッコが一個足りないだけのコンパイルエラーの解決に2時間かかったりとか・・・。
もう何度も心が折れそうになりましたよ。

それでもぼかぁ諦めない!NARUTOか俺かってくらい諦めないぜ!
今年を振り返ると、この「笛太郎」の開発に着手したってことが俺歴史の重要なターニングポイントなので、書いとくことにしたの。

手書きの開発日誌によると、6月頃に初めての電子パーツ屋に足を踏み入れて、ここに記事を書いているな。
ここまでの諸々の出費をまとめてみると、

・arduino UNOとかタクトスイッチとか諸々 ¥5,000くらい
・ハンダコテとか、電子工作のセット ¥9,500くらい
・ブレッドボードとか抵抗とかLEDとか諸々 ¥5,000くらい
・FM音源(YMF-825) ¥3,740
・マイクロスイッチやらテスタやら ¥3,000くらい
・実験用のセンサ素子いろいろ ¥1,000くらい
・arduino NANO ¥2,880
・FM音源チップ(二代目) ¥3,240
・スライドスイッチとか三端子レギュレータとか ¥1,860
・コンデンサマイクとかピンヘッダとか ¥1,205
・スイッチダイオードとか ¥670
・各値のカーボン抵抗 ¥1,300

・・・おー、結構いくな。
あ、あと書籍でC言語系とか電子回路系とかで5~6冊くらい買ってるからプラス1万円ちょいか。。
全部でざっと5万円弱か。。
うーむ…女房には言えないな。w

まず最初にぶち当たった難関が、このFM音源ボードの音色編集だった。
GitHub
https://github.co.jp/
からサンプルソースを落としてきて統合開発環境に貼り付けてプログラムを進めるわけだが、
とにかく、このC言語との格闘からすべてが始まった。
サンプルソースでは、最初はピアノの音色になっている。
これを笛の音色に変えるには、バイトとビットの関係を理解し、バイナリとレジスタの関係を理解する必要があった。
これに2ヶ月かかった。。
16進数で35バイトを使い、FM音源の音色をマニュピレーションしなければならない。
各パラメータの指定方法が、素人には難解すぎた。
切り出すとこんな感じ。

void set_tone(void){
unsigned char tone_data[35] ={
0x81, // header
//T_ADR 0
0x01,0x85, ←オクターブの設定とLFO、アルゴリズムの設定
0x00,0x7F,0xF4,0xBB,0x00,0x10,0x40, ←Operator1の設定
0x00,0xAF,0xA0,0x0E,0x03,0x10,0x40, ←Operator2の設定
0x00,0x2F,0xF3,0x9B,0x00,0x20,0x41, ←Operator3の設定
0x00,0xAF,0xA0,0x0E,0x01,0x10,0x40, ←Operator4の設定
0x80,0x03,0x81,0x80, ←データの終わり
};

8月に入ってやっと音色のエディットができるようになった。
各パラメータを各レンジで指定して16進数に置換する関数をエクセルで組んだ。
(多分GitHubにアップすれば沢山の人に利用されるだろう。)

次にぶち当たった壁が、スイッチ制御だ。
笛には、沢山の運指がある。これをスイッチのオンとオフで再現しようという試みだ。
笛には、運指上で使用されるキーが15個ある。(C管で)
そうなると、マイコンの入力ピンが最低でも16個必要になるが、すでにFM音源との接続で5ピンを使用しており、そんな余裕はない。
そこで出てくるのが、「キーマトリクススキャン」という技術だ。
https://www.ei.fukui-nct.ac.jp/~t-saitoh/exp/h8/key-matrix.html

これは、パソコンのキーボードなどでも使われている技術で、必要なピンを節約することができる。
一般的にはプルアップ抵抗回路が採用されるが、私は敢えてプルダウン回路を採用した。
(素人的にわかりやすいからw)

このキーの組み合わせに応じて発音させる音名を変えるわけだが、笛は同じ運指でオクターブだけ変える場合が多い。
そしてサックスやクラリネットのようにオクターブキイはなく、アンブシェア(クチの具合)だけでやるわけだ。
うーん、、、どうしよう。
今のところはこれを圧電センサでアナログ信号で条件分岐してみようと思っている。

15個のスイッチの組合せをすべて定義すると、15*14*13*12*11・・・
無理だ。正規の運指と替え指と、トリル運指だけに絞ろう。。

あとはC言語での適切な条件分岐を組み上げれば、基礎理論は完成する。
頑張れ!頑張るんだ!俺。
どうやら関数の配列と、ポインタを極めないとならないっぽいです。
ああー。。若いときにエンジニアの道を選んでればなぁあ。。。
と思うこの頃です。