ウクレレMIDI化の妄想を相変わらず匍匐前進中。
例によってあの本を読み進めて、ようやくFFTの
ところまで読み終わり。
とりあえず全体像は見えてきたんだけど、まだ
プログラムのロジックに落とせるところまでは
届いてないなぁ。あとでまた読み直そう。
読書百回だな。
でもおぼろげながら見えてきた。読む前は
虚数にはアレルギーがあったし、FFTの
計算原理も良く解ってなかったし。だいぶ
わかってきた感があるもんな。
現状とりあえず、どんな観点で設計していけば
イイのかはおおよそ見えてきたので、それを
いいことに少し机上計算(たぬきのなんとやら)
をやってみる。
「周波数分解能」「サンプル数」「処理速度」
あたりが三つ巴っぽいかな。周波数分解能を
向上しようとすればサンプル数(≒メモリ容量)
が増えちゃうし、処理速度も遅くなっちゃう。
サンプル数(メモリ量)を減らそうとすれば
周波数分解能も悪くなる。そんな感じ。
サンプル数を減らしても周波数分解能は落とさない
って方法も無いことは無いんだけど。
各弦個別にナイキスト周波数を設定しちゃう。
各弦が許すギリギリの周波数まで下げちゃう。
もちろん各弦の一番上のフレットよりは高くして
おかないとダメ。
そうすることで、サンプル数が同じでもΔFが
相対的に小さくなるって寸法ですよ。ロジックは
グチャグチャになっちゃうけど。
で、表計算ソフトを使って、128点、256点
を採用した場合に、C、C#、D、D#、E…と
それぞれの音程付近をカバーするスペクトルの
ポイントが幾つ取れるかがをひたすら計算して
みちゃう。
そもそも各音程にジャストフィットする周波数
のスペクトルを都合よく拾えるような仕組み
(例えば261.6255hzと440hzを
両立するような計算方法)があれば問題なし
なんだけど、そういう便利な処理方法は出来ない
ので、周波数分解能を有る程度細かく設定する
ことによって、各音程に相当する成分があるか
どうかを近似的に判別してしまおうという作戦です。
(人間の耳の周波数分解能って、そう考えると
すごいもんだねぇ…)
というわけで、周波数が近いところに
「数打ちゃ当る」
作戦なのだ。一応あの本にもそういう拾い方は
可能っぽい事が書いてあったから、やるだけやって
みればいいジャン。
で、皮算用の結果。
128点でグチャグチャのロジックを組むか、
256点でスマートなロジックで済ますか、
どっちかの作戦っぽいなという感じ。
128点だとすると、弦が4本だから4倍して
128×4=512個の変数が必要。
音質に拘る必要は無いから、サンプリングを
8ビットで行うとすると512バイト。
もうちょっと贅沢して16ビット幅を確保
するとなると1KB。
これに加えてFFT計算のワーク用にある程度
纏まった容量が必要。それに加え、FFT以外の
ロジック処理用(いわゆるアプリ部分)にもある程度
必要。最低でも2KBのRAMが無いとお話にならず。
256点だとすると、おおよそ倍と見て4KB
が必要になるだろうなぁ。
2KBならmega328、4KBなら以前秋月
で買ったまま放置プレイのmega644か、
この間作ったmega128CPUボードに
白羽の矢だな。
個人的には、容量の少ないmega328に
ギチギチに詰め込んだ押し寿司状態にしたいな。
300milでちっちゃいし。
とはいえまだFFTの根本まで理解出来た訳じゃ
ないので、まだまだ妄想君状態から抜け出れてません。
まずはFFTの理解をもうちょっと進めてから、
PC上の何らかの言語使ってシミュレーション
してみよう。
それが一番の近道じゃないかという気がする。
話しかわって。
オイラの大好きな「elements~
メンデレーエフの奇妙な棚~」シリーズを
チェックしたら、どうやらシーズン4が既に
出来てたのか!
http://sc-smn.jst.go.jp/4/series.asp?i_series_name=elements%81%60%83%81%83%93%83f%83%8C%81%5B%83G%83t%82%CC%8A%EF%96%AD%82%C8%92I%81%60
27~32話の欄が増えてる!でもネットでは
見れるようになってないのねぇ。
そのうちネットでも公開されるのか、それとも
されないのか…
そもそもうちの近所のケーブルテレビでは放送される
のかなぁ?
それにしてもシーズン1からもう4年目なんだねぇ。
面白いからずっと続くといいな。
|