2015年07月08日

MacでMP3ファイルをiOS向けにcafファイルに変換するには(オーディオファイルフォーマット変換)


iOSアプリの開発時にBGMデータであったり何らかのエフェクトサウンドであったりのデータを組み込むことはよくある。この場合、iOSでは色々なファイルフォーマット変換をサポートしてはいるが、あらかじめiOSでの再生に最適化されたデータであったほうがよりよい。そのiOSアプリ用のサウンドフォーマットが .caf だ。

独立開発者であれば、BGMなどのオーディオデータは有料無料は別にして素材集や素材提供サイトで入手することが多いと思う。となると、そこで.cafフォーマットのデータが提供されていると期待するのはちょっと期待しすぎというもの。おおくはMP3ファイルだけ、あってもWAVやAIFFではないかと思います。

そこでそのような広く使われているフォーマットのデータをダウンロードして、cafファイルに変換して組み込むことを考える。

その時に使うのがOS Xに標準で組み込まれているコマンド afconvert だ。

$ which afconvert
/usr/bin/afconvert
使い方は以下;

$ afconvert -f caff -d ima4 bgm.mp3 bgm.caf 


-f … 変換するファイルフォーマット
-d … 変換するデータフォーマット
第1引数…入力ファイル
第2引数…出力ファイル

上記コマンドは「bgm.mp3」を読み込んで、データ形式 ima4 に変換して「bgm.caf」ファイルに出力する。

なお、iOSのアプリで使う場合、短い効果音、BGMなどの場合には
-f caff -d ima4 IMA4
-f caff -d LEI16 Linear PCM 16bit
-f caff -d LEI32 Linear PCM 32bit

長いBGMの場合;
-f m3af -d 'aac '
-f AIFF

caf = Apple Core Audio Format
WAV = RIFF waveform Audio Format
RIFF = Resource Interchange File Format
AIFF = Audio Interchange File Format

$ afconvert -hf
Audio file and data formats:
'3gpp' = 3GP Audio (.3gp)
data_formats: 'Qclp' 'aac ' 'aace' 'aacf' 'aach' 'aacl'
'aacp' 'samr'
'3gp2' = 3GPP-2 Audio (.3g2)
data_formats: 'Qclp' 'aac ' 'aace' 'aacf' 'aach' 'aacl'
'aacp' 'samr'
'adts' = AAC ADTS (.aac, .adts)
data_formats: 'aac ' 'aach' 'aacp'
'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' 'sawb'
'm4af' = Apple MPEG-4 Audio (.m4a, .m4r)
data_formats: 'aac ' 'aace' 'aacf' 'aach' 'aacl' 'aacp'
'alac' 'paac'
'm4bf' = Apple MPEG-4 AudioBooks (.m4b)
data_formats: 'aac ' 'aace' 'aacf' 'aach' 'aacl' 'aacp'
'paac'
'caff' = CAF (.caf)
data_formats: '.mp1' '.mp2' '.mp3' 'QDM2' 'QDMC' 'Qclp'
'Qclq' 'aac ' 'aace' 'aacf' 'aach' 'aacl'
'aacp' 'alac' 'alaw' 'dvi8' 'ilbc' 'ima4'
I8 BEI16 BEI24 BEI32 BEF32 BEF64 LEI16 LEI24
LEI32 LEF32 LEF64 'ms\x00\x02' 'ms\x00\x11'
'ms\x001' 'paac' 'qaac' 'qach' 'qacp' 'samr'
'ulaw' 'zaac' 'zach' 'zacp'
'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 ' 'aace' 'aacf' 'aach' 'aacl' 'aacp'
'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'


$ afconvert -h

Audio File Convert
Version: 2.0
Copyright 2003-2013, Apple Inc. All Rights Reserved.
Specify -h (-help) for command options

Usage:
afconvert [option...] input_file [output_file]
Options may appear before or after the direct arguments. If output_file
is not specified, a name is generated programmatically and the file
is written into the same directory as input_file.
afconvert input_file [-o output_file [option...]]...
Output file options apply to the previous output_file. Other options
may appear anywhere.

