javascript - 无法停止使用 javascript 录制
问题描述
我正在展示一个波形来可视化麦克风输入。我正在像下面的代码中那样做。
function micWaveForm (allowScan) {
"use strict";
var paths = document.getElementsByTagName('path');
var visualizer = document.getElementById('visualizer');
var mask = visualizer.getElementById('mask');
var path;
var report = 0;
var soundAllowed = function (stream) {
//Audio stops listening in FF without // window.persistAudioStream = stream;
//https://bugzilla.mozilla.org/show_bug.cgi?id=965483
//https://support.mozilla.org/en-US/questions/984179
window.persistAudioStream = stream;
var audioContent = new AudioContext();
var audioStream = audioContent.createMediaStreamSource( stream );
var analyser = audioContent.createAnalyser();
audioStream.connect(analyser);
analyser.fftSize = 1024;
var frequencyArray = new Uint8Array(analyser.frequencyBinCount);
visualizer.setAttribute('viewBox', '0 0 255 255');
//Through the frequencyArray has a length longer than 255, there seems to be no
//significant data after this point. Not worth visualizing.
for (var i = 0 ; i < 255; i++) {
path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
path.setAttribute('stroke-dasharray', '0');
mask.appendChild(path);
}
var doDraw = function () {
requestAnimationFrame(doDraw);
analyser.getByteFrequencyData(frequencyArray);
var adjustedLength;
for (var i = 0 ; i < 255; i++) {
adjustedLength = Math.floor(frequencyArray[i]) - (Math.floor(frequencyArray[i]) % 5);
paths[i].setAttribute('d', 'M '+ (i) +',255 l 0,-' + adjustedLength);
}
}
doDraw();
}
var soundNotAllowed = function (error) {
console.log(error);
}
if (allowScan) {
navigator.getUserMedia({audio:true}, soundAllowed, soundNotAllowed);
} else {
//Stop the recording
}
};
allowScan 变量是一个用于开始和停止录制的布尔值。当我按下带有代码的按钮时它开始了navigator.getUserMedia();
,然后我试图停止它但没有任何效果。有没有办法禁用麦克风?
解决方案
在您的函数中,您可以通过假设您只有该媒体轨道处于活动状态soundAllowed(stream)
来停止录制。stream.getTracks()[0].stop()
推荐阅读
- firebase - NoSQL 数据库结构
- c# - 这个 Levenshtein 距离算法是否正确?
- node.js - Cloud Functions 和 Express req.headers.cookie 未定义
- python-3.x - 数组 - 随机机会
- c# - 多个 UDP 连接到具有相同端口的不同远程 IP
- javascript - Chart.js 多色填充部分
- javascript - 引用画布时的空指针
- amazon-s3 - 使用 Apache-Airflow UI 的 Salesforce 连接
- java - 标准 api - 非法状态异常
- opentbs - 'when' 条件部分能否显示基于 'contains' 或 'includes' 参数的内容?