2016-09-27 3 views
5

AVAudioConverter in iOS gebrochen scheint 10. Der Code wurde in iOS arbeiten 9 und jetztAVAudioConverter ist in iOS gebrochen 10

Fehler Domain = NSOSStatusErrorDomain Code = -50 "(null)"

egal zurückgegeben Welches Audioformat wird verwendet? Es überrascht mich jedes Jahr, dass grundlegende Bibliotheksfunktionen nicht mehr funktionieren.

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 behandelt. Funktionieren Apps, die mit dem 9.3 SDK erstellt wurden? –

+0

@RhythmicFistman Genau. Ich habe Xcode 7.3 installiert und den exakt gleichen Code (mit Swift 2.x Syntax) gegen das 9.3 SDK ausgeführt und ** es gibt keinen Fehler **. Das "lustige" Ding ist, dass letztes Jahr, als iOS 9 veröffentlicht wurde, ich meinen Code mit AVAudioConverter anstelle der älteren Extended Audio File Services aufgrund von Segmentierungsfehlern in der Apple Lib aktualisierte. Vielleicht haben sie das repariert und stattdessen das andere kaputt gemacht ... – borrel

Antwort

4

Also, es stellte sich heraus, dass die outBuffer FrameLength zum frameCapacity eingestellt werden muss. Standardmäßig ist die Länge 0 und wird offenbar anders auf iOS 10

+0

d'oh! guter Fang. –