2016-09-27 11 views
5

AVAudioConverterは、コードはiOSの9での作業となりましたAVAudioConverterは10

エラードメイン= NSOSStatusErrorDomainコード= -50 "(ヌル)"

が返されますどんなにたiOSの10で壊れているように見えるのiOSに壊れていますどのオーディオフォーマットが使用されますか。私は毎年、基本的なライブラリ機能が動作しなくなることを賞賛しています。

func audioConverterFailureIOS10() { 
    // Describe the audio format 
    let inFormat = AVAudioFormat(standardFormatWithSampleRate: 44100, channels: 2) 
    let outFormat = AVAudioFormat(standardFormatWithSampleRate: 22050, channels: 2) 

    // Allocate buffers 
    let outBuffer = AVAudioPCMBuffer(pcmFormat: outFormat, frameCapacity: 1024) 

    // Create an input block that is called when the converter needs input 
    let inputBlock : AVAudioConverterInputBlock = { (inNumPackets, outStatus) -> AVAudioBuffer? in 
     // Fails before entering here 
     return nil 
    } 

    // Create the audio converter 
    let converter = AVAudioConverter(from: inFormat, to: outFormat) 

    var error : NSError? 
    _ = converter.convert(to: outBuffer, error: &error, withInputFrom: inputBlock) 

    // Error Domain=NSOSStatusErrorDomain Code=-50 "(null)" 
    print(error) 
} 
+0

Wow 9.3 SDKに基づいて作成されたアプリケーションは機能しますか? @リズムフィスターマン –

+0

。私はXcode 7.3をインストールし、9.3 SDKに対して正確な同じコード(Swift 2.x構文で)を実行し、**エラーはありません**。 「面白い」ことは、iOS 9がリリースされた昨年、アップルのlib内のセグメンテーションフォールトのために、古い拡張オーディオファイルサービスの代わりにAVAudioConverterを使用してコードを更新したことです。たぶん彼らはそれを修正し、代わりに他の1つを壊しました... – borrel

答えて

4

したがって、outBuffer frameLengthをframeCapacityに設定する必要があることが判明しました。デフォルトでは、長さは0で、iOS 10では明らかに扱い方が異なります。

+0

ドン!良いキャッチ。 –