可以在某些现代浏览器中使用navigator.getUserMedia(....)
调用来在Javascript中录制音频。
有没有办法调整/设置麦克风的输入音量?
此设置并非总是最佳。有时麦克风设置为仅以非常低的输入音量进行录制。当然,用户可以手动调整系统中的输入音量级别,但我的大多数用户可能缺乏这样做的知识。因此,我最好能够在通过“navigator.getUserMedia(....)
”方式记录数据的JavaScript应用程序内动态调整麦克风音量?
是否有解决方案来影响麦克风的输入音量?
答案 0 :(得分:8)
Web Audio 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>
注意:通过Stack片段的实时演示在Chrome中不起作用,因为getUserMedia似乎对沙盒框架不起作用。如果您使用Chrome,请尝试使用以下代码段进行摘要:https://robwu.nl/s/mediasource-change-volume.html