Отсутствие активности микрофона при установке setLoopBack на false - AS3

Попытка выяснить, почему setloopback необходимо установить на true для обнаружения активности микрофона.

Проблема заключается в обратной связи эха при использовании macbook со встроенным микрофоном.

Если у кого-нибудь есть идеи об этом, дайте мне знать.

Сейчас я экспериментирую с переключением усиления, в зависимости от активности, для имитации сокращения эха. Не оптимально, хотя.

@lessfame

Ответ 1

Я искал аналогичное решение для этого, тогда я обнаружил, что вы можете применить звуковое преобразование к микрофону для управления громкостью выведенного объема микрофонного ввода.

Итак, это можно сделать легко:

var st:SoundTransform = new SoundTransform(0);
mic.soundTransform = st;

Я знаю, что ты задал этот вопрос почти год назад, но подумал, что я поместил его для любого, кто ищет ответ.
Cheers,
Будет ли

Ответ 2

Я знаю, что это старый вопрос, но просто столкнулся с проблемой.

Существует ошибка с кодеком SPEEX, как указано здесь: Звук микрофонаТрансформация и ошибка кодека SPEEX

Эта ошибка в основном говорит о том, что использование кодека SPEEX игнорирует звуковое преобразование. В качестве работы для этого я настраиваю функцию переключения, чтобы переключать настройки для микрофона, чтобы отображать активность до того, как звук подключен к NetStream и обходится с ошибкой.

Примечание. Объект микрофона только отправляет события активности, когда ваше приложение контролирует микрофон. Таким образом, если вы не вызываете setLoopBack (true), добавьте слушатель для выборочных данных событий или присоедините микрофон к объекту NetStream, после чего события активности не будут отправлены. Документы AS3

Настройка микрофона: (m - переменная экземпляра)

m = Microphone.getMicrophone();
m.setSilenceLevel(0);
m.gain = 75;
m.setUseEchoSuppression(true);
m.rate = 16;    //rate only applies to NELLYMOSER Codec - but 16 kHz matches SPEEX default setting
m.setLoopBack(true);    //necessary to get activity
m.codec = SoundCodec.NELLYMOSER;    //this is default
m.soundTransform = new SoundTransform(0);    //mute so you don't get crazy echo!

Переключить для мониторинга "офлайн" и "онлайн"

protected function audioMeterToggle(switch:String) {
    if(switch == "offline") {
        m.setLoopBack(true);
        m.soundTransform.volume = 0;
        m.codec = SoundCodec.NELLYMOSER;
    } else {
        m.setLoopBack(false);
        m.soundTransform.volume = 1;
        m.codec = SoundCodec.SPEEX;
    }
}

Коммутационные кодеки помогают сократить пропускную способность.

Надеюсь, что это поможет кому-то сэкономить.