2015-06-28 29 views
5

我試圖使用SWIFT 2下面的代碼,這應該是在迅速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) 
} 

我得到了編譯錯誤

型精 'AudioFormatID' 不符合協議「AnyObject '

在線AVFormatIDKey: kAudioFormatMPEG4AAC,

如果我註釋掉行,我通過構建,卻得到了一個運行時錯誤

錯誤域= NSOSStatusErrorDomain代碼= 1718449215「的操作無法完成。(OSStatus錯誤1718449215.)」

我也試過AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC),,並得到運行時錯誤。 Xcode中似乎進入調試模式,它紅色高亮顯示self.audioRecorder = try AVAudioRecorder(URL: audioURL!, settings: recordSettings)

主題1:EXC_BAD_ACCESS(代碼= 1,地址=爲0x0)

任何人都可以幫我嗎?

回答

3

我也試過AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC)

嗯,這就是正確的事情。基本上你問這裏兩個問題;編譯器錯誤你已經解決了。現在你有一個運行時錯誤,但這完全是另一回事。

至於運行時錯誤,它可能只是試圖在模擬器上測試的一個參數。我在設備上運行你的代碼(在修復了有問題的線路以便它可以編譯之後),並且很好。

編輯在評論中,你透露你在運行iOS 8.3的設備上測試了這個。那就是問題所在!您需要在設備上進行測試,並且需要成爲運行iOS 9的設備。然後您會發現代碼運行時不會崩潰。

+0

嗯...我打印出'audioURL',它顯示'MyAudio.m4a',所以我認爲它不是零。 –

+0

我測試了你的代碼,它在設備上運行良好。您可能剛剛在模擬器上遇到問題,因爲您無法在該處記錄。 – matt

+0

不幸的是,它不適用於我的iPhone或模擬器。無論如何感謝您的測試! –

0

我也有類似的問題,事實證明,當我從SWIFT 1.2更新到2.0的更改爲非可選的「設置」簽名[字符串:AnyObject]

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

如果我通過一個空字典它不會爲我崩潰,並像以前一樣工作。

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

我對設置有同樣的問題。 AVFormatIDKey未被原始帖子中提到的錯誤接受。

的recordSettings需要明確地鑄造在斯威夫特2

這是我記錄的作品設置。如果我剛剛跳過了AVFormatIDKey,麥克風只能工作幾分之一秒。

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))] 

您不需要將設備升級到iOS 9。我建立並運行這個iOS 8.4

+0

這非常有用,謝謝。我一直在追逐這個好幾天。 – CodeNoob

+0

thnks很多爲我工作 –