【问题标题】:IOS SWIFT - record audio while playing video and only record from microphoneIOS SWIFT - 播放视频时录制音频,仅从麦克风录制
【发布时间】:2020-03-23 06:23:28
【问题描述】:

我有一个应用程序可以在用户同时播放视频时记录他们的音频会话,问题是视频的播放来自扬声器。

理想情况下,我想取消来自扬声器的音频,只通过麦克风录制用户的声音。

示例应用:FaceTime Facetime 会在您进行 FaceTime 通话时取消您正在播放的音乐,并且只记录用户的声音 (https://www.quora.com/How-does-an-iPhone-cancel-out-the-music-you-are-playing-when-you-FaceTime-someone)

下面是我添加音频会话以记录用户的代码:

let audioInputDevice = AVCaptureDevice.default(
    .builtInMicrophone, 
    for: .audio, 
    position: .unspecified
)
.default(for: AVMediaType.audio)!
let session = self.previewLiveCamera.cameraLayer!.session!
        
//TODO: fix Audio Input, do not mix with other video audio
do {
    audioInput = try AVCaptureDeviceInput(device: audioInputDevice!)
    session.addInput(audioInput!)
} catch {
    print("failed to add audio input")
}
        
for output in session.outputs {
    let connectionOutput = output as! AVCaptureMovieFileOutput
    self.connectionOutput = connectionOutput
    print("Started reacording to \(fileURL!)")
    self.connectionOutput.startRecording(to: fileURL!, recordingDelegate: self)        
}

此外,我为用户同时观看的视频设置了视频播放器:

let postPlayer = AVPlayer(url: postVideoUrl!)
cell.playerLayer.player = postPlayer

【问题讨论】:

    标签: swift avplayer avaudiosession


    【解决方案1】:

    添加输入音频源后,您需要设置音频模式:

    do {
        audioInput = try AVCaptureDeviceInput(device: audioInputDevice!)
        session.addInput(audioInput!)
    } catch {
        print("failed to add audio input")
    }
    
    // Add the following lines:
    try! AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .voiceChat)
    try! AVAudioSession.sharedInstance().setActive(true)
    

    .voiceChat 将使设备的音调均衡针对语音进行优化,并且允许的音频路由集减少到仅适用于语音聊天的那些

    https://developer.apple.com/documentation/avfoundation/avaudiosession/mode/1616455-voicechat

    如果在设置类别后音频仍然存在过多的扬声器音频,则需要考虑启用主动回声消除 [AEC]。下面是一个在 iOS 下这样做的例子:

    https://github.com/twilio/video-quickstart-ios/blob/master/AudioDeviceExample/AudioDevices/ExampleAVAudioEngineDevice.m#L802 注意 VoiceProcessingIO 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多