2014-02-05 4 views
6

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

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

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

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

ответ

6

API Web Audio позволяет вам изменять вход микрофона для потока.

Вот пример, который показывает, как преобразовать 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

+0

Сообщенный getUserMedia в песочнице задается как https://code.google.com/p/chromium/issues/detail?id=488882. –

Смежные вопросы