メトロノームは奥が深いです
こんにちわ、こんばんわ。かえるのクーの助手の「井戸中 聖」(いとなか せい)でごいざいます。
前回までで、どうにかメトロノームのグラフィック部分の目途がたちました。
pyqtgraphはやはりすぐれモノです!
これで1つ目の大きな要件は(技術的・実証的に)クリアーできたと思います。
次は検出・評価です
今回メトロノームを作成している、もうひとつの大きな要件は「(自分が)あまりに下手なので、どれぐらい下手なのか測定をしたい」です。
さらに「変拍子練習に適している」が最終的に加わっていきます。
演奏タイミングはMIDIで拾えばとても正確なのですが、今回は汎用的にマイクで拾った音でリズムを検出してみたいと思います。
ずっと前はマウスクリックでタイミングをとれるかメンバーがやってみてました。
おたまじゃくしさんのおーとまとん~音で遊ぼう! - クーの自由研究 (hatenablog.com)
今日からはマイクでリズムタイミングを検出する実験となります。
奏者の(練習している)リズムを検出して評価するのにはどのような方法が適しているでしょうか?
まずは、
・クリック音は奏者だけに聞こえるようにする。
・リズムは一定以上の大きさ音の出始めではなく、閾値超え部分を演奏タイミングとしてみなす。
でやってみようと思います。
今回も技術的な見通しがないので、長期間かかるかもしれませんが、ご了承くださいませ。
演奏したタイミングが、正確だったかどうかをすぐに分かるようにしたいです。
検出したい対象音
練習用にタム(12インチ単体)にメッシュヘッドを貼っています。メッシュヘッドは網戸みたいなもので、勢いよくたたいても大きな音がでない優れものです。たたいた感じ、反発も普通のドラムと大差ない(はず)です。タムは友人から譲ってもらったもので、個人としては電子ドラムしか持ってません。
たたいた感じは以下です。パン、パンと高めのしょぼい音しかでません。
直前のスティック風切り音が予想以上に大きいので驚きました。
風切り音部分はだいたい260Hz、ドラム自体の音はメインの波形で110Hzくらいでした。ドラムの450Hzの倍音も大きいので、そちらを検出するか迷いどころですが、とりあえずは、周波数解析せずに、波形が指定した敷居値を超えた時点をヒット点とみなして考えてみます。
あれ?もしかして録音ってほとんどやってない
音系のプログラミングは発声、発音ばかりで、音を鳴らすための入力(MIDI)はやったことがありますが、音自体の録音をpythonでやったことはないかもです。(入力は他のツールで録音済のwaveファイルがほとんどでした)
まずはマイクから音を録るところからの検証となります。先は長いです。
録音にはやはりpyaudioを使用します。入力にはTASCAM US-2x2という古いオーディオインターフェースをつかっています。音にこだわらなければヘッドセットのマイクでもOKです。
確認の結果、入力チャンネルと接続設定を間違わなければ問題なく録音できました。逆に言えば、入力チャンネルと接続設定を間違ってたので、最初は全く音を拾えませんでした。わたくしの環境では、入力チャンネルは2、接続設定(オーディオインターフェース設定)は外部エフェクトOFFでループバックON、モノラルの設定が必要でした。このあたりは使用されている環境によって大きいく異なると思います。
どこで音をON(叩かれた瞬間)を検知するか?
普通の正しい環境であれば、マイクを音を出すモノの上部に設定しそちらに向け、モノの上部から叩けば、音は必ず「陰圧」(気圧の低い)側から発生します。たたいた瞬間はわずかにモノが凹むので、空気がそこに引っ張られ気圧が低くなるためです。
マイク接続の極性が間違っていれば逆位相になりますがそうだとしてもその反動で検出できますので、「陰圧」(マイナス)側でのみ発音タイミングを検知することにします。実験して誤動作しないくらいな敷居値を決めようと思います。
ただ、最終的には「陽圧」「陰圧」両方での検出をすることになると思います。バイオリンなどの弦楽器ではボーイングやストロークの方向で開始位相が違うためです。
遅延測定と補正
音声(画像も)をデジタル処理する場合、バッファリング(ある程度蓄積)してから処理することになるのでどうしても遅延が発生します。
音の送出と受信にどれだけ差があるかを測定し、実際の発声タイミングを推定します。(ここは正確に測れない認識です)。送信と受信のバッファリングサイズを同じにして、差の1/2が現実での発声タイミングであるとみなすことにします。音の伝達速度は「悲しくなるくらい遅い」のでこの遅延もかなりありますが、これも無視します。(やろうと思えば、モノ(楽器)とマイクの距離、ヘッドフォン(スピーカ)と耳の距離、気温を入力して補正できますが、今回そこまではやらないつもりです。
測定結果は、PC⇒オーディオインターフェース⇒スピーカー⇒空気⇒マイク⇒オーディオインターフェース⇒PCで約240~250msecもの遅延が発生していました。
余談
なお、娘は「あんさんぶるスターズ」という音ゲーにはまっており、はためにはその手さばき(演奏?)は「神の領域」に見えます。本人に言わせれば「私なんてヘタクソな方!」だそうです。
これから、(あんスタの)ライブビューイングしにいく娘を送らなければなりません。いってきます。ゲームとアニメのマルチ展開なのかな?(声優さんのライブのようでした)
さて、遅延問題はあるものの、音声入力の方法はわかりました。
次回は遅延対策をやってみようと思います。