3

在上一个堆栈溢出问题中,我发现了以下代码:

<script>
// this is to store a reference to the input so we can kill it later 
var liveSource;
// creates an audiocontext and hooks up the audio input
function connectAudioInToSpeakers(){
  var context = new webkitAudioContext();  
  navigator.webkitGetUserMedia({audio: true}, function(stream) {
    console.log("Connected live audio input");
    liveSource = context.createMediaStreamSource(stream);
    liveSource.connect(context.destination);
    console.log(liveSource);
  });
 }
// disconnects the audio input
function makeItStop(){
   console.log("killing audio!");
   liveSource.disconnect();
 }
// run this when the page loads
connectAudioInToSpeakers();
</script>

它从用户的麦克风中获取音频并通过扬声器播放。我想要的是输入的电平(幅度)(例如,如果发生剪辑,我可以显示红色警告,或者告诉用户他们需要说出来)。在上面的代码中,我如何真正掌握原始数据?

例如,如何将实际数字记录到控制台?我猜它都存储在liveSoure中?

我不需要任何巧妙的画布动画等,只需要一个数字就可以告诉我输入的声音有多大。这相对简单吗?如果是这样,它是如何完成的?

谢谢

4

1 回答 1

6

我是这样做的——你可以在http://labs.dinahmoe.com/dynamicmusicengine/上看到它,只需将 liveSource 连接到这个 JavaScriptNode(还有 context.createScriptProcessor(4096, 1, 1) 这是新语法,尽管两者都将根据http://www.w3.org/2011/audio/wiki/F2F_Mar_2013得到支持)

var levelChecker = context.createJavaScriptNode(4096, 1 ,1);
liveSource.connect(levelChecker);
levelChecker.connect(context.destination);

levelChecker.onaudioprocess = function(e) {
        var buffer = e.inputBuffer.getChannelData(0);

        // Iterate through buffer to check if any of the values exceeds 1.
        for (var i = 0; i < buffer.length; i++) {
            if (1 =< buffer[i]) {
                console.log("Oh noes! We got a peak.", buffer[i]);
            }
        }
于 2013-04-09T06:53:28.010 回答