🎶

【追実験】ゲームシーンからそれに適したBGMの音響特徴を予測する

2023/02/24に公開

概要

この記事では,私が執筆した論文『ゲームシーンからそれに適した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を用いて動画を保存してください.必要があればこちらのソースコードを参照してください.また,動画のファイル名をゲーム名に直すと便利です.

フリー音源データ

フリー音源データを作成します.まず,YouTube上に投稿されているフリー音源の動画のURLを集めてください.次に,集めたURLを「music」フォルダの「url.txt」に格納してください.URL同士は改行で区切ってください.最後に,youtube-dlを用いて動画を保存してください.必要があればこちらのソースコードを参照してください.

モデルの学習

ゲームの映像を音響特徴に変換するモデルを作成します.必要があればこちらのソースコードを参照してください.

入力データと出力データ

入力データと出力データを作成します.まず,保存した動画から12秒の動画を128個取り出してください.次に,取り出した動画に「入力データの前処理」と「出力データの前処理」を施してください.最後に,128個のデータをシャッフルしてから半分を学習データ,もう半分をテストデータとしてください.

入力データの前処理

入力データの前処理をします.まず,OpenCVを用いて取り出した動画をロードします.次に,動画の映像から画像を1フレームづつ取り出します.最後に,色空間をHSV,サイズを80:80に変換します.このとき得られるデータを入力データとします.

出力データの前処理

出力データの前処理をします.まず,LiBROSAを用いて取り出した動画をロードします.次に,動画の音響を音響特徴に変換します.このとき得られるデータを出力データとします.

モデルの構築

TensorflowKerasを用いてゲームの映像を音響特徴に変換するモデルを構築します.まず,CNNを構築して画像をベクトルに変換します.この論文では図のようにCNNを構築しました.そして,LSTMを構築してベクトルを音響特徴に変換してます.この論文ではLSTMを2回繰り返しました.

モデルのチューニング

  • 最適化手法:ADAM
  • 損失関数:平均二乗誤差
  • バッチサイズ:16
  • エポック
    • chromagramを学習する場合:500
    • 他の音響特徴を学習する場合:100

ゲームの類似度に関する実験

ゲームの類似度に関する実験を行います.まず,ImageHashを用いてゲームの映像をハッシュ値に変換してください.必要があればこちらのソースコードを参照してください.そして,ハッシュ値の差を計算してゲームの類似度を求めてください.必要があればこちらのソースコードを参照してください.

予測した音響特徴に関する実験

予測した音響特徴が実際の音響特徴を反映しているか実験します.まず,学習済みモデルと入力するゲームを1つずつ選んでください.また,入力するゲームから12秒のシーンをいくつか抽出してください.次に,抽出したシーンをモデルに入力して音響特徴を予測してください.また,LiBROSAを用いて抽出したシーンを音響特徴に変換してください.

さらに,Earth Mover's Distanceを用いて予測した音響特徴と実際の音響特徴の距離を全ての組み合わせで計算してください.最後に,予測した音響特徴が実際の音響特徴を反映している音響特徴の組み合わせを計算してください.かなり省略して説明したので,詳しくはこちらのソースコードを参照してください.

フリー音源の出力に関する実験

どの音響特徴が異なるシーンの入力に対して異なるフリー音源を出力するか実験します.まず,学習済みモデルを1つ選んでください.次に,集めたゲームから12秒のシーンをいくつか抽出してください.そして,抽出したシーンをモデルに入力して音響特徴を予測してください.また,LiBROSAを用いて集めたフリー音源を音響特徴に変換してください.

さらに,Earth Mover's Distanceを用いて予測した音響特徴とフリー音源の音響特徴の距離を全ての組み合わせで計算してください.最後に,異なるシーンの入力に対して異なるフリー音源を出力する音響特徴の組み合わせを計算してください.かなり省略して説明したので,詳しくはこちらのソースコードを参照してください.

ご精読ありがとうございました.

Discussion