Web Audio API で、WAVファイルに書き出してみる、再生終了後にダウンロード
これまでちまちまとWeb Audio APIで実装を試みてきました.
このあたりでWAVファイルへの書き出しに手を出してみました.
今回は、2つのファイルを同時再生し、
2つとも再生終了後に同時再生の結果をWAVファイルに書き出します.
書き出し可能になった時点で、"ダウンロード"にリンクが発生します.
怪しかったところが、再生終了のタイミングです.
onendedのタイミングで再生終了とすると、尻切れになってしまいました.
今回は乱暴に、onendedのタイミングからsetTimeoutによって遅らせました.
↓頼りきりになってしまった引用文献↓
http://qiita.com/HirokiTanaka/items/56f80844f9a32020ee3b
http://www.cyokodog.net/blog/media-capture-and-streams-web-audio-api/
Web Audio API で、the sliding Goertzel DFT filter のパラメータを弄ってみる、とりあえずNaN
前回、Web Audio API でthe sliding Goertzel DFT filterを実装し、
パラメータをいじりました.
しかし、入力された文字列によっては発散する恐れがありました.
今回は、入力された文字列に関門を設け、
想定外の数値となる場合は反映しないようにしました.
そこで一癖あったのが、NaNでした.
参考にしたページがこちら→NaNの判定について
JavaScriptの関数の癖だけでなく、主観的なNaNとプログラム上でのNaNは違うわけです.
数字でなくも文字列は、文字コードでもってNumberであり、NaNではない.
賢い関数がありそうなものですが、とりあえず単純に組んでみました.
Web Audio API で、the sliding Goertzel DFT filter のパラメータを弄ってみる、とりあえず
↓前回、the sliding Goertzel DFT filterを組みました. ↓
Web Audio API で、the sliding Goertzel DFT filter を試作 (1帯域) - shingoushori's dialy
今回は、パラメータを弄ってみました. とりあえず、です.
とりあえずポイント1: inputフォームを使う
とりあえずポイント2: 数値および数値の変更手順によっては、発散する
"ぷちっ"とノイズが出て、以後可聴な音が出なくなるわけです.
危険です. パラメータ変更に関しては、安全策を考える必要が有ります.
このサンプルをお使いになられてのトラブルについては、一切の責任を負いかねます...
fが中心周波数,rがdamping factor.
rについては,1以上の数値を入れると発散します.入れないでください!
fについては,DFTであるからk=f/(Fs/NDFT)が整数であるべきです.
ここで,k:周波数ビン番号,Fs:サンプリング周波数, NDFT:DFT点数です.
従って,k=round(f/(Fs/NDFT))とでもして整数化する実装が普通でしょう.
ところが,roundせずともフィルタリング自体はできているようです.
興味深い...
Web Audio API で、the sliding Goertzel DFT filter を試作 (1帯域)
Web Audio APIでのSTFTによる帯域分割がうまくいかないので,
the sliding Goertzel DFT filterに抜け道を求めました.
↓the sliding Goertzel DFT filterの素敵な文献↓
The Sliding DFT
SLIDING IS SMOOTHER THAN JUMPING
DFTの1帯域分に着目すれば,IIRフィルタで実装できるわけです.
しかも, フィルタだから毎サンプルでの算出結果が得られる.
とりあえず, DFT点数を1024, 着目する周波数ビン番号を20としてみました.
ただし, 負の周波数ビンとカップリングし,虚数が出ないようにしています.
さらに,発散しないように damping factor : r = 0.995で, 極を単位円から離しました.
数値は耳で聞いて設定しました.
damping factorがあるのでDFTと完全に一緒でもない.
今回, IIRフィルタをScriptProcessorNodeで組みました.
Web Audio APIにはIIRFilterNodeもありそうですが,私の環境では見つかりませんでした.
ScriptProcessorNodeも廃止が告知されており,
AudioWorkerNodeに置き換えられるそうで.
しかし,AudioWorkerNodeも私の環境にはまだ無い.
儚いものです...
最後に,ScriptProcessorNodeに引数とバッファを持たせる方法について.
↓JavaScriptでは, こんな感じにほいほい追加できる↓
オブジェクトを利用する
気づくまでに時間がかかり,
チャネル数を偽装して引数を渡そうとするなど,悪戦苦闘しました.
Simutransで, 建築物を弄る
<欲望>
筆者は, 鉄道経営シミュレーションが好きである.
Simutrans(http://japanese.simutrans.com)は, 素晴らしい.
今回は, 建築物を弄ります.
特に, 建築物の所在地を変換するのが第一の目的です.
建築物の所在地を調整することで, 市域を調整することができます.
<設定いじり>
セーブデータをxmlで書き出す設定にしておく.
simutrans/config/simuconf.tab の,
saveformat = bzip2
を
saveformat = xml
に書き換え
<狙いの建築物さがし>
・座標点
xml中, 各地点のデータは,
<planquadrat_t> と </planquadrat_t> で括られている.
この括りが, マップの左上->右上, -> .... ->, 左下->右下 の順に並んでいそうだ.
括りを数えなければ, 座標点は探せないように見える.
・標高
<planquadrat_t> の次に来る <id>(数字)</id>, これが標高のようだ.
・建築物であるか否か?
<planquadrat_t>の中に, <gebaeude_t> </gebaeude_t>の括りが,
建築物である印のようだ.
・建築物の種類
<gebaeude_t></gebaeude_t>の中にある,
<![CDATA[(種類)]]>, ここに種類がありそうだ.
ここでの種類は, 市内建築物建設ツールの原名にある記述のようだ.
・建築物の所在地
</gebaeude_t>の一つ前の, <i32>(数字)</i32>が該当しそう.
ここでの数字は, 都市名のxml中での掲載順-1になっていそうでした.
都市名のxml中での掲載順は,
とりあえず <![CDATA[( あたりで文字列サーチして, リストアップできます.
まだまだ, 謎な数字があったり不便もいいところですが,
とりあえず糸口が掴めました.
... たぶんxmlの構文もどこかに解説があるんでしょう...
論文・文献徘徊メモ 160219-1 Pease FFT / Korn–Lambiotte FFT
FFTといえば,
Cooley–Tukey FFTが一番有名で, Stockham FFTが二番であろうと思います.
工学書を覗いてみると, だいたいここ2つではないでしょうか.
Cooley–Tukeyはわかりやすいとして, Stockhamはぎょっとします.
Webサイトによっては, よくよく線を辿ってみると不完全なものもありました.
そんなわけで, Stockhamの正しそうでわかりやすい説明を探し求めてみたわけです.
すると, Stockhamよりも一見してわかりやすそうな別のFFTに出会いました.
それが, Pease FFT と Korn–Lambiotte FFTでした.
Pease FFT が載っている文献
https://users.ece.cmu.edu/~franzf/papers/fft-enc11.pdf
http://csg.csail.mit.edu/Dataflow/talks/HoeTalk.pdf
Korn–Lambiotte FFT が載っている文献
https://users.ece.cmu.edu/~franzf/papers/fft-enc11.pdf
http://www.ams.org/journals/mcom/1979-33-147/S0025-5718-1979-0528051-4/S0025-5718-1979-0528051-4.pdf
Pease FFT と Korn–Lambiotte FFT は, ステージ間での配線パターンが同じです.
美しい ...
ちなみにStockham FFT は,
入出力時の並び順がin placeであることが主眼のようです.
しかし, それよりも各ステージの回転因子を乗算する周波数ビンが
(たぶん) 同じ位置, しかも後半に固まっていることの方が, 有用で美しく思います.
Web Audio API の、BiquadFilterNodeのbandpassの周波数特性の概形
標準の BiquadFilterNode の
bandpassの周波数特性の概形を探ってみました.
98帯域のMultiband Sidechain Compressor を作れることがわかったので,
フィルタバンクの周波数特性を詰めていこうとしているわけです.
今回, WebAudioAPI の BiquadFilterNode の周波数特性をグラフにするやつ
という素敵なページに巡り会いました.
こちらのページの上で, 中心周波数から-20 dBと-40 dBになる周波数比の目安を,
手探りで簡単な整数比で捉えてみました.
Q | -20 dB | -40 dB |
---|---|---|
0.5 | x 20 | x 200 |
1 | x 10 | x 100 |
2 | x 5 | x 50 |
3 | x 7/2 | x 100/3 |
6 | x 2 | x 16 |
9 | x 5/3 | x 90/8 |
12 | x 3/2 | x 8 |
18 | x 4/3 | x 6 |
24 | x 5/4 | x 9/2 |
30 | x 7/6 | x 7/2 |
36 | x 8/7 | x 3 |
42 | x 9/8 | x 8/3 |
48 | x 10/9 | x 7/3 |
60 | x 20/9 | |
72 | x 2 |
WebAudioAPIのマニュアルには, フィルタの解説がありました.
一般的なフィルタに見受けられますが, 地味に計算が大変です.