鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

pitchfinder.jsの使い方を学ぶ

色々分け合って、人の声から音階Pitchを
割り出したインですが・・
人の声って色々な周波数が入っていて
簡単ではないことが分かった。

github.com

pitchfinder.jsは周波数を割り出す様々なアルゴリズム
が入ったモジュールのようす。

使いたいんですがexapmleがなくて良くわからない。
というわけで勉強。

qiita.com

何が分からないっていうと、マイクからの入力をどうやってpitchfiner.jsへ渡してやるかっていうところなんですが。

Analyser経由でやってみた。

var oscillator = audioContext.createOscillator();
var analyser = audioContext.createAnalyser();
var float32Array = new Float32Array(2048);
oscillator.connect(analyser);
oscillator.start();
analyser.connect(audioContext.destination);

var YINDetector = PitchFinder.YIN({sampleRate : 48000});

analyser.getFloatTimeDomainData(float32Array);
var estimate = YINDetector(float32Array);
console.log(estimate.freq);

こんなかんじでうまく動きました!!!

他のアルゴリズムでもやってみよう!!

結局、YIN以外のアルゴリズムではうまくできなかったけれども
以下にサンプルアプリを公開しています。参考にしてください。
YIN以外のアルゴリズムでできたらプルリクエストお願いします。

github.com

タブレットで実行したらマイク入力が小さいなぁ。

取りあえず、GainNodeをマイク入力とAnaliserの間に挟んでみた。