ヒット確認を自動化するためには、何らかの方法でヒットしたことをラズパイに知らせる必要があります。ここでは、攻撃ヒット音を音声で入力し、それを識別することを考えます。
要件
通常攻撃ヒット音を検出して、キャンセル可能時間内に必殺技コマンドを出力する。弱攻撃ほど猶予時間が短いため難しく、反対に強攻撃ほどやさしいはず。
ストVのヒット音の仕様
ストVの通常技ヒット音は以下のとおりです。
- 強中弱それぞれにパンチ・キックの音がすべて別々に割り当てられており、合計で6種類ある。
- 姿勢にはよらず、立ち・しゃがみ・ジャンプそれぞれの音は同じ。
- これら6種類の音に攻撃キャラの音声、やられキャラの音声がランダムで加わる。
ゲームのBGMはOFFにする前提です。方法が確立したら、BGMありにも対応したいです。
方法
ヒット音の検出
ヒット音のサンプルを用意して、入力した音声信号との共分散を計算します。
キャラがやられ時、攻撃時に発生する音声自体はランダムでどうしようもないので、これを外乱ととらえ、音声があってもなくても同じように6種類の攻撃を検出できるようにします。
もし、うまくいかない場合は、別の方法も試していきます。
ヒット音の採集
いろいろな録音ソフトや波形編集ソフトなどがありますが、私は手持ちのCubaseを使いました。波形の切り抜きやwavファイルへの吐き出しなども楽々です。サンプリング周波数は44.1kHzにしました。データ処理の観点からすると、データが少ない方がメモリ消費や処理速度的にいいのですが、それはプログラムに読み込んでから変換することにします。ライブラリによっては、8kHzなどには対応していない場合もあります。6種の通常攻撃を何度か繰り返し、それを録音(原音データ)して、そこから各々のヒット音を抜き出しました。
検証
次は、いきなりラズパイで実装せずに、まずはPCで試してみます。
コメント