2020作品:MIDI KAZOO (ミディカズー)

ドレミを意識せず歌うように楽器を演奏できるデバイス

歌うように音を出せる楽器『カズー』 そのカズーに音程検出機能を付けてMIDI出力できるようにしたものが本デバイスMIDI KAZOOです。

ドレミを意識せず歌うように楽器を演奏できるデバイスを目指しています。

GUGEN応募ページ

Teensy 4.0 Teensy 4 オーディオアダプタボード とかを使用しています。 

ロゴは毎度のこと友達に雑なラフを投げてかっこよく仕上げてもらいました!それ以外は一人で作りました。まぁいつものことですが😓

てんしーはARMが乗ってるarduinoつよつよ互換ボードなのですが、日本語の情報がほとんど無く、用意されているライブラリを使用するだけで結構大変でした。

プログラミングが苦手なもので...... GOOGLE翻訳先生と共にフォーラムを読み漁りました。


最初は音程判断をFFT(高速フーリエ変換)というものでやろうと思っていました。ARMはDSP命令というものを実行できて FFTなどを汎用的な計算で出すのではなく求めている値をぱっと出せるすぐれものだそうで......

しかしFFTは正弦波しかきれいに読んでくれないのとDSPのFFTは可聴域を41hzずつ512ビンに分けてどこの周波数が強いか教えてくれるものだったのでうまくいかず途方に暮れていましたが、オーディオアナライズのひとつ下の関数NoteFrequencyをつかえばいい感じに値が出ることがわかりふつうにこれでやりました()英語が読めればなぁ。

しかしこいつはそんなに早くないので(そもそもギターチューナーとか用なので僕の使い方が間違っている)ピーク関数(音切り等に使用)と併用して今のところは音を取っています。

オーディオアナライズ関数たちは呼べば値を出してくれるわけではなく、値が準備できているか尋ねなければならないため少々辛かったです😓


それとMIDI出力なので84個出力を用意しました。(G#1_103.8Hz ~ C 5_1046.5Hzまで)なかなか骨が折れました......

for (int i = 0; i <= 84; i++) {

hz[i] = 440.0 * pow(2.0, (i - 69.0) / 12.0);

}

こんなかんじで各周波数を用意し、それぞれの周波数にONOFFのIFが連なっています。


また、このボードは600MHz出せるため、ディレイを挟まずにループにシリアルプリントとかを挟むと早すぎてか通信が途中からできなくなるので あぁ僕はarduinoUNOだけ触っていようと思いました......(結局タイマ関数でシリアルプリントしました これでいいのかな?)


長々と書きましたが今の所音程判断がイマイチでとても実用的な出来ではありません。今後もアップデートを重ねていきたいですね。実用的な出来になったら3Dモデルとかコードとか配ろうと思います。


しかし今後オーディオいじるならこのボードですね。ループ関数に何も書かずにマイク入力をスピーカー出力出来たりします。日本でも流行れTeensy 。 


2020/11/4ギリギリGUGENに間に合ったハシビロ工業記述