- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,这个错误只发生在iOS最新的12.4版本中。该问题不会出现在模拟器中,并且必须在设备上运行。问题是,一旦应用程序进入后台,对 AVAudioRecorder 上的记录的调用就会返回 false。在所有以前的 iOS 版本中,这种情况都不会发生。 info.plist 使用 NSMicrophoneUsageDescription 标记进行更新,应用程序的功能包括音频后台模式。
我写了一个小的 ViewController 来显示这个问题。重新创建的步骤:
1) 使用 NSMicrophoneUsageDescription 标记更新 info.plist 文件,以便应用程序获得使用麦克风的权限
2) 更新应用程序功能以设置音频背景模式
3)运行应用程序
4)将应用程序发送到后台
5) 当前录音将完成,但开始新录音的调用将失败。
class ViewController: UIViewController, AVAudioRecorderDelegate {
var recordLabel: UILabel!
var recordingSession: AVAudioSession!
var audioRecorder: AVAudioRecorder!
var count: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
recordingSession = AVAudioSession.sharedInstance()
do {
try recordingSession.setCategory(.playAndRecord, mode: .default)
try recordingSession.setActive(true)
recordingSession.requestRecordPermission() { [unowned self] allowed in
DispatchQueue.main.async {
if allowed {
self.loadRecordingUI()
} else {
print("No permissions!!!")
}
}
}
} catch {
print("Exception in viewDidLoad!!!")
}
}
func loadRecordingUI() {
super.viewDidLoad()
recordLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 300, height: 21))
recordLabel.center = CGPoint(x: 160, y: 285)
recordLabel.textAlignment = .center
recordLabel.text = "Waiting...."
self.view.addSubview(recordLabel)
setupRecorder()
startRecording();
}
func setupRecorder() {
let audioFilename = getDocumentsDirectory().appendingPathComponent("recording.m4a")
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 12000,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
do {
audioRecorder = try AVAudioRecorder(url: audioFilename, settings: settings)
audioRecorder.delegate = self
} catch {
print("Exception thrown in setupRecorder")
}
}
func startRecording() {
count += 1
let ret = audioRecorder.record(forDuration: 10) //record for 10 seonds
let txt = "Record returned " + ret.description + " for #\(count)"
recordLabel.text = txt
print(txt)
}
func getDocumentsDirectory() -> URL {
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths[0]
}
func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) {
startRecording() //immediately start recording again
}
}
由于应用程序在后台录制的功能已经设置,我希望对 AVAudioRecorder 进行录制的调用返回 true
最佳答案
我就此问题向 Apple 提交了反馈(audioRecorder.record() 在后台返回 false),得到的答案是这是一个新的隐私保护限制,即他们不会修复它。
“提到的行为是一个变化,但 future 的行为是正确的,尝试在后台开始之前未录制的音频录制(然后被调用或 Siri 打断)将不起作用(本质上是尝试开始录制)后台随机录音将不再起作用)。这是12.4中引入的新的隐私保护限制。”
关于当应用程序在后台时,iOS 12.4 AVAudioRecorder.record 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57362848/
以下是我的录制按钮方法的内容。它创建了所需的文件,但无论我记录多长时间,创建的文件的长度始终为 4kb 和 0 秒,我无法弄清楚为什么它无效。对于averagePowerPerChannel,计量也返
在我的设备上使用 Xcode 5.0 并运行 iOS 7.0.2。 我正在使用这种代码: AVAudioRecorder *audioRecorder; ……… [audioRecorder reco
我希望有人能支持我...... 我一直在开发一个应用程序,该应用程序允许最终用户录制一个小音频文件以供以后播放,并且正在测试内存泄漏。当 AVAudioRecorder 的“停止”方法尝试关闭其正在录
我在进入后台后暂停 AVAudioRecorder 时遇到问题。基本上,它是这样的(_recorder 是我的 AVAudioRecorder 实例): 开始录制: [_recorder record
AVAudioRecorder的peakPowerForChannel和averagePowerForChannel方法有什么区别? 为什么返回的值为负数?不是应该在没有声音时为 0,在声音幅度增大时
我有一个可以录制音频的应用程序。我想知道如何才能增加增益。有没有办法标准化音频或以某种方式放大它? 谢谢,豪伊 最佳答案 看来我找到了解决方案。根据文档,AVAudioPlayer 音量可以在 0.0
简单地说,我正在尝试根据 iPhone 麦克风输入流中的分贝读数对某些内容进行口型同步,但我得到的值并不完全是我想要的值。我正在使用 AVAudioRecorder 的peakPowerForChan
这是我的方法: -(void) playOrRecord:(UIButton *)sender { if (playBool == YES) { NSError *error
无法获取 AVAudioRecorder 与 URL 配合使用的代码。有人能够在 iOS 和 Swift 3 上录制音频吗?下面的粗体文本是我收到以下错误的地方: "Cannot invoke ini
我正在制作 iOS 游戏。我需要做的一件事是允许用户进行快速录音。这一切都有效,但录音只是暂时保存。因此,当用户关闭应用程序并重新打开它时,录音应该能够再次播放,但它没有,当我关闭应用程序时它被删除了
我需要开发一个在检测到语音时播放mp3的App女巫。我可以使用“在这里说”示例吗?还是有人知道类似的例子? 我当时在看FFT和aurioTouch的示例,但对我来说似乎很难... 提前致谢 最佳答案
我正在制作一个应用程序,可以记录用户的声音并以高音调播放给他们。 (像花栗鼠)。适用于 iOS 5.0 或更高版本以及 Xcode 4.6 这个问题之前已经在这里问过 Record the sound
我正在使用 AVAudioRecorder 录制具有以下配置的不同长度的音频文件: - (AVAudioRecorder*)recorder { if(!_recorder) {
我正在使用 AVAudioRecorder 进行录制,当我录制时,我按主页按钮并来到前台并检查 AVAudioRecorder (isRecording) 的状态仍然是 是。但是当我播放音频时,它只播
我最近发现我的应用程序存在漏洞。我把所有的代码都注释掉了,一步一步去掉注释。这一切都导致了 AVAudioRecorder。 ViewController.h: #import @interface
我正在使用 AVAudioRecorder 录制音频,它录制流畅,我可以播放或获取保存文件我正在使用以下代码初始化 AVAudioRecorder NSDictionary *settings =
我现在正在为 AVAudioRecorder(和 Player)苦苦挣扎。我有一个应用程序,其中有三个简单的按钮可以录制/播放/停止通话,我正在使用 AVAudioRecorder 和 AVAudio
我正在使用 AVAudioRecorder 录制并保存到具有以下设置的 audio.m4a 文件: NSMutableDictionary *recordSetting = [[NSMutableDi
如何在被来电打断后继续录音?现在来电后我的录音停止了,但我希望能够继续录音 func audioRecorderDidFinishRecording(_ recorder: AVAudioRecord
我正在努力实现我认为会非常容易但事实并非如此的事情。 我正在玩“react-native-audio”库的源代码。但是你可以假设我是为了这个问题而在本地工作。 这是一个reference for th
我是一名优秀的程序员,十分优秀!