当前,我正在开发一个iOS应用,该应用使用Replaykit记录屏幕,同时在给定时间内记录来自前置摄像头的用户。我从屏幕录制中接收到音频,并且前置摄像头的音频已禁用。我想在屏幕和前置摄像头录制期间检查该人的语音水平。我相信我已经在使用麦克风通道和进行屏幕录制了。当我开始屏幕录制时,我还启动了音频电平检查器,但看不到任何值,它始终显示-160。我不知道该更改录音机设置字典还是AVAudioSession类别模式。我的录音机设置如下:
settings = [
AVFormatIDKey : NSNumber(value: kAudioFormatLinearPCM),
AVSampleRateKey : 44100.0,
AVNumberOfChannelsKey : 2,
AVLinearPCMBitDepthKey : 16,
AVLinearPCMIsBigEndianKey : false,
AVLinearPCMIsFloatKey : false,
]
和我的会议
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
try session.setMode(AVAudioSessionModeVideoRecording)
try session.setActive(true)
try session.overrideOutputAudioPort(.speaker)
}catch{
print("unable to set session")
return
}
还在计时器回调中更新参数功能
@objc private func checkAudioLevels() {
recorder.updateMeters()
print("Peak power0:\(recorder.peakPower(forChannel: 0))")
print("Average power0:\(recorder.averagePower(forChannel: 0))")
print("Peak power1:\(recorder.peakPower(forChannel: 1))")
print("Average power1:\(recorder.averagePower(forChannel: 1))")
print("Peak power2:\(recorder.peakPower(forChannel: 2))")
print("Average power2:\(recorder.averagePower(forChannel: 2))")
if recorder.peakPower(forChannel: 2) < -150{
levelCounter += 1 // timer fires every one second and if the user's audio is less than -150 it adds levelCounter 1 and if it reaches 10 which means no voice for 10 seconds it sends the warning to delegate.
}else{
levelCounter = 0
}
if levelCounter > 10{
self.delegate?.shouldShowWarning(true)
}
}
问题在于所有通道的所有峰值功率和平均功率,我只收到-160。因此,我认为我应该在设置字典或AVAudioSession中进行更改。我的问题是,是否可以在屏幕上录制音频并同时录制音频。
答案 0 :(得分:0)
在设置类别时,您还可以设置选项[.mixWithOthers, .defaultToSpeaker, etc.]
.defaultToSpeaker
确保您的音频电平保持不变。