Unityのオーディオ機能 (AudioClip/AudioSource)をより便利に扱うためのツールです。
キューシート/キュー/トラック形式でAudioClipと関連するパラメータを定義することができます。
詳細
再生する単位です。 以下のようなパラメータを持ちます。
- 名前
- AudioClip
- ボリューム
- ボリューム幅 (Volume range)
- ピッチ
- ピッチ幅 (Pitch range)
- 開始サンプル値 (Start sample)
- 終了サンプル値 (End sample)
- ループ時開始サンプル値 (Loop start sample)
- ループの有無
- ランダム再生時の重み (Random weight)
- 発音数制御時の優先度 (Priority)
- フェードイン/フェードアウト時間 (Fade time)
ループ有り設定の場合、開始サンプル値から終了サンプル値までを再生した後にループ時開始サンプル値から終了サンプル値までを繰り返し再生します。
ループ無し設定の場合、開始サンプル値から終了サンプル値までを再生して停止します。
トラックを束ねるオブジェクトです。
「名前」または「インデックス値」を用いてサウンド再生をリクエストします。
以下のようなパラメータを持ちます。
- 名前
- カテゴリID
- 同時再生制御タイプ (Throttle type)
- 同時再生数 (Throttle limit)
- ボリューム
- ボリューム幅 (Volume range)
- ピッチ
- ピッチ幅 (Pitch range)
- 再生タイプ (Play type)
- トラックリスト
再生タイプには「順次再生 (sequential)」と「ランダム再生 (random)」の2つがあります。
順次再生はトラックリストを先頭から順番に再生します。
ランダム再生はトラックごとの重みに従ってランダムに選出したトラックを再生します。
キューを束ねるオブジェクトです。 以下のようなパラメータを持ちます。
- 名前
- 同時再生制御タイプ (Throttle type)
- 同時再生数 (Throttle limit)
- ボリューム
- ピッチ
- キューリスト
以下のようなパラメータを持ちます。
- 同時再生数制御タイプ (Throttle type)
- 同時再生数 (Throttle limit)
- カテゴリリスト
任意のカテゴリを定義することができます。(例: BGM/SE/Voice)
カテゴリにAudioMixerGroup
を割り当てることで、再生時にAudioSourceの出力先に設定されます。
ボリューム幅を設定すると再生時の音量をランダムに増減することができます。
例えば、ボリューム0.5でボリューム幅0.2の場合、0.4〜0.6の範囲でランダムにボリュームが決定します。 (値域0.00〜1.00)
ボリューム幅はキュー/トラックに設定できます。
AudioSourceに設定されるボリュームはキューシート/キュー/トラックのボリュームを乗算した値です。
ピッチ幅を設定すると再生時のピッチをランダムに増減することができます。
例えば、ピッチ1でピッチ幅0.02の場合、0.98〜1.02の範囲でランダムにピッチが決定します。(値域0.01〜3.00)
ピッチ幅はキュー/トラックに設定できます。
AudioSourceに設定されるピッチはキューシート/キュー/トラックのピッチを乗算した値です。
ピッチ反転を有効にすると値が負の数になり、逆再生になります。
同時に再生できるサウンドの数です。(0は無制限)
上限に達した状態で新たな再生リクエストをした場合、制御タイプに基づいて処理されます。
制御タイプには「優先度順 (priority order)」と「先着順 (first come, first served)」の2つがあります。
「優先度順」は新しいリクエストの優先度が再生中のトラックの優先度以上なら、最も優先度が低いトラックを停止して新しいリクエストを再生します。
「先着順」は新しいリクエストは棄却されます。
キュー、キューシート、カテゴリ、ランタイム設定の順で判定を行います。
以下のようなパラメータを持ちます。
- 色定義リスト
色定義は任意の名前と色で構成されます。
キュー/トラックに関連付けることができます。
例えば、「編集中:赤」「完了:緑」とすることで作業状況を分かりやすくするといった使い方があります。
- Unity 2021.3以上
インストールは以下の手順で行います。
- Window > Package Manager を選択
- 「+」ボタン > Add package from git URL を選択
- 以下を入力してインストール
あるいは Packages/manifest.json を開き、dependencies ブロックに以下を追記します。
{
"dependencies": {
"jp.co.cyberagent.audioconductor": "https://github.com/CyberAgentGameEntertainment/AudioConductor.git?path=/Packages/AudioConductor"
}
}
バージョンを指定したい場合には以下のように記述します(バージョンは適宜書き換えてください)。
バージョンを更新するには上述の手順でバージョンを書き換えてください。
バージョンを指定しない場合には、Packages/package-lock.json ファイルを開いて本ライブラリの箇所のハッシュを書き換えることで更新できます。
{
"dependencies": {
"jp.co.cyberagent.audioconductor": {
"version": "https://github.com/CyberAgentGameEntertainment/AudioConductor.git?path=/Packages/AudioConductor",
"depth": 0,
"source": "git",
"dependencies": {},
"hash": "..."
}
}
}
Assets > Create > Audio Conductor から生成するアセットを選択します。
このメニューはプロジェクトビューのコンテキストメニューからも開くことができます。
Settingsを選択してランタイム用設定アセットを作成します。
このアセットは複数作成できますが、同時に1つしか使用できません。
編集はインスペクタから行います。
EditorSettingsを選択してエディタ用設定アセットを作成します。
このアセットはプロジェクトに1つしか作成しないでください。
編集はインスペクタから行います。
CueSheetAssetを選択してキューシートアセットを作成します。
このアセットは必要な数だけ作成して構いません。
編集はインスペクタから開く専用のエディタウィンドウで行います。詳細はキューシートを編集するを参照してください。
左端に縦に並んだ操作選択ボタンでペインを切り替えます。
上から順番にキューシートのパラメータを編集、キュー/トラックを編集、その他操作です。
このペインではキューシートの名前、同時再生制御、ボリューム、ピッチなどを編集します。
このペインはマルチカラムリストとインスペクタから構成されています。
リスト上部にはカラムの表示/非表示の切り替えトグルボタンと検索フィールドがあります。
このペインではキュー/トラックの追加/削除やパラメータの編集を行います。
コンテキストメニューからキュー/トラックを追加します。トラックは親となるキューを選択している状態でないと追加できません。
また、プロジェクト上のAudioClipをリスト上にドラッグ&ドロップしてキュー/トラックを追加できます。
コンテキストメニューから選択したキュー/トラックを削除します。
バックスペースキー/デリートキーでも削除できます。
リスト上にはキュー/トラックの一部パラメータが表示されています。
プルダウンや入力フィールドから値を設定することができます。
キュー/トラックを選択すると、選択したキュー/トラックの詳細なパラメータがインスペクタに表示されます。
インスペクタには各種パラメータの編集機能の他、キュー/トラックの試聴機能もあります。
その他操作としてエクスポート/インポート機能を提供しています。
キューシートの内容をcsvファイルにエクスポート/csvファイルからインポートできます。
エクスポートしたcsvファイルは [キューシートの名前].csv というファイル名になります。
インポートの際に各値が値域を超えていた場合、値域に収まるように丸められます。
AudioClipは AssetDatabase.FindAssets
で見つかれば割り当てます。
AudioConductorInterface.Setup
の第一引数にランタイム用設定アセットを指定します。
第二引数はコントローラを解放するにて解説します。
var settings = Resources.Load<AudioConductorSettings>("***");
AudioConductorInterface.Setup(settings, OnCueSheetUnused);
AudioConductorInterface.CreateController
の第一引数にキューシートアセットを指定します。
第二引数はキューのインデックス値、またはキューの名前を指定します。
戻り値はICueController
インスタンスで、再生/停止/一時停止/再開といった操作ができます。
再生操作をするとITrackController
インスタンスが取得できます。このインスタンスからはボリューム/ピッチ/再生位置といった詳細な操作の他、再生終了時のコールバックを設定することもできます。
var cueSheetAsset = Resources.Load<CueSheetAsset>("***");
_controller = AudioConductorInterface.CreateController(cueSheetAsset, 0);
var trackController = _controller.Play(0);
trackController.AddStopAction(() => Debug.Log("Audio stopped."));
生成したICueController
インスタンスはメンバフィールドに保持しておき、使い終わったら 解放(Dispose) してください。
再生中に解放した場合、再生を停止した上で解放処理を行います。
解放したコントローラがあるキューシートに属する最後のコントローラの場合、AudioConductorInterface.Setup
の第二引数に指定したコールバックが実行されます。アセットバンドルの解放などに活用してください。
_controller.Dispose();
Package Manager > Audio Conductor > Samples からImportボタンを押下してサンプルリソースをインポートします。
インポートが完了したら、以下のサンプルシーンを開いて実行します。
Assets/Samples/AudioConductor/[バージョン]/Sample/SampleScene.unity
- A: キューの選択プルダウンメニュー
- B: トラックのインデックス選択プルダウンメニュー
- C: トラックの名前選択プルダウンメニュー
- D: ①で選択したキューを再生タイプに則って再生する
- E: ②で選択したインデックスのトラックを再生する
- F: ③で選択した名前のトラックを再生する
- G: 再生中のサウンドを一時停止/再開する
- H: 再生中のサウンドを停止する
- I:
ICueController
を全て解放する - J: 音量調整スライダー
AudioMixerの音量をスクリプトから操作するためには、AudioMixerのインスペクタ上で設定する必要があります。
パラメータ名はAudio Mixerウィンドウから変更できます。
下記ファイルを参考にしてください。
本ソフトウェアはMITライセンスで公開しています。
ライセンスの範囲内で自由に使っていただけますが、使用の際は以下の著作権表示とライセンス表示が必須となります。