首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AudioContext API不能使用mediaStream

AudioContext API不能使用mediaStream
EN

Stack Overflow用户
提问于 2014-03-11 16:41:25
回答 1查看 2.6K关注 0票数 2

我有一个工作代码可以从麦克风中获取音频:

代码语言:javascript
运行
复制
  var audioContext = window.AudioContext ? new window.AudioContext() :
               window.webkitAudioContext ? new window.webkitAudioContext() :
               window.mozAudioContext ? new window.mozAudioContext() :
               window.oAudioContext ? new window.oAudioContext() :
               window.msAudioContext ? new window.msAudioContext() :
               undefined;

  (...)
  navigator[getUserMedia]({audio:true}, function(stream) {
    media = audioContext.createScriptProcessor(stream);
    js = audioContext.createJavaScriptNode(BUFFER_LENGTH, 2, 2);
    js.onaudioprocess = function(e) { 
      sendAudio(e);
    };
  }

但是当我试图阻止它时,在Chrome和Firefox中,我得到了一个错误,即media.mediaStream.stop不存在!

停工代码:

代码语言:javascript
运行
复制
    (...)
    media.mediaStream.stop();
    js.disconnect();

为了快速修复,我放置了一个try catch并将变量设置为null,但是我不喜欢关闭这个修复!我能做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-12 06:22:49

对于初学者,不推荐使用createJavaScriptNode,而是使用createScriptProcessor --这是工作的:

代码语言:javascript
运行
复制
var audio_context;

var BUFF_SIZE = 512; 

var microphone_data = {};

try {

  window.AudioContext = window.AudioContext || window.webkitAudioContext;
  audio_context = new AudioContext();
  console.log("cool audio context established");

} catch (e) {
  alert('Web Audio API is not supported by this browser and/or its current config\n');
}

function process_microphone_buffer(event) {

    var microphone_buffer = event.inputBuffer.getChannelData(0);   

    console.log('microphone_buffer.length ', microphone_buffer.length);
}


function on_error(e) {
    console.log(e);
}

function start_microphone() {

    microphone_data.microphone_stream = audio_context.createMediaStreamSource(microphone_data.media_stream);

    microphone_data.script_processor_node = audio_context.createScriptProcessor(BUFF_SIZE, 1, 1);

    microphone_data.script_processor_node.onaudioprocess = process_microphone_buffer;

    microphone_data.microphone_stream.connect(microphone_data.script_processor_node);
    microphone_data.microphone_stream.connect(audio_context.destination);

    console.log('OK microphone stream connected');
}

function record_microphone() {    //   call this from your UI ... say a button

    if (! navigator.getUserMedia) {

        navigator.getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
    }

    navigator.getUserMedia(

        {audio: true},

        function(stream) {

            microphone_data.media_stream = stream;
            start_microphone();
        },

        on_error
    );
}

function stop_microphone() {  //  call this from ... say a button

    microphone_data.microphone_stream.disconnect();
    microphone_data.script_processor_node.disconnect();
    microphone_data.media_stream.stop();
    microphone_data.script_processor_node.onaudioprocess = null;

    console.log('... microphone now stopped')    ;
}

保重

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22331060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档