在iOS Swift 4.2中录制音频

在这个故事中,我们将介绍如何在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

谢谢,编码愉快!