首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVAudioRecorder斯威夫特2

AVAudioRecorder斯威夫特2
EN

Stack Overflow用户
提问于 2015-09-01 23:38:23
回答 1查看 6.3K关注 0票数 12

我已经开始工作了,但是自从升级到AVAudioRecorder 2之后,我似乎无法找到正确配置它的方法。我一直收到一个错误:不能调用AVAudioRecorder初始化程序,但我提供的参数在我看来是正确的。

代码语言:javascript
复制
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

    }


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-02 00:54:26

directoryURL是正确的,但它似乎被误认为是recordingURLrecordSettings也是一致的。让我提供一个有用的版本。

Swift 3

代码语言:javascript
复制
var audioRecorder:AVAudioRecorder!

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

override func viewDidLoad() {
    super.viewDidLoad()

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

func directoryURL() -> URL? {
    let fileManager = FileManager.default
    let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask)
    let documentDirectory = urls[0] as URL
    let soundURL = documentDirectory.appendingPathComponent("sound.m4a")
    return soundURL
}

@IBAction func doRecordAction(_ sender: AnyObject) {
    if !audioRecorder.isRecording {
        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 {}
}

遗产: Swift 2

代码语言:javascript
复制
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 {}
}

GitHub上的►找到了这个解决方案,还有关于斯威夫特的其他详细信息。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32342486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档