はじめに
iOSでは標準でflacファイルをサポートしていません。
外部ライブラリを用いて、wavからflacへ変換する手順をまとめたので共有します。
環境はXcode7.1、iOS9、Objective-cです。
ライブラリ取得
ライブラリを2つダウンロードします。
IDZPrecompiledFLAC
IDZPrecompiledOgg
arm64対応でビルドしてあって非常にありがたい!
プロジェクトに追加
以下2点に注意。
・Link Binary With Librariesから追加
Build Phasesから追加します。
・bitcodeサポートをNOに変更
Build SettingsのEnable BitcodeをNOに設定。
wav to flac 変換処理
こちらから2ファイルダウンロードしプロジェクトに追加します。
- wav_to_flac.h
- wav_to_flac.c
.cファイルのinclude箇所を少し修正。
「FLACiOS/」から「FLAC/」に変えます。
wav_to_flac.c
#include "FLAC/metadata.h"
#include "FLAC/stream_encoder.h"
ここからはObjective-c。
任意の.mファイルにて呼び出し。
今回はbundleに含めたwavファイルをflacに変換しdocuments直下に出力しています。
ヘッダをincludeする
#include "wav_to_flac.h"
変換処理呼び出し
- (void)convertSample
{
NSString *documentsDirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *flacFileWithoutExtension = [documentsDirPath stringByAppendingPathComponent:@"flac_001"];
NSBundle *bundle = [NSBundle mainBundle];
NSString *waveFile = [bundle pathForResource:@"001" ofType:@"wav"];
int interval_seconds = 30;
char** flac_files = (char**) malloc(sizeof(char*) * 1024);
int conversionResult = convertWavToFlac([waveFile UTF8String], [flacFileWithoutExtension UTF8String], interval_seconds, flac_files);
NSLog(@"%d", conversionResult);
}
おわりに
あまり需要がないかもですが、私にとっては必要な情報でした。
手順をまとめると簡単そうに見えますね。
あんなに苦労したのに(笑)