今日は土日に書いたコードの書き直しを行っていた。まだ書き直しは完了していない。 複数Output・Inputの対応がまだできていなかったのでその対応がメインであるが、合わせてコードが汚いのでちょっとでもきれいにしようとしている。まあきれいといっても人並みかそれ以下でしかできない。
コードを書いていて気付いたこと。AudioNode.disconnect()
はワーキング・ドラフトでは全チャネルの切断しかできないので、例えば出力を2つのノードに接続しているとき、片方だけを切断することができない。これは面倒だ。もし片方だけ切断したかったら、いったん全部切断して、接続を残す方を再接続する必要があるではないか。
なんか片手落ちな規格だなーと思ったが、エディターズ・ドラフトでは改良され、チャネルごとの切断ができるようになっていて、最近のChromeでは実装済みであった。
それと最近のドラフトではIIRFilterNode
なるものも登場している。フィルタ特性をカスタマイズできるという優れモノものだが、理屈が難しい。少し前に信号処理の本を買い込んで勉強してみたが、あまり理解できなかった。ほとんど忘れてしまったが、デジタルフィルタはFIRとIIRというものがあるということはかろうじて記憶していた。なので価値はわかるのだが、パラメータをいじって望みのものを作ることはできないのである。もう一度勉強しなおそうかな。そうしないとWeb Audioの理解も進まないしね。。
PeriodicWave
とかも元波形をフーリエ変換して周波数成分を求め、それをパラメータにセットすると少ないパラメータで元波形を再現できたりするんだけど、そういうのも知っていないとなんのことかさっぱりわからないもんね。単にサイン・コサイン波を加算合成すると考えてもいいんだけど、それだと望みの波形が生成できないしね。偶然に頼るほかなくなる。
ポジティブに考えればWebAudioをいじることによって信号処理も詳しくなれそうだが、そううまくいくかな。。