Подавление эха в iOS [Flutter]: предотвращение записи звука из динамикаIOS

Программируем под IOS
Ответить
Anonymous
 Подавление эха в iOS [Flutter]: предотвращение записи звука из динамика

Сообщение Anonymous »

Проблема
Я разрабатываю приложение 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»