iPhone в Safari путает, к какому динамику выводить звук, если микрофон инициализируется во время воспроизведения звука - PullRequest
0 голосов
/ 17 мая 2019

В iPhone есть проблема с воспроизведением звука через динамики громкой связи в Safari.Как только микрофон инициализирован, мы затем воспроизводим короткий аудиоклип (около трех секунд) после того, как он воспроизводится, затем мы записываем ответ пользователя с микрофоном - этот шаблон событий происходит три раза.Этот первый аудиоклип воспроизводится через громкоговоритель трубки, что снижает уровень громкости.Затем, после того как микрофон записывает первый ответ пользователя, через громкоговоритель воспроизводится следующий аудиоклип (что необходимо для всех трех аудиоклипов).Что может смутить iOS / Safari с точки зрения назначения аудиоконтекста?Есть ли настройка, которую я могу установить для обеспечения громкой связи, или другой шаблон событий, который я могу использовать для достижения желаемого поведения. Требуемое поведение: iPhone будет воспроизводить все аудиоклипы через динамик телефона, даже когда микрофон инициализирован.

1: Воспроизведение короткого аудиоклипа перед «набором функций» (воспроизведение звука и ответ на запись) 2: Установка времени ожидания после инициализации микрофона и запуска потока микрофона.3: мы поиграли с порядком, в котором мы начинаем запись / воспроизведение аудио.4: если микрофон не инициализирован и никогда не начинается запись, происходит желаемое поведение.

audio = new Audio();
this.audio.src = audioUrl;
const audioFileLoadedPromise = this.audio.play()
//////////////////////////////////////////////////
const mediaStreamConstraints: MediaStreamConstraints = {
        audio: !enableAudio ? false : {
            echoCancellation: true,
            volume: 1.0
        },
        video: false : (enableVideo === true ? 

this.getCameraConstraints() : enableVideo),
};

navigator.mediaDevices.getUserMedia(mediaStreamConstraints)
/////////////////////////////////////////////////


await this.microphoneComponent.initComponent();
await this.microphoneComponent.startRecording();
await sleep(1000); //this pause was to test if timing somehow affected playback
this.beginAudio(); //this is the audio clip that is played through handset

////from here the pattern continues switching off between playing audio and recording user response and audio is played through speakerphone (as desired)

Требуемое поведение: iPhone будет воспроизводить все аудиоклипы через громкую связь, даже когда инициализирован микрофон.

...