2015-06-28 2 views
5

sto cercando il seguente codice utilizzando swift 2, che dovrebbe andare bene in rapida 1.swift2 AVAudioRecorder

class NewSoundViewController: UIViewController { 
required init(coder aDecoder: NSCoder) { 
    let audioURL = NSURL.fileURLWithPathComponents([ 
     NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0], 
     "MyAudio.m4a" 
    ]) 
    do { 
     let session = AVAudioSession.sharedInstance() 
     try session.setCategory(AVAudioSessionCategoryPlayAndRecord) 
    } catch { 
     print("Session errors.") 
    } 

    do { 
     let recordSettings: [String: AnyObject] = [ 
      AVFormatIDKey: kAudioFormatMPEG4AAC, 
      AVSampleRateKey: 44100.0, 
      AVNumberOfChannelsKey: 2, 
     ] 
     self.audioRecorder = try AVAudioRecorder(URL: audioURL!, settings: recordSettings) 
     self.audioRecorder.meteringEnabled = true 
     self.audioRecorder.prepareToRecord() 

    } catch let error as NSError{ 
     print(error.description) 
    } catch { 
     print("Other errors")    
    } 
    super.init(coder: aDecoder) 
} 

mi sono compilazione errore

Tipo 'AudioFormatID' non è conforme al protocollo 'ANYOBJECT '

alla riga AVFormatIDKey: kAudioFormatMPEG4AAC,.

Se commento fuori la linea, ho superato costruire, ma ha un errore di runtime

errore di dominio = Codice NSOSStatusErrorDomain = 1.718.449,215 mila "L'operazione non può essere completata. (Errore OSStatus 1718449215.)"

Ho anche provato AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC), e ottenuto errore di runtime. Xcode sembrava andare alla modalità di debug di rosso evidenziato self.audioRecorder = try AVAudioRecorder(URL: audioURL!, settings: recordSettings) e disse

filettatura 1: EXC_BAD_ACCESS (codice = 1, indirizzo = 0x0)

Qualcuno può aiutarmi?

risposta

3

Ho anche provato AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC)

Bene, questa è la cosa giusta da dire. Fondamentalmente stai chiedendo due domande qui; l'errore del compilatore che hai già risolto. Ora stai riscontrando un errore di runtime, ma la questione è completamente diversa.

Per quanto riguarda l'errore di runtime, è probabilmente solo un tentativo di provare sul simulatore. Ho eseguito il codice sul dispositivo (dopo aver risolto la riga in questione in modo che fosse compilato) ed è tutto a posto.

MODIFICA In un commento, hai rivelato di averlo testato su un dispositivo con iOS 8.3. Questo è il problema! È necessario eseguire il test su un dispositivo e deve essere un dispositivo con iOS 9. In seguito, il codice verrà eseguito senza arresti anomali.

+0

Hmmm ... Ho stampato 'audioURL' e ha mostrato' MyAudio.m4a' quindi presumo che non sia nullo. –

+0

Ho testato il codice e funziona correttamente sul dispositivo. Probabilmente stai riscontrando un problema su Simulator perché non puoi registrare lì. – matt

+0

Sfortunatamente, non funziona né per il mio iPhone né per il simulatore. Grazie per il test comunque !. –

0

ho avuto un problema simile e si scopre che, quando ho aggiornato dal rapido 1,2-2,0 la firma di "Impostazioni" cambiato in un optional non [String: ANYOBJECT]

//Swift 1.2 
AVAudioRecorder(URL: audioURL!, settings: nil) 

se passare un vuoto dizionario non si blocca più per me e funziona come prima.

//Swift 2.0  
AVAudioRecorder(URL: audioURL!, settings: [:]) 
2

Ho avuto lo stesso problema con le impostazioni. AVFormatIDKey non è stato accettato con l'errore menzionato nel post originale.

La recordSettings deve essere esplicitamente fusi in Swift 2.

Queste sono le mie impostazioni per la registrazione che funziona. Se ho appena saltato AVFormatIDKey, il microfono ha funzionato solo per una frazione di secondo.

let recordSettings = [AVSampleRateKey : NSNumber(float: Float(44100.0)), 
     AVFormatIDKey : NSNumber(int: Int32(kAudioFormatAppleLossless)), 
     AVNumberOfChannelsKey : NSNumber(int: 1), 
     AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.Medium.rawValue)), 
     AVEncoderBitRateKey : NSNumber(int: Int32(320000))] 

Non è necessario aggiornare il dispositivo a iOS 9.Ho creato e eseguito questo per iOS 8.4

+0

questo è stato * estremamente * utile, grazie. L'ho inseguito per giorni. – CodeNoob

+0

Molto lavoro per me –