前回はサンプリングレートや量子化ビット数を変更できるようにしましたが、 オリジナルのファイルから ffmpeg のデフォルト設定で wav に変換すると、 48kHz となり、実行時間が気になってきます。 そこで、高速化を試すことにしました。

真っ先に、リストに append したり pop したりするのは不安になってくるので、 array をリングバッファとして使いましょう。

その次はどこが遅いか調べます。cProfile なんかを使うとよさそうです。 調べてみると、一番遅いのは sum の呼び出しでしょうか。

window_size で平滑化(?)していますが、毎回その全てを足し合わせるのは効率が悪いですね。 実質的にしなければいけないのは、window_size 分だけ前の値を引いて、新しい値を足すことです。 別の class に切り出して、インデックスの管理もその中に任せましょう。

ファイルも分割したいですが、カレントディレクトリにある python ファイルを実行すると、 explicit relative import が使えないようなので、src ディレクトリ内にファイルを移動して、 python -m src.main のように呼び出すようにします。

** 演算子は、2乗とか決まっていたら乗算で書いた方が早いようですね。 値にあまり意味はなく (値に失礼)、大小を比較しているのみのため、sqrt も不要でしょう。 削除しましょう。

さて、ちまちまと高速化してきましたが、一番遅いのは多分 stdout です。ファイルに書くようにしましょう。 だいたい8倍くらいは高速になりました、多分。