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

What we talk about when we talk about Technology

技術について語ります。

AudioConverterServiceでMP3→リニアPCM➀

CoreAudio
  1. 変換したいファイルのパスを取得
let fromPath = NSBundle.mainBundle().pathForResource("loop", ofType: "mp3")!
        let fromURL = NSURL(fileURLWithPath: fromPath)

2.書き出す先のパスを作成

let filePaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
        let documentDirectory = filePaths.first!
        let toURL = NSURL(fileURLWithPath: documentDirectory).URLByAppendingPathComponent("output.aif")

3.変換した先のオーディオのデータフォーマットを定義

var outputFormat = AudioStreamBasicDescription(mSampleRate: 44100.0,
                                                       mFormatID: kAudioFormatLinearPCM,
                                                       mFormatFlags: kAudioFormatFlagIsBigEndian
                                                        | kLinearPCMFormatFlagIsSignedInteger
                                                        | kLinearPCMFormatFlagIsPacked,
                                                       mBytesPerPacket: 4,
                                                       mFramesPerPacket: 1,
                                                       mBytesPerFrame: 16,
                                                       mChannelsPerFrame: 2,
                                                       mBitsPerChannel: 16,
                                                       mReserved: 0)

4.読み出すファイルを開く

var infile: AudioFileID = nil
        AudioFileOpenURL(fromURL,
                         .ReadPermission,
                         0,
                         &infile)

5.読み出すファイルのデータフォーマットを取得

var inputFormat = AudioStreamBasicDescription()
        var size = UInt32(sizeof(AudioStreamBasicDescription))
        AudioFileGetProperty(infile,
                             kAudioFilePropertyDataFormat,
                             &size,
                             &inputFormat)

6.書き出すファイルを作成

var outfile: AudioFileID = nil
        AudioFileCreateWithURL(toURL,
                               kAudioFileAIFFType,
                               &outputFormat,
                               .EraseFile,
                               &outfile)

7.コンバーターの作成

var audioConverter: AudioConverterRef = nil
        AudioConverterNew(&inputFormat,
                          &outputFormat,
                          &audioConverter)

続きはまた明日。