

音声のフォーマットを設定する際、以下のプログラムでエラーが生じてしまいます。

追記：UIntを加えたのですが、`soundRecorder` の `as [NSObject : AnyObject]` の部分でエラーが出てしまいます。

[code]

    let recordSettings: [String : Any] = [AVFormatIDKey:UInt(kAudioFormatAppleLossless),
        AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
        AVEncoderBitRateKey : 160000,
        AVNumberOfChannelsKey : 2,
        AVSampleRateKey : 8000.0 ]
    
    var error : NSError?
    
    soundRecorder = AVAudioRecorder(URL: getFileURL(), settings: recordSettings as [NSObject : AnyObject], error: &error)//ここでエラーが出ます。
    
[/code]

お気づきの方がいらっしゃいましたら、ご指導のほどよろしくお願いいたします。


CC BY-SA 3.0
2015-10-08T04:14:52.713
17404
2015-10-16T16:10:23.917
2015-10-16T16:10:23.917
5519
12536
question
ios swift
録音音声のフォーマット設定時のエラー


コンパイラが型を推論できていないので、例えば型を指定します。`var recordSettings: [String: Any]`の部分です。

[code]

    var recordSettings: [String: Any] = [AVFormatIDKey : kAudioFormatAppleLossless,
        AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
        AVEncoderBitRateKey : 160000,
        AVNumberOfChannelsKey : 2,
        AVSampleRateKey : 8000.0 ]
    
[/code]


CC BY-SA 3.0
2015-10-08T09:41:56.843
17425
2015-10-08T09:41:56.843
5519
17404
answer


編集前の質問のコードは、Xcode6では大丈夫だったのですが、Xcode7/iOS9 SDKになって、  
`kAudioFormatAppleLossless` が `Int` から `UInt32` になり、`UInt32`
などのビット数指定の数値型は、`NSNumber`に自動変換されないため、エラーになります。

なので、Xcode7では明示的に `UInt` 等の `AnyObject`互換の型に変換してあげる必要があります。

それとそのままだと `recordSettings` が `NSDictionary` になってしまうので `AVAudioRecorder`
のイニシャライザが要求する `[String:AnyObject]` を明示的に指定します。

[code]

    let recordSettings: [String: AnyObject] = [
        AVFormatIDKey : UInt(kAudioFormatAppleLossless), // <-- これ
        AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
        AVEncoderBitRateKey : 160000,
        AVNumberOfChannelsKey : 2,
        AVSampleRateKey : 8000.0
    ]
    
[/code]

`NSNumber(unsingedInt: kAudioFormatAppleLossless)` でもいいのですが、  
`UInt` のほうが文字数が少ないので。

あと、 `AVAudioRecorder` イニシャライザは `throw` するようになったので、`try`
などしてエラーをハンドルするなり、無視するなりする必要があります。[`Swift` の `throw`
エラーハンドリング](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html#//apple_ref/doc/uid/TP40014097-CH42-ID508)については、質問の趣旨と違うので、ここでは説明しません。


CC BY-SA 3.0
2015-10-08T13:36:14.050
17432
2015-10-08T14:38:48.580
2015-10-08T14:38:48.580
3489
3489
17404
answer