You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android平台Flutter开发:如何录制用户语音且不收录后台系统音频?

解决Flutter音频录制时排除系统后台音频的问题

这个问题的核心是音频会话配置不当——默认的录制模式可能允许捕获系统播放的音频,我们需要通过配置让麦克风只专注于外部声音输入,同时让系统自动处理后台音频的播放(比如降低音量或暂停),实现类似Google Meet的效果。

Android 端实现

在Android上,关键是指定音频源为纯麦克风,并将音频使用场景设为语音通信,系统会自动优先麦克风输入并抑制其他音频。

如果用record这类常用录制库,初始化时明确指定音频源:

final recorder = AudioRecorder();
await recorder.start(
  const RecordConfig(
    audioSource: AudioSource.microphone, // 仅捕获麦克风输入
    encoder: AudioEncoder.aacLc,
    bitRate: 128000,
    sampleRate: 44100,
  ),
);

同时确保AndroidManifest.xml里的权限齐全:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

启动录制后,系统会自动降低Spotify这类后台应用的音量(ducking),麦克风就不会录到这些音频了。

iOS 端实现

iOS需要通过配置AVAudioSession的类别和模式,告诉系统当前是语音通话场景,从而抑制后台音频。可以用audio_session库来做配置:

import 'package:audio_session/audio_session.dart';

// 录制前先配置音频会话
final session = await AudioSession.instance;
await session.configure(const AudioSessionConfiguration(
  avAudioSessionCategory: AVAudioSessionCategory.playAndRecord,
  avAudioSessionCategoryOptions: AVAudioSessionCategoryOptions.duckOthers,
  avAudioSessionMode: AVAudioSessionMode.voiceChat,
));

这里.voiceChat模式会让系统优先麦克风输入,.duckOthers选项会自动降低后台音频的音量,这样麦克风只会录到外部的语音,不会收录系统播放的内容。

避坑提示

  • 别用AudioSource.micAndSystem这类同时捕获系统音频的选项(部分库可能提供)
  • 测试时注意设备的音频路由,比如蓝牙设备可能导致音频回传,影响测试结果
  • 不同录制库的参数命名可能有差异,核心是认准「仅麦克风」和「语音通信场景」这两个配置点

内容的提问来源于stack exchange,提问作者Amar Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:24:57