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 {}
}