swift2 如何在用户停止使用Swift 2时停止录制语音

bxjv4tth  于 2023-10-18  发布在  Swift
关注(0)|答案(2)|浏览(313)

我使用AVFoundation - AVAudioRecorder - AVAudioPlayerSwift 2创建了一个简单的录音机。目前,您可以使用“停止”按钮停止录制。当用户停止说话时,是否可以停止录制?类似Siri的东西。谢谢你,谢谢

juzqafwq

juzqafwq1#

一种可能的解决方案是使用AVAudioRecorder的音频电平测量。我从来没有试过,所以我不确定它有多准确,或者对背景噪音有多敏感。
我会看看这个https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioRecorder_ClassReference/#//apple_ref/occ/instm/AVAudioRecorder/averagePowerForChannel:
根据文档,averagePowerForChannel返回
正在录制的声音的当前平均功率(以分贝为单位)。返回值0 dB表示满量程或最大功率;返回值-160 dB表示最小功率(即,接近静音)。
当你开始录音时,我会对这个值进行一两秒的采样,然后求出平均值,这就给了你一个背景噪音水平。
当用户说话时,音量应该从这里上升。
继续监视此值,然后当它返回到背景水平内的某个范围约一秒时,关闭录制。
它可能不如Siri准确(Siri可能会进行更多的处理,并可能进行语音检测),但它可能足以满足您的目的。
挑战将是工作之间的差异,背景水平和谈话音量和灵敏度是什么-如果他们是接近,它可能不会工作得很好。

r6l8ljro

r6l8ljro2#

我能够成功地使用监控的想法,它工作得很好。我可以提供代码说明我是如何做到的。
然而,它并不是100%安全的,因为在创建基线时或用户退出发言后,它可能会被环境噪音所干扰。你仍然需要有一种方法来手动停止录制的情况下,“自动停止”不工作。
我发现一个更好更可靠的解决方案是在录制时使用“按住”按钮,按下按钮开始录制,释放按钮终止录制。下面是我的代码,以使“按住”功能工作(沿着触发警报消息,以防用户点击按钮而不是按住它):

  1. Button {
  2. // The "press and hold" functionality ends when the user releases the AskAimee button, triggering the following actions.
  3. // CODE TO START RECORDING GOES HERE
  4. } label: {
  5. // LABEL FOR THE PRESS-AND-HOLD BUTTON GOES HERE
  6. ButtonLabelView()
  7. // A single-tap can be used to trigger an alert to give the user instruction that a press-and-hold gesture must be used instead of a tap gesture
  8. .onTapGesture {
  9. setupHelpTitle = "Press and Hold"
  10. setupHelpContent = "You need to press the button and hold it to record. Recording will stop when you release the button."
  11. showSetupHelp = true
  12. }
  13. } // Tap gesture closure
  14. }
  15. // The "press and hold" functionality begins with a simultaneous LongPressGesture, triggering the actions in the .onEnded modifier of the gesture.
  16. .simultaneousGesture(
  17. LongPressGesture(minimumDuration: 0.25)
  18. .onEnded({ _ in
  19. // CODE TO BEGIN RECORDING AFTER THE MINIMUM HOLD TIME HERE
  20. })
  21. ) // simultaneousGesture closure
  22. // This alert is used to provide a notification to the user about the recording function (e.g., if user tapped the button, the alert would indicate that the button needs to be pressed and held to work).
  23. .alert(isPresented: $showSetupHelp) {
  24. Alert(
  25. title: Text(setupHelpTitle),
  26. message: Text("\(setupHelpContent)"),
  27. dismissButton: .default(Text("OK"))
  28. )
  29. }
展开查看全部

相关问题