General options:
{ -d | --data } data_format[@sample_rate][/format_flags][#frames_per_packet]
[-][BE|LE]{F|[U]I}{8|16|24|32|64} (PCM)
e.g. BEI16 F32@44100
or a data format appropriate to file format (see -hf)
format_flags: hex digits, e.g. '80'
Frames per packet can be specified for some encoders, e.g.: samr#12
A format of "0" specifies the same format as the source file,
with packets copied exactly.
A format of "N" specifies the destination format should be the
native format of the lossless encoded source file (alac, FLAC only)
{ -c | --channels } number_of_channels
add/remove channels without regard to order
{ -l | --channellayout } layout_tag
layout_tag: name of a constant from CoreAudioTypes.h
(prefix "kAudioChannelLayoutTag_" may be omitted)
if specified once, applies to output file; if twice, the first
applies to the input file, the second to the output file
{ -b | --bitrate } total_bit_rate_bps
e.g. 256000 will give you roughly:
for stereo source: 128000 bits per channel
for 5.1 source: 51000 bits per channel
(the .1 channel consumes few bits and can be discounted in the
total bit rate calculation)
{ -q | --quality } codec_quality
codec_quality: 0-127
{ -r | --src-quality } src_quality
src_quality (sample rate converter quality): 0-127 (default is 127)
{ --src-complexity } src_complexity
src_complexity (sample rate converter complexity): line, norm, bats
{ -s | --strategy } strategy
bitrate allocation strategy for encoding an audio track
0 for CBR, 1 for ABR, 2 for VBR_constrained, 3 for VBR
--prime-method method
decode priming method (see AudioConverter.h)
--prime-override samples_prime samples_remain
can be used to override the priming information stored in the source
file to the specified values. If -1 is specified for either, the value
in the file is used.
--no-filler
don't page-align audio data in the output file
--soundcheck-generate
analyze audio, add SoundCheck data to the output file
--media-kind "media kind string"
media kinds are: "Audio Ad", "Video Ad"
--anchor-loudness
set a single precision floating point value to
indicate the anchor loudness of the content in dB
--generate-hash
generate an SHA-1 hash of the input audio data and add it to the output file.
--codec-manuf codec_manuf
specify the codec with the specified 4-character component manufacturer
code
--dither algorithm
algorithm: 1-2
--mix
enable channel downmixing
{ -u | --userproperty } property value
set an arbitrary AudioConverter property to a given value
property is a four-character code; value can be a signed
32-bit integer or a single precision floating point value.
e.g. '-u vbrq ' sets the sound quality level
(: 0-127)
May not be used in a transcoding situation.
-ud property value
identical to -u except only applies to a decoder. Fails if there is no
decoder.
-ue property value
identical to -u except only applies to an encoder. Fails if there is no
encoder.

Input file options:
--read-track track_index
For input files containing multiple tracks, the index (0..n-1)
of the track to read and convert.
--offset number_of_frames
the starting offset in the input file in frames. (The first frame is
frame zero.)
--soundcheck-read
read SoundCheck data from source file and set it on any destination
file(s) of appropriate filetype (.m4a, .caf).
--copy-hash
copy an SHA-1 hash chunk, if present, from the source file to the output file.
--gapless-before filename
file coming before the current input file of a gapless album
--gapless-after filename
file coming after the current input file of a gapless album

Output file options:
-o filename
specify an (additional) output file.
{ -f | --file } file_format
use -hf for a complete list of supported file/data formats
--condensed-framing field_size_in_bits
specify storage size in bits for externally framed packet sizes.
Supported value is 16 for aac in m4a file format.

Other options:
{ -v | --verbose }
print progress verbosely
{ -t | --tag }
If encoding to CAF, store the source file's format and name in a user
chunk. If decoding from CAF, use the destination format and filename
found in a user chunk.
{ --leaks }
run leaks at the end of the conversion
{ --profile }
collect and print performance information

Help options:
{ -hf | --help-formats }
print a list of supported file/data formats
{ -h | --help }
print this help

posted by 永遠製作所 at 20:28| 東京 ☔| Comment(0) | TrackBack(0) | Mac OS X | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/422019423
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック