読者です 読者をやめる 読者になる 読者になる

夏までにiPhone アプリつくってみっか!

趣味でiPhone/Androidアプリを開発し、日々勉強した事を書いています。オープンワールド系レースゲームをUnityで開発中です。

GarageBandでループ再生用ファイルを作る方法(ただし時間制限あり)

DTM GarageBand Audecity cocos2d TravelShooting JP

ゲーム用BGMの多く、特にボス戦用の曲はつなぎ目無くループ再生されますよね?
曲が終わってから次に始まるまでにたとえわずかでも曲間が開いているとどうでしょう。
シューティングゲームの場合はノリが悪くなってゲームに集中できなくなるかもしれません。
ちなみに、私が以前リリースしたBeeClusterは曲間に結構な無音部分があるので非常にノリにくくなっています。

さて、GarageBandでゲーム用の曲を作り、「共有->曲をディスクに書き出し...」で音楽ファイルを作成すると残念ながら連続再生に適さないファイルができてしまいます。
というのも、曲が終わった後の余韻の部分がファイルに含まれているので、ループ再生すると曲間にかなりの無音の時間ができてしまうのです。
これは、「サイクル範囲のみ、または選択したリージョンの長さを書き出す」オプションをチェックしてもしなくても同じようになります。

曲の終わりの部分の波形を見るとこのようになっています。
これはAudacityというサウンド編集用フリーソフトで表示しています。
f:id:takujidev:20140426200553p:plain
最後のだんだん振幅が小さくなっているところが余韻の部分で、その後に無音部分が長ーく続いています。また、曲の頭の部分にも短い無音部分が付いています。

基本的にはこの余韻とその後ろの無音部分を切り取ればいいのですが、波形を見ても曲と余韻の境界がはっきりしないので、切るべき位置がわかりません。

そんなときは「共有->着信音をiTunesに...」で書き出すと余韻を一切含まないファイルを作る事ができます。

ただし、40秒以内の曲限定です

それ以上の秒数の曲だと「長さを調整する必要があります」というエラーが出て書き出す事ができません。
f:id:takujidev:20140426210220p:plain


生成されたファイルはiTunesのライブラリ内の着信音というところにありますので、ドラッグ&ドロップで好きなファルダーにコピーします。
このファイルは拡張子が.m4rになっています。これはiPhoneの着信音用の拡張子だそうですが、ファイル名を編集して拡張子を.m4aに書き換えれば通常のAACファイルとして使用できます。

ということで、今作っているゲームのボス戦用の曲は全て40秒以内に納める事になりました。

ちなみに、良く似た「共有->曲をiTunesに...」で書き出す場合は40秒を超えていてももんだいないのですが、残念ながら余韻と無音部分が入ってしまいます。

なお、着信音用に書き出したファイルをAudecityで開いて波形を拡大して行くと曲の前後に短い無音部分が付いているのがわかりますが、cocos2dのゲームで使う場合はこれは気にしなくても良さそうです。

Audecity上でループ再生すると繰り返し部分でプチッとノイズが出てタイミングが少しずれるので気になってしまうのですが、cocos2dのゲーム上で再生すると全くつなぎ目がわかりません。
もしかするとcocos2dのSimpleAudioEngineが無音部分を無視するような処理になっているのかもしれません。

ちなみに、Audecity上で無音部分を削除してAACファイルを書き出してみたのですが、曲の頭の無音部分はいくら切っても消えず、曲の最後の部分が逆に何故か少し切れてしまいました。
AIFFファイルだと問題なく無音部分をカットできたので、多少の無音部分が残るのは圧縮ファイルの宿命なのかもしれません。

このページにMP3の曲の頭に付くエンコーダ・ディレイという無音部分について書かれていますが、たぶんAACでも同様なのだと思います。


ちなみに、豪快に曲間が開いてしまったBeeClusterはこちら。