元博士後期課程の学生
そういえば、ブログの設定も更新していませんでした。
下記のように更新してみました。
旧:音信号処理を専ら研究している博士後期課程の学生によるメモ
新:音信号処理を専ら研究していた元博士後期課程の学生によるメモ
2016年3月に博士(工学)が取れたんです、はい、電気通信大学で。
"元博士後期課程の学生"の方がそれらしいので、そのようにします。
これだと文の構造が取りにくい悪い文ですけれども。
音信号処理にも研究職にもこだわりませんでした。
とはいえ、研究意欲は湧いてしまいますので、
捌け口として気ままにここに出していきます。
Web Audio API で、the sliding Goertzel DFT filter のパラメータを弄ってみる、... + 残差信号(簡易)
今回は、前回の記事↓に残差信号を追加してみました。ただし、簡易。
Web Audio API で、the sliding Goertzel DFT filter のパラメータを弄ってみる、とりあえず最大16バンド - shingoushori's dialy
gが、the sliding Goertzel DFT filterでパラメータを表示しているバンドのゲイン一括変更。
g_Residualが、残差信号のゲイン。
残差信号を作るべく、the sliding Goertzel DFT filter の各ノードに並列でノードを用意しています。
位相特性をきちんと揃えないと、今回のように残差信号でアタックが分離しますな。
今回は簡単に、遅延を差し込んでいます。遅延量も手探り、アテが外れたため。
ところがどうも、パフォーマンスによって遅延量がブレているようです。
このあたりは、Web Audio API の限界なのかもしれません。
ちゃんとオールパスフィルタを配しても、常にはうまくいかない悪寒がします。
さあ、どうしたものか。
Simutransで, "日本の役場セット"の問題を無理やり直す
<欲望>
筆者は, 鉄道経営シミュレーションが好きである.
Simutrans(http://japanese.simutrans.com)は, 素晴らしい.
"日本の役場セット" ( アドオン/建物2 - Simutrans日本語化・解説 ) は,
なかなかニヤける.
しかし, 一番大きい庁舎(building.05_CITY.pak)に変わった後に, 一段階小さい庁舎(building.04_CITY.pak)に建て戻しされるという悲しい問題がある.
筆者の使っているバージョンは古く(pak64 112.3), 気がついたら新しいバージョンでは治っていそうだ. ただし, 新しいバージョンでは筆者の使っているバージョンのデータが開けず, もっと悲しい...
そこで, 古いバージョン(pak64 112.3)を延命すべく, 無理やりにでも弄れるようになりたいと思っておるわけです...
<原因の所見>
一番大きい庁舎(building.05_CITY.pak)と一段階小さい庁舎(building.04_CITY.pak)とで,
建て替え判定に用いられていると思われる人口の数字が逆転している.
前者が34464人, 後者が50000人だと思う.
<無理やり直し手法>
バイナリエディタで, 該当箇所を書き換える.
pakを作り直せればよいのですが, 筆者はmacがメインであったりなんなりでそれが難しかったのです...
バイナリエディタには 0xED ( http://www.suavetech.com/0xed/0xed.html ) を使いました.
該当箇所は, 0すたーとの16進数で 00053 ~ 00056 byte までの 4 byte だと思われます.
ここの数字が先述の 34464 (A0 86 00 00), 50000 (50 C3 00 00) だったわけです.
そして, この数字を弄ることで, 無事問題を回避することに成功しました.
<発展>
さらに発展した使い方として, ここの数字を 0 (00 00 00 00) にしたものを用意し, 適宜置き換えるというのを考えました.
元々の問題を逆手に取り ... 建て替え判定をバカにしてしまうことで, 建て替えを手動で制御できます.
Web Audio API で、the sliding Goertzel DFT filter のパラメータを弄ってみる、とりあえず最大16バンド
今回は、以下の記事の流れをマージしてみたというわけです。
-
Web Audio API で、the sliding Goertzel DFT filter のパラメータを弄ってみる、とりあえずNaN - shingoushori's dialy
-
Web Audio API で、WAVファイルに書き出してみる、再生終了後にダウンロード - shingoushori's dialy
マージするにあたってあれこれ書き換えた結果、
これまでuploadしていたjsdo.itだと動かない、示されたerrorを全部直しても動かない。
仕方がないので、今回は新たにCodePenなるサイトを導入してみました。
調べたページ :
それでも、Firefoxでしか動かない。
元々のhtmlファイルではSafariでもChromeでも動いたので、困惑しています。
とりあえず最大16バンドとして、fとrとgを変えれるようにしました。
変数Bでバンド数を指定します。ただし、html上に作るフォームの数だけを変えます。
nodeの抜き差しは、また今度。
fとrについて、2系統フォームがでます。
これらの使い方次第で、
1.パラメータの設定方法が多様になる、
2.イレギュラーなパラメータ設定を楽しめる、ようになります。
上段にBと並んでいるfとrは、回路全体のデフォルトの値とでも言いましょう。
設定すると、下段のfとrを一挙に上書きします。
fについては、fを初項とするDFTの中心周波数の刻み
(今回は サンプリング周波数 Fs : 44100, DFT点数 : 1024で, 43.06640625 Hz)で、
等差数列にします。
下段のfとrとgについては、各バンドごとの個別の設定です。
フォームが作られていないバンドについては、gが0で無音化しています。
ここで、下段でいう各バンド個別というのは、
the sliding Goertzel DFT filter の2段構えのフィルタのうち、
後段の極を作る方のみです。
前段の零点を単位円上に等間隔で配置するフィルタは全バンドで共有させている都合、
後段に連動させるのが億劫だったために、このような構成になりました。
これによって、極と零点の位置がずれている
不完全なthe sliding Goertzel DFT filterを楽しめるわけです。
フィルタの特性を確認していないですけども、
耳で聞く分には個人的には中々気に入っています。
Web Speech API の Speech synthesis を試してみた
Web Speech API というものがあるんですね。
とりあえず google chrome, firefox, safari で動き、
Internet Explorerでは動かない、edgeでは対応検討中...だそうです。
Speech synthesis , Speech recognition があるらしい。
とりあえず 今回はsynthesisしてみました。
ただ読み上げるだけでは参考文献そのもので残念なので、
前回の記事の流れで複数のフォームを次々に読み上げるようにしてみました。
簡単、手軽で素敵です。
しかし、Web Audio API とは全然別物らしく、全然繋がらないんだとか。
似ている名前をしているのに、なんとも嘆かわしい ...
なんとかできないか検討していく所存でございます ...
<参考文献>
ブラウザのみで音声認識とテキスト読み上げを実現する Web Speech API | CYOKODOG
htmlの入力フォームの数をjavascriptで可変にしてみた
マルチバンドでなにやらしたいわけです。
ならば、バンド数に応じた数の、各バンドのパラメータやらを操作する入力フォームが欲しい。
バンド数を変えた時に、合わせて変わってしまえばいい。
まず、そんな入力フォームが作れるのかやってみました。
とりあえず、できました。
読み込み時はフォーム4つ。
増減するフォームごとに、いちいち関数を書くのも面倒です。
そこで、onInputの関数に引数でidを渡してみました。
勝手に関数内部でとれなかったので、引数の登場です。
Web Audio API で、Multi-tap Delay (3 tap feedforward and 3 tap feedback)
Web Audio APIで、ディレイを組んでみました。
ただ、1本だけディレイのラインを出すだけならば、Web Audio APIにあったはず。
マルチタップで混沌とするには、1本だけのを組み合わせるのはメモリが勿体無い。
ちょっとだけ頭を捻って、1本だけのを組み合わせるよりはエコなものを組みました。
図などは、また時間があるときに描くことにいたしまして ...
核心は、Web Audio API のフレームの倍サイズのメモリを1本用意し、
各サンプルでの数値をそのメモリ内の2箇所ずつに書き込んでいくこと。
リングバッファの実装で行われている技法です。
さっと探して参考文献が見当たらなかったので、こちらも後日。
計算量を検討したわけじゃないですが、
Web Audio APIのようにザクザクとブロック処理する場合は、
毎サンプルごとにリードライトを繰り返すくらいなら、
2箇所に書いてしまって、ポインタだけを動かした方が、たぶんシンプルです。
そんなMulti-tapなDelayを、feedforwardを3 tap と feedbackを3 tap 持たせまして、
前回( Web Audio API で、内蔵マイクで録音、ただしFirefox - shingoushori's dialy )
... のやつに繋いでみました。
内蔵マイクにDelay, wavを2つ同時再生してそちらにもDelay、ただしFirefox。
実装してみて気づいたのが、3 tapのfeedbackのゲイン係数の発振条件。
1本だけなら、絶対値を1未満にしておけばいいわけです。
今回は3 tapが並列になるわけで、
遅延量が整数比の時には、倍数の経路でのゲイン係数が、
実際には約数の経路のゲイン係数との和になるわけですな。
条件を計算するのは後回しとしまして、
今回はとりあえず絶対値を0.33以下にしておきました。