Ios AVAudioRecorder swift 2

Ios AVAudioRecorder swift 2,ios,swift2,avaudiorecorder,Ios,Swift2,Avaudiorecorder,我的AVAudioRecorder工作正常,但升级到swift 2后,我似乎无法正确配置它。我一直收到一个错误,说不能调用AVAudioRecorder初始值设定项,但我提供的参数看起来是正确的 var recordSettings = [AVSampleRateKey : NSNumber(float: Float(44100.0)), AVFormatIDKey : NSNumber(int: Int32(kAudioFormatMPEG4AAC)), AVNumberOfC

我的
AVAudioRecorder
工作正常,但升级到swift 2后,我似乎无法正确配置它。我一直收到一个错误,说不能调用
AVAudioRecorder
初始值设定项,但我提供的参数看起来是正确的

var recordSettings = [AVSampleRateKey : NSNumber(float: Float(44100.0)),
    AVFormatIDKey : NSNumber(int: Int32(kAudioFormatMPEG4AAC)),
    AVNumberOfChannelsKey : NSNumber(int: 1),
    AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.Medium.rawValue))]


var recordingURL: NSURL? = nil
var audioRecorder:AVAudioRecorder!


func directoryURL() -> NSURL? {

    let fileManager = NSFileManager.defaultManager()
    let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
    let documentDirectory = urls[0] as NSURL
    let soundURL = documentDirectory.URLByAppendingPathComponent("sound.m4a")
    return soundURL 
}

@IBAction func recordPressed(sender: AnyObject) {

    let audioSession: AVAudioSession = AVAudioSession.sharedInstance()

    do {
        try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
    } catch _ {
    }

    do {
        try audioSession.setActive(true)
    } catch _ {
    }

    var error: NSError?

    audioRecorder = AVAudioRecorder(URL: recordingURL, settings: recordSettings, error: &error)

    if let e = error {

        print(e.localizedDescription, terminator: "")
    }
    else
    {
        audioRecorder.record()
        self.stopButton.enabled = true
        self.playButton.enabled = false
        self.recordButton.enabled = false

    }


}

directoryURL
是正确的,但它似乎被误认为是
recordingURL
记录设置也一致。让我提供一个工作版本

斯威夫特3 传统:Swift 2

var audioRecorder:AVAudioRecorder!

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

override func viewDidLoad() {
    super.viewDidLoad()

    let audioSession = AVAudioSession.sharedInstance()
    do {
        try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try audioRecorder = AVAudioRecorder(URL: self.directoryURL()!,
            settings: recordSettings)
        audioRecorder.prepareToRecord()
    } catch {}
}

func directoryURL() -> NSURL? {
    let fileManager = NSFileManager.defaultManager()
    let urls = fileManager.URLsForDirectory(.DocumentDirectory,
                                            inDomains: .UserDomainMask)
    let documentDirectory = urls[0] as NSURL
    let soundURL = documentDirectory.URLByAppendingPathComponent("sound.m4a")
    return soundURL 
}

@IBAction func doRecordAction(sender: AnyObject) {
    if !audioRecorder.recording {
        let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setActive(true)
            audioRecorder.record()
        } catch {}
    }
}

@IBAction func doStopAction(sender: AnyObject) {
    audioRecorder.stop()
    let audioSession = AVAudioSession.sharedInstance()

    do {
        try audioSession.setActive(false)
    } catch {}
}


► 在上查找此解决方案,并在上查找其他详细信息。

我确实包含了大部分代码,但我跳过了它,因为它在显示的错误中并没有真正起作用。不过我会在里面编辑的。谢谢!我删除了内联错误参数,将其保留为
audioRecorder=AVAudioRecorder(URL:recordingURL!,settings:recordSettings)
,并将其放在do/catch中。那个错误描述真的不清楚。
recordingURL
vs.
directoryURL
?您正在
directoryURL()
中返回文件名,这可能会造成一些混乱。您好,Brosef。下面是记录器的有用代码=>
var audioRecorder:AVAudioRecorder!

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

override func viewDidLoad() {
    super.viewDidLoad()

    let audioSession = AVAudioSession.sharedInstance()
    do {
        try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try audioRecorder = AVAudioRecorder(URL: self.directoryURL()!,
            settings: recordSettings)
        audioRecorder.prepareToRecord()
    } catch {}
}

func directoryURL() -> NSURL? {
    let fileManager = NSFileManager.defaultManager()
    let urls = fileManager.URLsForDirectory(.DocumentDirectory,
                                            inDomains: .UserDomainMask)
    let documentDirectory = urls[0] as NSURL
    let soundURL = documentDirectory.URLByAppendingPathComponent("sound.m4a")
    return soundURL 
}

@IBAction func doRecordAction(sender: AnyObject) {
    if !audioRecorder.recording {
        let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setActive(true)
            audioRecorder.record()
        } catch {}
    }
}

@IBAction func doStopAction(sender: AnyObject) {
    audioRecorder.stop()
    let audioSession = AVAudioSession.sharedInstance()

    do {
        try audioSession.setActive(false)
    } catch {}
}