首页 > 解决方案 > 无法停止使用 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();,然后我试图停止它但没有任何效果。有没有办法禁用麦克风?

标签: javascripthtmllaravel

解决方案


在您的函数中,您可以通过假设您只有该媒体轨道处于活动状态soundAllowed(stream)来停止录制。stream.getTracks()[0].stop()


推荐阅读