こんにちは。きんくまです。
先日iPadアプリで効果音を作る記事をかきました。
>> [iOS] アプリ開発日記 効果音つくるのにKORG iPolysix for iPadが便利
それでそこから実際のアプリに組み込む流れをまとめてみました。
といっても、このあたりのことを特に詳しいわけではないので、個人的メモな感じです。
アプリから書き出すときに気をつけること
自分の場合はiPolysixというiPadアプリで効果音を作りました。
んで、気に入った音ができたのでwavで書き出します。そのときに、どうやら音量のバランスを見てあげてから書き出した方が良かったです。
というのは、いざ全部の音を取り込んでみると、すごく耳についたり、逆に小さすぎちゃったりと音によってマチマチでして、音のバランスが上手くとれていないように感じたのです。
プログラムで音量を調節することも可能なのですが、自分で作るのだったら書き出し時に最初からある程度はバランスをとっておいた方が良さそうです。
たいていのソフトにはミキサー(Mixer)という部分があるみたいで、そこで最終出力の音を調整してあげると良いです。
基本は赤いメーター部分に、ゲージや針が入らないようにします。そこに入ると音がビビるというか、割れるというかそんな感じになります。
なので、緑色部分の中で収まるようにする。
作ってて感じたのは、音量メーターでは同じ音量のはずなのですが、高音の方が耳につく感じになりやすく、逆に低音は聞こえにくい印象でした。さらに、ヘッドホンを通した音とiPhoneのスピーカーでもかなり音の聞きやすさや聞こえ方は違うので、両方ざっくりと聞きながら、アプリ全体を通してバランス良くなるように気をつけると良いかと思いました。
さきほどの記事に書いたのですが、このあたりの試行錯誤中は自分の端末にwebサーバーをたてて、そこをiPhoneから見に行くような作りにしておくと楽でした。
トリミング
書き出したwavデータは無音部分が含まれていると思うので、そこをカットしてあげると容量が節約できます。
自分の場合は無料のAudacityを使ってやりました。
>> Audacity: フリーのオーディオエディタ・レコーダー
Audacityにwavファイルを読み込んだところ。こんな感じに波形データが見えます。左端に波形があって、右側の方は無音部分になっています。
無音部分がいらないので、ギリギリにして切ってしまいたくなるのですが、0.5秒ぐらいは確保しつつ切り取りました。
これは何でかといいますと、以前にFlashでだったか覚えてないのですが、あまりに短すぎるサウンドファイルがうまく読み込めないことがあった経験があったためです。
iPhoneではこんなことが起きるのかは不明ですが、念のためにそうしています。
無音をきりとったところ。このあと、File > ExportでまたWAVで書き出します。
これで、いろんな形式に変換する前のオリジナルデータができました。
形式を変換する
このWAVデータは非圧縮で44100Hzの16BitのCD音質となっております。
周波数とビットレートについて、何年か前に書いた記事がありますので、これ何ぞ?という方はもし良かったらみてみてくださいませ。
>> はじめてのサウンドプログラミング2(サンプリング周波数と量子化ビット数)
このままアプリに組み込んでも良いのですが、実際には気にならない程度まで音質を落として使った方が容量も軽くなって良さそうです。
またiPhoneやMacのネイティブフォーマットのAIFFに変換することにしました。
長いBGMなどは圧縮形式のmp3形式にした方が容量的に良いと思いますが、今回は短い効果音なので、非圧縮形式にしました。
——————————–
完全に余談なのですが、最初は記事を書いていて、ここで「iPhoneはARMプロセッサでリトルエンディアンだからドヤ顔でAIFFだよ」と書こうとしたのですが、調べてみるとwavでも問題ない気がしてきました。
>> A few things iOS developers ought to know about the ARM architecture
WAVはMicrosoftとIBMが作ったwindowsのネイティブフォーマット。RIFFを元に作った。
リトルエンディアン。非圧縮。
>> WAV
AIFFはAppleが作ったmacのネイティブフォーマット。IFFを元に作った。
もともとはビックエンディアンだった。MacOS-Xの開発とともに、リトルエンディアン版のAIFF-Cを作った。現在iTunesでAIFFとして読み込むときはAIFF-Cが使われている。非圧縮。
現在でもどちらのエンディアン版も使われている。なので拡張子がAIFFでも、中身を見てみないとエンディアンはどちらかわからない。
>> Audio Interchange File Format
ここでビッグエンディアンのIFFをベースに、リトルエンディアンのRIFFは生まれたので、WAVもAIFFも根っこは同じらしい。
>> Interchange File Format
——————————–
さて、今回はAIFF形式で128kHz 16bitにすることにしました。
Cocoaの日々さんに、ファイルフォーマットのコマンドツールが紹介されてました。
>> Cocoaの日々: オーディオフォーマット変換 afconvert
で、ファイル1枚につき、コマンド1回たたくと面倒なので、1回でフォルダ内の全てのwavを目的のaiffにするスクリプトを書きました。
#!/bin/sh
for dir in ./*.wav; do
test_path=$dir
string_filename=${test_path##*/}
string_filename_without_extension=${string_filename%.*}
# string_path=${test_path%/*}
# string_extension=${test_path##*.}
afconvert -f AIFF -d BEI16@12800 ${string_filename_without_extension}.wav ${string_filename_without_extension}.aiff
done
ファイル名の取得部分はこちらに掲載されているものを使わせていただきました。
>> 【FreeBSD】シェルスクリプトでパス文字列からファイル名/ディレクトリ名/拡張子を抽出する
使い方はwavの入っているフォルダに、上のテキストを適当な名前(例えばconvert_aiff.sh)で保存します。
Terminalで、cdでそのフォルダに移動した後に、実行権を与えます。
chmod a+x ./convert_aiff.sh
ls -l でこんな感じになっていれば準備完了
-rwxr-xr-x 1 kinkuma staff 535 Feb 27 10:27 convert_aiff.sh*
実行します。最初の./というカレントディレクトリを意味するパスをつけないとうまく実行できません。
./convert_aiff.sh
これで、目的のファイルが全て変換されて音素材として完成しました。
あとはアプリに組み込んでAVAudioPlayerなどを使って鳴らしてあげれば完成です。
——————————-
書き終わってきづいたのですが、さきほどのコマンドafconvertでAIFFに変換しているときにビッグエンディアンに強制的にしている(AIFF-Cでなく)ので、これよりもWAV形式のままサンプリングレートを落とした方が良い気がしているんですけど、どうなんでしょうね、、?
——————————-