shingoushori's dialy

音信号処理を専ら研究していた元博士後期課程の学生によるメモ

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

 

lealog.hateblo.jp

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以下にしておきました。

Canvasで、はてなブログに回路図を直接描いてみるテスト(Diode Clipping)

はてなブログにできるだけ写真を投稿したくない!容量が気になるから.
でも、図やグラフを貼り付けたい!わかりやすいし、格好いいから.
この相反する気持ちの矛先として、Canvasに目をつけたわけです.

とりあえず最近のマイブーム、Diode clipperを描いてみました.

CanvasJavaScriptで関数化できるので、
巧くやればSVGファイルを頑張って貼るより色々楽しい予感がします.
Canvas要素の英語版wikiには、SVGとの比較が言及されていますな.

Web Audio API で、内蔵マイクで録音、ただしFirefox

前回、Web Audio API で、WAVファイルに書き出ししました.
今度はマイクの入力に手を出してみました.
ただし、録音はwavファイルの再生中のみで、
出力はwavファイルとの加算結果です.
さらに、どうにもFirefoxだけでしか動かない.

Google Chromeで動かないのが苦しいところ.
探してみると2013年あたりの文献が多く、しかもなにやら設定を変更せよとのこと.
http://www.html5rocks.com/ja/tutorials/getusermedia/intro/
http://slowquery.hatenablog.com/entry/2013/02/20/020321
https://developers.google.com/web/updates/2012/09/Live-Web-Audio-Input-Enabled
しかし、2016年3月現在の私のChromeでは記載の設定は見当たりませんでした.

Google Chromeで動くものもあり、
Simple microphone Web Audio API / WebRTC example – Nic Does Code
Pitch Detector
動かないものもあり...その違いが今の所わかりません.

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ではない.
賢い関数がありそうなものですが、とりあえず単純に組んでみました.