Я разрабатываю приложение Flutter для iOS, которое одновременно воспроизводит и записывает звук. Проблема в том, что звук из динамика улавливается микрофоном. Мне нужно реализовать эхоподавление или что-то еще, чтобы предотвратить это.
Текущая реализация
Я использую следующие пакеты:
- flutter_sound для воспроизведения и записи звука
- audio_session для управления аудиосессией
- Воспроизведение аудио: использование FlutterSoundPlayer для потоковой передачи звука PCM
- Запись: использование FlutterSoundRecorder с кодеком PCM16
- Аудиосеанс: настроен для одновременного воспроизведения и записи
Использование AVAudioSessionMode.voiceChat, но при этом звук воспроизводится через наушник телефона, а не через основной динамик.
Соответствующие фрагменты кода
import 'package:audio_session/audio_session.dart';
class AudioSessionManager {
static final AudioSessionManager _instance = AudioSessionManager._internal();
factory AudioSessionManager() => _instance;
AudioSessionManager._internal();
late AudioSession _audioSession;
bool _isInitialized = false;
Future init() async {
if (_isInitialized) return;
_audioSession = await AudioSession.instance;
await _audioSession.configure(AudioSessionConfiguration(
// iOS configuration
avAudioSessionCategory: AVAudioSessionCategory.playAndRecord,
avAudioSessionCategoryOptions: AVAudioSessionCategoryOptions.allowBluetooth |
AVAudioSessionCategoryOptions.defaultToSpeaker |
AVAudioSessionCategoryOptions.allowAirPlay,
avAudioSessionMode: AVAudioSessionMode.defaultMode,
avAudioSessionRouteSharingPolicy: AVAudioSessionRouteSharingPolicy.defaultPolicy,
avAudioSessionSetActiveOptions: AVAudioSessionSetActiveOptions.none,
));
_isInitialized = true;
// Activate the audio session
await _audioSession.setActive(true);
}
AudioSession get audioSession => _audioSession;
bool get isInitialized => _isInitialized;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... g-recorded
Мобильная версия