【问题标题】:Microphone activity level of WebRTC MediaStreamWebRTC MediaStream 的麦克风活动级别
【发布时间】:2013-05-23 21:43:58
【问题描述】:

我想要一些关于如何最好地在 Chrome/Canary 中获取音频MediaStreamTrack javascript 对象的麦克风活动级别的建议。 MediaStreamTrack 对象是getUserMedia 返回的MediaStream 的音轨,作为WebRTC javascript API 的一部分。

【问题讨论】:

    标签: javascript audio microphone webrtc getusermedia


    【解决方案1】:

    当麦克风有音频时,绿色条上下非常漂亮:

    <script type="text/javascript">
    navigator.webkitGetUserMedia({audio:true, video:true}, function(stream){
        // audioContext = new webkitAudioContext(); deprecated  OLD!!
        audioContext = new AudioContext(); // NEW!!
        analyser = audioContext.createAnalyser();
        microphone = audioContext.createMediaStreamSource(stream);
        javascriptNode = audioContext.createJavaScriptNode(2048, 1, 1);
    
        analyser.smoothingTimeConstant = 0.3;
        analyser.fftSize = 1024;
    
        microphone.connect(analyser);
        analyser.connect(javascriptNode);
        javascriptNode.connect(audioContext.destination);
    
        //canvasContext = $("#canvas")[0].getContext("2d");
        canvasContext = document.getElementById("test");
        canvasContext= canvasContext.getContext("2d");
    
        javascriptNode.onaudioprocess = function() {
            var array =  new Uint8Array(analyser.frequencyBinCount);
            analyser.getByteFrequencyData(array);
            var values = 0;
    
            var length = array.length;
            for (var i = 0; i < length; i++) {
                values += array[i];
            }
    
            var average = values / length;
            canvasContext.clearRect(0, 0, 60, 130);
            canvasContext.fillStyle = '#00ff00';
            canvasContext.fillRect(0,130-average,25,130);
        }
    
    }  
    );
    </script>
    <canvas id="test" style="background-color: black;"></canvas>
    

    【讨论】:

    【解决方案2】:

    您正在寻找的是webkitAudioContext 及其createMediaStreamSource 方法。

    这是一个绘制绿色条以充当 VU 表的代码示例:

    navigator.webkitGetUserMedia({audio:true, video:true}, function(stream){
        audioContext = new webkitAudioContext();
        analyser = audioContext.createAnalyser();
        microphone = audioContext.createMediaStreamSource(stream);
        javascriptNode = audioContext.createJavaScriptNode(2048, 1, 1);
    
        analyser.smoothingTimeConstant = 0.3;
        analyser.fftSize = 1024;
    
        microphone.connect(analyser);
        analyser.connect(javascriptNode);
        javascriptNode.connect(audioContext.destination);
    
        canvasContext = $("#canvas")[0].getContext("2d");
    
        javascriptNode.onaudioprocess = function() {
            var array =  new Uint8Array(analyser.frequencyBinCount);
            analyser.getByteFrequencyData(array);
            var values = 0;
    
            var length = array.length;
            for (var i = 0; i < length; i++) {
                values += array[i];
            }
    
            var average = values / length;
            canvasContext.clearRect(0, 0, 60, 130);
            canvasContext.fillStyle = '#00ff00';
            canvasContext.fillRect(0,130-average,25,130);
        }
    
    }
    

    More details about AudioContext

    【讨论】:

    • 你忘记了最后的右括号。
    【解决方案3】:

    更新:修改代码使用:

    navigator.mediaDevices.getUserMedia(constraints).then(
        function(stream){
            // code ... 
        }).catch(function(err) {
            // code ... 
    });
    

    这是一个小提琴:https://jsfiddle.net/elshnkhll/p07e5vcq/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2017-02-18
      • 2015-09-14
      • 2018-03-20
      • 2012-06-18
      • 1970-01-01
      相关资源
      最近更新 更多