处理网络音频的麦克风音频样本 API
Process microphone audio samples of Web Audio API
我正在尝试使用以下代码通过网络音频获取麦克风的音频样本:
<!doctype html>
<html>
<meta charset="utf-8">
<body>
<script>
function start() {
let button = document.getElementById("start");
button.disabled = true;
let audioCtx = new (window.AudioContext || window.webkitAudioContext)();
navigator.mediaDevices.getUserMedia({
audio: {
echoCancellation: false,
noiseSuppression: false,
autoGainControl: false,
}
}).then(function (stream) {
let audioSource = audioCtx.createMediaStreamSource(stream);
let scriptNode = audioCtx.createScriptProcessor(4096, 1, 0);
scriptNode.onaudioprocess = function (audioProcessingEvent) {
console.log('foo!');
};
audioSource.connect(scriptNode);
}).catch(function (err) {
console.log('Error initializing user media stream: ' + err);
});
}
</script>
<button id="start" onclick="start()">Start</button>
</body>
</html>
无论出于何种原因,这不会在控制台中不断输出 "foo!"。我错过了什么?
编辑:它在 Firefox 中有效,但在 Chrome 中无效。令人困惑...
添加 scriptNode.connect(audioCtx.destination)
对 Chrome 起到了作用。仅当脚本节点实际连接到某种输出时才开始处理。
我正在尝试使用以下代码通过网络音频获取麦克风的音频样本:
<!doctype html>
<html>
<meta charset="utf-8">
<body>
<script>
function start() {
let button = document.getElementById("start");
button.disabled = true;
let audioCtx = new (window.AudioContext || window.webkitAudioContext)();
navigator.mediaDevices.getUserMedia({
audio: {
echoCancellation: false,
noiseSuppression: false,
autoGainControl: false,
}
}).then(function (stream) {
let audioSource = audioCtx.createMediaStreamSource(stream);
let scriptNode = audioCtx.createScriptProcessor(4096, 1, 0);
scriptNode.onaudioprocess = function (audioProcessingEvent) {
console.log('foo!');
};
audioSource.connect(scriptNode);
}).catch(function (err) {
console.log('Error initializing user media stream: ' + err);
});
}
</script>
<button id="start" onclick="start()">Start</button>
</body>
</html>
无论出于何种原因,这不会在控制台中不断输出 "foo!"。我错过了什么?
编辑:它在 Firefox 中有效,但在 Chrome 中无效。令人困惑...
添加 scriptNode.connect(audioCtx.destination)
对 Chrome 起到了作用。仅当脚本节点实际连接到某种输出时才开始处理。