
在这个故事中,我们将介绍如何在iOS Swift 4.2中录制音频。 开发人员只需在设备上测试此演示,因为众所周知,无法模拟的硬件功能包括:
加速度计
陀螺仪
相机
接近传感器
麦克风输入
要了解有关模拟器使用和限制的更多信息,请访问以下链接:https://help.apple.com/simulator/mac/current/#/
为了录制视频,我们必须导入“ AVFoundation”框架,并使用其委托和dataSource方法捕获Record,Play,Finish和Errors事件。
要概述iOS框架,请访问此链接
如果您只需要从按钮上的url播放音频,则单击,然后选中 此项
在开始编码之前,只需在情节提要中的viewController上单击2个按钮
1.录制按钮:用于录制(可选标题:“点击以录制”)
2.播放按钮:用于播放和停止录制(可选标题:“播放”)
在您的.swift文件中,创建类型为AVAudioSession,AVAudioRecorder,AVAudioPlayer的变量,以分别开始记录会话,记录器实例和播放记录的音频。
然后设置录音机
func setupView(){
recordingSession = AVAudioSession.sharedInstance()
做{
尝试recordingSession.setCategory(.playAndRecord,模式:.default)
尝试recordingSession.setActive(true)
recordingSession.requestRecordPermission(){[
DispatchQueue.main.async {
如果允许的话 {
self.loadRecordingUI()
}其他{
//记录失败
}}}
} catch {//记录失败}
}
func loadRecordingUI(){
recordButton.isEnabled = true
playButton.isEnabled = false
recordButton.setTitle(“点击以录制”,用于:.normal)
recordButton.addTarget(self,action:#selector(recordAudioButtonTapped),用于:.touchUpInside)
view.addSubview(recordButton)
}
func loadRecordingUI()只是在录音机准备就绪后启用录音按钮,并禁用播放按钮,直到录制声音/音频
要首先开始录制音频,我们必须获取保存录制文件的路径/位置,设置音频格式,rateKey,channelKey和quality
func startRecording(){
让audioFilename = getFileURL()
让设置= [
AVFormatIDKey:Int(kAudioFormatMPEG4AAC),
AVSampleRateKey:12000,
AVNumberOfChannelsKey:1,
AVEncoderAudioQualityKey:AVAudioQuality.high.rawValue
]
做{
audioRecorder =试试AVAudioRecorder(URL:audioFilename,设置:settings)
audioRecorder.delegate =自我
audioRecorder.record()
recordButton.setTitle(“点按即可停止”,用于:.normal)
playButton.isEnabled = false
} {
finishRecording(成功:否)
}
}
要完成录音,我们只需要停止audioRecoder并将nil分配给对象以进行将来的录音,并更改录音和播放按钮的状态和标题
func finishRecording(成功:布尔){
audioRecorder.stop()
audioRecorder =零
如果成功{
recordButton.setTitle(“点击重新录制”,用于:.normal)
}其他{
recordButton.setTitle(“点击以录制”,用于:.normal)
//录制失败
}
playButton.isEnabled = true
recordButton.isEnabled = true
}
要在“播放”按钮上播放录音,请单击以获取保存音频的URL /位置,然后调用audioPlayer.play()
@IBAction func playAudioButtonTapped(_ sender:UIButton){
如果(sender.titleLabel?.text ==“播放”){
recordButton.isEnabled =否
sender.setTitle(“ Stop”,for:.normal)
preparePlayer()
audioPlayer.play()
}其他{
audioPlayer.stop()
sender.setTitle(“ Play”,for:.normal)
}
}
func preparePlayer(){
var错误:NSError?
做{
audioPlayer =尝试AVAudioPlayer(contentsOf:getFileURL()作为URL)
}将let error1捕获为NSError {
错误= error1
audioPlayer =无
}
如果让err =错误{
打印(“ AVAudioPlayer错误:\(err.localizedDescription)”)
}其他{
audioPlayer.delegate =自我
audioPlayer.prepareToPlay()
audioPlayer.volume = 10.0
}
}
保存并获取音频路径
func getDocumentsDirectory()-> URL {
让路径= FileManager.default.urls(for:.documentDirectory,in:.userDomainMask)
返回路径[0]
}
func getFileURL()-> URL {
让路径= getDocumentsDirectory()。appendingPathComponent(“ recording.m4a”)
返回路径作为URL
}
如果您想在一段时间后停止录制,则最好的使用方式
DispatchQueue.main.asyncAfter(最后期限:.now()+ TimeToRecordGoesHere ){
finishRecording(成功:true)
}
完整的源代码在这里: https : //gist.github.com/vikaskore/e5d9fc91feac455d6b4778b3d768a6e8
谢谢,编码愉快!