Unity でイントロ付きループするライブラリを書いた
Unity でイントロ付きループ音楽を再生するコードを書いたので、共有する。
概要
- Unity のデフォルトではイントロ付きループを再生する機能がない
- イントロ付きループを再生するライブラリ dddnuts / DDDMusic を書いた
- AudioSource をアタッチしているオブジェクトに DDDMusic コンポーネントを追加して、セクションを定義するだけでイントロ付きループが可能になる
- 元ネタは geekdrums / MusicEngine
環境
- Unity 5.3.1
使い方
1. AudioSource をシーンに配置する
配置する。(いつもどおり)
2. 配置したオブジェクトに Music コンポーネントを追加する
3. セクションを定義する
Section Definitions の Size にセクション数を入力すると、各セクションを定義できるようになる。
プロパティ名 | 説明 |
---|---|
Name | セクション名 |
Bpm | BPM(テンポ) |
Bars In Section | セクションが何小節の長さか |
Beats In Bar | 1 小節に何拍含まれるか |
Transition | 次にどこに行くか |
4. 再生する
Music コンポーネントの Play
メソッドを呼び出すと、音楽が再生される。
AudioSource の Play On Awake
にチェックを入れておけば、シーン開始時に自動で再生される。(いつもどおり)
実装について
やったことは主に以下の3つ。
- 元の AudioSource から音データを取得し、各セクション毎の AudioSource に分割する。
- 各セクション毎の AudioSource を順次再生する。
- 再生中のセクションが終わりそうなときに、そのセクションの Transition によって次のセクションを決める。
他の手段
ミドルウェアを使う
日本のインディーゲーム界隈だと ADX2LE を使っているという情報を良く見る(気がする)。 Game Audio Table V2.7 | Audio Middleware Implementation Table によると Fabric も良さそう。 どちらも無料で使い始められる(売上が指定される金額未満の場合)のが最高。
ただしかなり多機能で、今回はそこまでの機能は必要ないかなーと思ったので見送った。
MusicEngine
geekdrums / MusicEngine という元ネタがあって、DDDMusic と同じことができる。 というか DDDMusic 以上のことができる。
ただし Transition を Through にすると、自分の環境ではうまく動かなかった。セクションの遷移時に再生位置がずれてしまうようだった。 最初はプルリクを出すつもりでコードを読み始めたけど、理解しきれなかったので結局自分で最初から書き直した。
参考にさせて頂いたので、geekdrums さんのライセンスを引き継いでいる。
まとめ・感想
- Unity のデフォルトではイントロ付きループを再生する機能がないが、スクリプトを少し書けば実現できる
- dddnuts / DDDMusic を使えば、コンポーネントひとつ追加するだけでイントロ付きループが再生できる
- 他の手段として、無料で使い始められるミドルウェアや、geekdrums / MusicEngine がある
適当に書いたけど、そこそこいい感じに動いてるっぽくて、今のところ満足してる。