Cocoaの日々: 効果音販売サイトの紹介と iTunesを使ったMP3からAIFFへの変換方法
調べてみるとなかなか使えそうなツールのようだ。以下、参考になったサイト。
[iPhone] オーディオファイルのフォーマット変換方法 | Sun Limited Mt.
Mac OS Xはコマンドも充実--「afconvert」でオーディオフォーマットを変換 - builder by ZDNet Japan
Happy Happy iPhone Game Programming : .WAVファイルを.CAFファイルにコンバート
.wavファイルをまとめてIMA4圧縮の.cafファイルに変換 - iPhoneアプリ開発ブログ
試してみた。
afconvert
利用例 $ afconvert -f caff -d ima4 -d LEI16@22050 input.mp3 output.caf
-h で使い方、 -hf でフォーマット一覧を見ることができる。
$ afconvert -hf Audio file and data formats: '3gpp' = 3GP Audio (.3gp) data_formats: 'aac ' 'samr' '3gp2' = 3GPP-2 Audio (.3g2) data_formats: 'aac ' 'samr' 'adts' = AAC ADTS (.aac, .adts) data_formats: 'aac ' 'aach' 'ac-3' = AC3 (.ac3) data_formats: 'ac-3' 'AIFC' = AIFC (.aifc, .aiff, .aif) data_formats: I8 BEI16 BEI24 BEI32 BEF32 BEF64 UI8 'ulaw' 'alaw' 'MAC3' 'MAC6' 'ima4' 'QDMC' 'QDM2' 'Qclp' 'agsm' 'AIFF' = AIFF (.aiff, .aif) data_formats: I8 BEI16 BEI24 BEI32 'amrf' = AMR (.amr) data_formats: 'samr' 'caff' = Apple CAF (.caf) data_formats: '.mp1' '.mp2' '.mp3' 'QDM2' 'QDMC' 'Qclp' 'Qclq' 'aac ' 'aach' 'aacl' 'alac' 'alaw' 'dvi8' 'ilbc' 'ima4' I8 BEI16 BEI24 BEI32 BEF32 BEF64 LEI16 LEI24 LEI32 LEF32 LEF64 'ms\x00\x02' 'ms\x00\x11' 'ms\x001' 'samr' 'ulaw' 'm4af' = Apple MPEG-4 Audio (.m4a) data_formats: 'aac ' 'aach' 'aacl' 'alac' 'MPG1' = MPEG Layer 1 (.mp1, .mpeg, .mpa) data_formats: '.mp1' 'MPG2' = MPEG Layer 2 (.mp2, .mpeg, .mpa) data_formats: '.mp2' 'MPG3' = MPEG Layer 3 (.mp3, .mpeg, .mpa) data_formats: '.mp3' 'mp4f' = MPEG-4 Audio (.mp4) data_formats: 'aac ' 'aach' 'aacl' 'NeXT' = NeXT/Sun (.snd, .au) data_formats: I8 BEI16 BEI24 BEI32 BEF32 BEF64 'ulaw' 'Sd2f' = Sound Designer II (.sd2) data_formats: I8 BEI16 BEI24 BEI32 'WAVE' = WAVE (.wav) data_formats: UI8 LEI16 LEI24 LEI32 LEF32 LEF64 'ulaw' 'alaw'
変換結果
手元にあった 1秒のMP3形式の効果音ファイルを CAF, AIFF へ変換してみた。
508 afconvert -f caff -d ima4 -d LEI16@22050 -c 1-o pin1.caf pin.mp3 $ afconvert -f caff -d ima4 -d LEI16 MP3_original.mp3 CAFF_LE16.caf $ afconvert -f caff -d ima4 -d LEI16@22050 MP3_original.mp3 CAFF_LE16.caf $ afconvert -f AIFF -d BEI16 MP3_original.mp3 AIFF_BEI16.aif
AIFF はWikipediaによればビッグエンディアン固定のようなので "-f AIFF -d LEI16" と指定するとエラーとなる。
$ afconvert -f AIFF -d LEI16 MP3_original.mp3 AIFF_LEI16.aif Error: ExtAudioFileCreateWithURL failed ('fmt?')
ファイルサイズは次の通り。
AIFF_BEI16.aif 167,868 AIFF_BEI16@22050.aif 85,984 CAFF_LEI16.caf 167,868 CAFF_LEI16@22050.caf 85,984 AIFF_itunes.aif 159,206 MP3_original.mp3 22,569
MP3_original.mp3 が変換元、AIFF_itunes.aif はiTunes10で変換したもの。面白いことに AIFF も CAFF もサイズは同じとなった。また当然ながらビットレートを制限 (22KHz)に制限した邦画サイズが小さくなる(44KHzの半分なので、サイズも約半分)。
サンプル
これらの音をサンプルを作って実機で鳴らしてみた(iPhone3GS/iOS4.01)
使用した効果音は下記から拝借した。
▼こだま標準効果音ライブラリ(β) |株式会社こだまプロダクション
(このサイトでは数多くの音源を紹介していて「無料のコンテンツへの利用、かつ個人でのご利用」であれば条件付きで無料となる。商用利用向けのライセンスもありそんなに高くない)
結果:
・どれも音の違いは感じられなかった。=> 22KHzでも十分なのでサイズを気にする場合はレートを低くする
・MP3 は実機では再生できなかった。シミュレータでは鳴る(これはネットで出回っていた情報の通り)。
・AIFF=ビッグエンディアンでも再生ができた(ネット上ではリトルエンディアンで無いと駄目みたいな情報もあった)
サンプルのソースコードは GitHub からどうぞ:
SoundSamples at 2010-08-27 from xcatsan's iOS-Sample-Code - GitHub
AIFF vs CAF
AIFF(Audio Interchange File Format) は Wikipedia によれば、
AIFF (Audio Interchange File Format、読みは後述) は、アップルコンピュータにより開発された音声データのファイルフォーマットである。主としてMacintoshやAmiga上で使われるファイル形式である。とあった。通常は非圧縮でビッグエンディアン。
AIFF - Wikipedia
一方、CAF(Core Audio Format) とは Core Audio APIs でサポートされるファイルフォーマットのようだ。
Apple Core Audio Format Specification 1.0: CAF File Overview
上記情報によれば次の特徴がある。
- サイズの制約なし(数百年分保持できる!?)
- ヘッダのファイナライズが不要(音データの追記が可能)
- 多くのでデータフォーマットに対応
- 多くの補助データ(メタデータ / auxiliary data)に対応(annotations, markers, channel layouts, ...)
この CAF はコンテナとも言うべき存在で、中身のデータ形式(データフォーマット・圧縮方式など)は様々なものに対応している。
Core Audio Overview: Supported Audio File and Data Formats in Mac OS X
上記ページから抜粋:
'.mp3', 'MAC3', 'MAC6', 'QDM2', 'QDMC', 'Qclp', 'Qclq', 'aac ', 'agsm', 'alac', 'alaw', 'drms', 'dvi ', 'ima4', 'lpc ', BEI8, BEI16, BEI24, BEI32, BEF32, BEF64, LEI16, LEI24, LEI32, LEF32, LEF64, 'ms\x00\x02', 'ms\x00\x11', 'ms\x001', 'ms\x00U', 'ms \x00', 'samr', 'ulaw'
CAF は iPhoneの場合、電話着信音のフォーマットとしても利用されている。
iOS で効果音を鳴らす場合は、AIFF と CAF のどちらを使うべきか?ネットを探したところフォーマットの違いはわかったものの、使い分けの指針らしきものは見つけられなかった(知っている方がいたら是非情報を教えて下さい)。
その他
フリーの効果音サイト(らしい)。
"The Freesound Project"
freesound :: home page
Shingo says:
2013年9月24日 22:08
参考になりました。どうもありがとうございます。
AIFFはビッグエンディアンですので、リトルエンディアンのCAFの方がiOSでは推奨されています。
CAFはAppleの独自フォーマットですので、Apple製以外の機器との受け渡しは問題が生じるかもしれません。
MacやiOSで使用する分には、CAFで良いと思います。
Shingo says:
2013年9月24日 22:08
参考になりました。どうもありがとうございます。
AIFFはビッグエンディアンですので、リトルエンディアンのCAFの方がiOSでは推奨されています。
CAFはAppleの独自フォーマットですので、Apple製以外の機器との受け渡しは問題が生じるかもしれません。
MacやiOSで使用する分には、CAFで良いと思います。