【追実験】ゲームシーンからそれに適したBGMの音響特徴を予測する
概要
この記事では,私が執筆した論文『ゲームシーンからそれに適したBGMの音響特徴を予測する手法の検討』を簡単に解説します.さらに,この論文で行った評価実験の方法を解説します.追実験などを実施する際にお役立てください.また,提案手法を簡単に実践したいという方はこちらにアクセスしてください.
論文解説
はじめに
ゲームやシーンの雰囲気とBGMの間には強い関係があると考えられます.例えば,戦闘シーンでは激しいBGMやテンポが速いBGMを採用することでプレイヤーを盛り上げたり,プレイヤーに緊迫感を伝えたりします.また,会話シーンでは穏やかなBGMやテンポが遅いBGMを採用することでプレイヤーが焦らないようにしたり,プレイヤーに会話内容を聞かせたりします.
一方,ホラーゲームでは音量が小さいBGMや不協和音が多いBGMを採用することでプレイヤーを脅かしやすくしたり,プレイヤーの不安を煽たっりします.また,リズムゲームではビートが強調されたBGMや繰り返しが多いBGMを採用することでプレイヤーをゲームに集中しやすくしたり,プレイヤーをリズムに乗りやすくしたりします.
これらのことから,同じゲームやシーンのBGM同士はある程度の一貫性があると良く,異なるゲームやシーンのBGM同士はある程度の差異があると良いことがわかると思います.そこで,ゲームとシーンを指定することでそれに適したBGMの音響特徴を予測する手法を提案します.詳しい解説は論文や資料を参照してください.
提案手法
この論文では,BGMを付加したいゲームの映像(シーンとして扱う)を与えると,それに適したBGMを自動で検索する手法を提案しました.まず,ゲームとシーンを入力します.ゲーム名を入力して対応する学習済みモデルを指定します.また,映像を学習済みモデルに入力してシーンを指定します.次に,映像を音響特徴に変換します.CNNで1フレームごとに画像をベクトルに変換し,LSTMで1フレームごとにベクトルを音響特徴に変換します.さらに,BGMを検索します.予測した音響特徴とフリー音源の音響特徴の距離を計算し,距離を基準にフリー音源集を昇順ソートします.最後に,ソートしたフリー音源集を出力します.図に表すと以下のようになります.
追実験
この論文で行った評価実験の方法を解説します.追実験などを実施する際にお役立てください.
準備
- Google アカウントを作成してください
- Google ドライブにアクセスしてください
- Google Colaboratoryをインストールしてください
- 左上の「新規」をクリックしてください
- 「その他」にカーソルを合わせてください
- 「アプリを追加」をクリックしてください
- 「アプリを検索」に「Google Colaboratory」と入力して検索してください
- 黄色の円が2つ書かれたアイコンをクリックしてください
- 右上の「インストール」をクリックしてください
- 図のように作業用フォルダを作成してください
- 左上の「新規」から「新しいフォルダ」と「Google Colaboratory」を作成できます
- テキストファイルは「ファイルのアップロード」を利用して作成する方法を推奨します
データセット
ゲームデータ
ゲームデータを作成します.まず,YouTube上に投稿されている学習したいゲームのspeedrun動画のURLを集めてください.次に,集めたURLを「sprun」フォルダの「url.txt」に格納してください.URL同士は改行で区切ってください.最後に,youtube-dlライブラリを用いて動画をMP4形式とWAV形式で保存してください.必要があればこちらのソースコードを参照してください.また,動画のファイル名をゲーム名に直すと便利です.
フリー音源データ
フリー音源データを作成します.まず,YouTube上に投稿されているフリー音源の動画のURLを集めてください.次に,集めたURLを「music」フォルダの「url.txt」に格納してください.URL同士は改行で区切ってください.最後に,youtube-dlライブラリを用いて動画をWAV形式で保存してください.必要があればこちらのソースコードを参照してください.
モデルの学習
ゲームの映像を音響特徴に変換するモデルを作成します.必要があればこちらのソースコードを参照してください.
データの前処理
ゲームの映像と音響を前処理します.以下の処理で得られるデータを100個用意してください.100個のデータをシャッフルしてから半分を学習データ,もう半分をテストデータにしてください.
映像の前処理
映像を前処理します.まず,OpenCVライブラリを用いてMP4ファイルをロードします.次に,映像を12秒おきに分割します.そして,映像から画像を1フレームづつ取り出します.最後に,画像のサイズを80:80,色空間をRGBに変換します.
音響の前処理
音響を前処理します.まず,LiBROSAライブラリを用いてWAVファイルをロードします.次に,音響を12秒おきに分割します.最後に,音響を音響特徴に変換します.
モデルの構築
Tensorflowのkerasライブラリを用いてゲームの映像を音響特徴に変換するモデルを構築します.まず,CNNを構築して画像をベクトルに変換してください.この論文では以下の順にCNNを構築しました.そして,LSTMを構築してベクトルを音響特徴に変換してください.この論文ではLSTM層を2回繰り返しました.
- 畳み込み層
- プーリング層
- 畳み込み層
- プーリング層
- 畳み込み層
- プーリング層
- 平坦化層
- 全結合層
- 全結合層
モデルのチューニング
- 最適化手法: ADAM
- 損失関数: 平均二乗誤差
- バッチサイズ: 16
- エポック数
- chroma系の音響特徴で学習する場合: 500
- それ以外の音響特徴で学習する場合: 100
ゲームの類似度に関する実験
ゲームの類似度に関する実験を行います.まず,ImageHashライブラリを用いてゲームの映像をハッシュ値に変換してください.必要があればこちらのソースコードを参照してください.そして,ハッシュ値の差を計算してゲームの類似度を求めてください.必要があればこちらのソースコードを参照してください.
予測した音響特徴に関する実験
予測した音響特徴が実際の音響特徴を反映しているか実験します.まず,学習済みモデルと入力するゲームを1つずつ選んでください.また,入力するゲームから12秒のシーンをいくつか抽出してください.次に,抽出したシーンをモデルに入力して音響特徴を予測してください.また,LiBROSAライブラリを用いて抽出したシーンを音響特徴に変換してください.
さらに,Earth Mover's Distanceを用いて予測した音響特徴と実際の音響特徴の距離を全ての組み合わせで計算してください.最後に,音響特徴の組み合わせから予測した音響特徴が実際の音響特徴を反映している組み合わせを求めてください.短く説明したので,詳しくはこちらのソースコードを参照してください.
フリー音源の出力に関する実験
どのような音響特徴を用いれば異なるシーンを入力すると異なるフリー音源が出力されるか実験します.まず,学習済みモデルを1つ選んでください.次に,集めたゲームから12秒のシーンをいくつか抽出してください.そして,抽出したシーンをモデルに入力して音響特徴を予測してください.また,LiBROSAライブラリを用いて集めたフリー音源を音響特徴に変換してください.
さらに,Earth Mover's Distanceを用いて予測した音響特徴とフリー音源の音響特徴の距離を全ての組み合わせで計算してください.最後に,音響特徴の組み合わせから出力されるフリー音源が散らばる組み合わせを求めてください.短く説明したので,詳しくはこちらのソースコードを参照してください.
ご精読ありがとうございました.
Discussion