簡易アタック検出オブジェクトをつくってみた
Max SDKで、まずは手短に実装できてライブで役に立ちそうな物を練習がてら作ってみました。「オーディオを読み込んでアタック部分を検出するオブジェクト」です。上記の動画がデモになります。右下のリストに、アタック部分の開始タイミング(ms)が入り、選択すると音の頭から再生が始まっています。
今回のエクスターナルオブジェクトの作成で、Max SDKを使えば、非リアルタイムにバッファをいじって、1サンプル毎の処理をかけるという事も確かめられました。
プログラムの簡単な解説
- 音声バッファをフレームに分割
- フレーム毎に振幅の最大値を計算
- フレーム間の振幅の差分を計算
- 差分がある一定の大きさ以上であればアタック
という結構簡単な処理で上記のような結果を得られました。
ただし楽曲などの複雑なオーディオ信号の場合は失敗してしまいます。もっと精度の良い検出をしたければ、各フレームに対してFFTを使って周波数領域にした上で、振幅や位相の変化から検出したりすると精度があがるようです。今後やってみたいです。
参考文献
- Designing Audio Objects for Max/MSP and Pd – Max External Object 作成について、初歩から分かりやすく説明してあります。
- A Tutorial on Onset Detection in Music Signals – Onset Detection の色々な手法について、比較検討されている論文です。