6

Вопрос по javascript, html5, audio, volume – navigator.getUserMedia () аудиозапись - как установить уровень громкости входа микрофона?

navigator.getUserMedia(....) Вызов может быть использован в некоторых современных браузерах для записи аудио в Javascript.

Есть ли способ отрегулировать / установить уровень громкости входного сигнала микрофона?

Настройка для этого не всегда оптимальна. Иногда микрофон настроен на запись только при очень очень низкой входной громкости. Конечно, пользователь может вручную настроить уровень громкости входного сигнала в своей системе, но большинству моих пользователей может не хватать знаний для этого. Поэтому было бы лучше, если бы я мог динамически регулировать громкость микрофона внутри самого приложения JavaScript, которое записывает данные через "navigator.getUserMedia(....)" путь?

Существуют ли решения для влияния на этот уровень громкости микрофона?

1 ответ
7

Веб Аудио API позволяет изменить вход микрофона для потока.

Вот пример, который показывает, как конвертироватьMediaStream другомуMediaStream, но с возможностью изменения громкости на лету. Если вы просто хотите воспроизвести аудио, вы можете изменитьgainNode.connect(dest) вgainNode.connect(ctx.destination) и удалите две другие строки, которые используютdest переменная.

if (!navigator.getUserMedia) {
    navigator.getUserMedia = navigator.webkitGetUserMedia ||
        navigator.mozGetUserMedia;
}
navigator.getUserMedia({
    audio: true
}, function(stream) {
    var ctx = new AudioContext();
    var source = ctx.createMediaStreamSource(stream);
    var dest = ctx.createMediaStreamDestination();
    var gainNode = ctx.createGain();

    source.connect(gainNode);
    gainNode.connect(dest);
    document.getElementById('volume').onchange = function() {
        gainNode.gain.value = this.value; // Any number between 0 and 1.
    };
    gainNode.gain.value = document.getElementById('volume').value;
    
    // Example: play the audio
    // Or if you use WebRTC, use peerConnection.addStream(dest.stream);
    new Audio(URL.createObjectURL(dest.stream)).play();

    // Store the source and destination in a global variable
    // to avoid losing the audio to garbage collection.
    window.leakMyAudioNodes = [source, dest];
}, function(e) {
    alert(e); // TODO: Handle error.
});

// For the demo only:
document.getElementById('volume').onchange = function() {
    alert('Please provide access to the microhone before using this.');
};
Volume: <input type=range id=volume min=0 max=1 value=1 step=0.01>

Примечание. Демонстрация в реальном времени с использованием фрагмента стека не работает в Chrome, поскольку getUserMedia не работает для фреймов с песочницей. Если вы используете Chrome, попробуйте сниппет по адресу:https://robwu.nl/s/mediasource-change-volume.html

Об этом сообщают getUserMedia в песочнице:code.google.com/p/chromium/issues/detail?id=488882.

от Rob W

Похожие вопросы