puredataでカラオケの音程バーを作り、ピッチのズレ度合いを数値化する。

puredataでカラオケの音程バーを作り、ピッチのズレ度合いを数値化する。
-この記事の続き

やったこと

puredataでカラオケの音程バーの再現
入力音と設定した音楽のピッチのズレを図るシステムの制作

制作内容

mainの部分ではカラオケの音程バーの再現、入力音の音程と音程バーが表示される。

画像

UIでは音程バーの中身を作る。pepeを使って垂直スライダーの動きをずらすことでカラオケの音程バーを再現。

画像

kaeruではカエルの歌の音階を流すようなシステムを組む

画像

inputnoteではマイクから入力した音の音程を判別する

画像

実装動画

使用動画1

使用動画2

苦労・工夫したこと

特に苦労したのはこの部分。

画像

単純にカエルの歌の音に合わせて歌って、入力音 – カエルの歌の音階をすれば良いわけではなかった。

例えば①カエルの歌の音階が更新される、つまりmetroに合わせて単純に引き算すると、入力音が更新されなくても前の入力を引っ張ってきて勝手に引き算してしまう。

逆に②入力音が入ったら引き算をすると、カエルの歌と関係ない音とか、入力音が間違ったと思って違う音程を入力すると、過剰に引き算されてしまう。

つまり単純に引き算すると、余計な引き算をしてしまい、正確な判定ができなくなる。

これらを赤マルのところで解決する。

簡単にいうと、カエルの歌がドレミと更新されるごとに入力音が入るようにする。その値を別のところに保存しておいて、入力音を0にリセットする。

こうすることで上記①②の問題を解決できた。

また、オクターブの問題もある。

同じ音階を入力しても、1オクターブズレていれば数値としては+12または-12されて出てくる。これでは正確な判定ができない。これを解決する必要もあった。

これはselect mandatoryと書いてるところで解決。左上の方はカラオケのバーを調整する。右下の方はズレの計算結果を調整する役割がある。

これによりオク下、オク上で歌っても対応できる。

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です