Pythonをそろそろ忘れたので
こんにちわ、こんばんわ。かえるのクーの助手の「井戸中 聖」(いとなか せい)でございます。
あまりにもリズム音痴なのを矯正するため、メトロノームの実用版をつくりたいと思っています。忘れてしまったPythonを思い出す契機となればとも思っています。
前回のメトロノームは「実験用」で実用に耐えるものではありませんでした。
今回はちゃんと誤差なくリズムを刻むものにしたいと思っています。
「Python メトロノーム」で検索してみると、なんとGoogleのトップページに表示されます。そうなんだ。。。とっても恥ずかしいことなので、ちゃんと実用に耐えるものを作成して公開したいと思います。
要求仕様
・処理の重さや他のプログラムの影響でリズムが揺るがないこと
・(自分の)好みの音で音がなること
・拍子の練習ができ、リズム音痴を克服できるものであること
・リズムどりをフィードバックして、評価を行える入力機能を備えること(トレーナ機能)
・各種変拍子やポリリズムに耐えるものであること
変拍子&ポリリズム対応のメトロノームはみたことないので、つくるしかありません!
「変拍子とは何か?」についてはこちらを参照ください。
本件のメトロノーム作成について技術的には問題なさそうですが、「問題はモチベーションが完成まで維持できるか?」です。
がんばります。
どうやって拍子をずれなくするの?
前回作成した実験用メトロノームはマルチスレッドで、perf_counterを使っているいので、精度は「そこそこ」なのですが、処理が重いときはわたくしでも分かるほどモタります。
今回の実用版では、拍の開始タイミングを1/44.1K秒、もしくは 1/48K 秒の粒度でずれないように計算します。ただし、バッファ送出までの時間内に(余裕をもって)データが準備できない場合は破綻します。いままで、リアルタイムエフェクターでは何度もバッファデータの準備が合わず破綻してきていますが、「音の頭合わせなら可能だろう」的な発想です。
原理的には、バッファ枯渇がないように回せば1/48Kの精度のメトロノームができます。♩=60ならば、1拍あたり、誤差 1/48000sec精度となります。「バッファ枯渇がないように 」というところがミソで、あまりに性能が低いCPUだとバッファ枯渇する可能性があります。回避策として(リアルタイム処理ではできるだけ短くする「チャンク」の長さを逆に長くすることによりバッファ枯渇を防ごうと思います)
まぁオーディオデータ精度レベルでずれないようにWaveをリアルタイム計算した情報を出力するので、かなり正確だと思います。
普通のメトロノームでよくない?
そのとおりです。興味本位に作りたくなっただけです。たぶん使い勝手も悪いです。
どうやっていい音をだすの?
Waveファイルを指定してサンプル音をそのまま出します。お気に入りの音を探す必要があります。
とりあえずは48K(bps)で計算しようと思いますので、48Kの音(waveファイル)が必要です。
プログラム完成後に記事を書けば?
そのとおりなのですが、諸々のリハビリを兼ねた記事になりますので、ご容赦ください。
(おまけ)
こまった変態さんですね。
ようこそ、変態拍子の世界へ!