Web 静音麦克风音频getUserMedia

Web 静音麦克风音频getUserMedia,web,webrtc,web-deployment,microphone,getusermedia,Web,Webrtc,Web Deployment,Microphone,Getusermedia,两天来我一直在这件事上碰壁,我真的希望有人能帮上忙 我从这里获取了getUserMedia麦克风录音机的一些代码。我已经去掉了我不需要的组件——不知何故,在这个过程中,我成功地做到了这样,在生成的文件中没有音频通过 它看起来格式正确,但完全没有声音。我有0个错误要处理 // navigator.getUserMedia shim navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || n

两天来我一直在这件事上碰壁,我真的希望有人能帮上忙

我从这里获取了getUserMedia麦克风录音机的一些代码。我已经去掉了我不需要的组件——不知何故,在这个过程中,我成功地做到了这样,在生成的文件中没有音频通过

它看起来格式正确,但完全没有声音。我有0个错误要处理

// navigator.getUserMedia shim
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
// URL shim
window.URL = window.URL || window.webkitURL;

// audio context + .createScriptProcessor shim
var audioContext = new AudioContext;
if (audioContext.createScriptProcessor == null) {
  audioContext.createScriptProcessor = audioContext.createJavaScriptNode;
}

// selectors
var $microphone = $('#microphone');
var $cancel = $('#cancel');
var $recordingList = $('#recording-list');
var $timeDisplay = $('#time-display');
var $microphoneLevel = $('#microphone-level');

var microphone = undefined;
var input = audioContext.createGain();
var mixer = audioContext.createGain();
var microphoneLevel = audioContext.createGain();
microphoneLevel.gain.value = 0;
microphoneLevel.connect(mixer);
var processor = undefined;
var startTime = null;
var encoder = undefined;

// obtaining microphone input
$microphone.click(function() {
    navigator.getUserMedia({ audio: true },
      function(stream) {
        microphone = audioContext.createMediaStreamSource(stream);
        microphone.connect(microphoneLevel);
        console.log(microphone);
      },
      function(error) {
        window.alert("Could not get audio input");
      });
});

// start/stop recording
$microphone.click(function() {
  if (startTime != null) {
    stopRecording(true);
  } else {
    startRecording();
  }
});

// cancel recording (without saving)
$cancel.click(function() {
  stopRecording(false);
});

// microphone level slider
$microphoneLevel.on('input', function() {
  var level = $microphoneLevel[0].valueAsNumber / 100;
  microphoneLevel.gain.value = level * level;
});

function startRecording() {
  startTime = Date.now();
  $microphone.html('Stop');
  $cancel.removeClass("hidden");
  startRecordingProcess();
}

function startRecordingProcess() {
  processor = audioContext.createScriptProcessor(1024, 2, 2);
  input.connect(processor);
  processor.connect(audioContext.destination);
  // wav encoder
  encoder = new WavAudioEncoder(audioContext.sampleRate, 2);
  processor.onaudioprocess = function(event) {
    encoder.encode(getBuffers(event));
  };
}

function getBuffers(event) {
  var buffers = [];
  for (var ch = 0; ch < 2; ++ch) {
    buffers[ch] = event.inputBuffer.getChannelData(ch);
  }
  return buffers;
}

function stopRecording(finish) {
  startTime = null;
  $timeDisplay.html('00:00');
  $microphone.html('<i class="start fa fa-microphone fa-5x" aria-hidden="true"></i>');
  $cancel.addClass('hidden');
  stopRecordingProcess(finish);
}

function stopRecordingProcess(finish) {
  input.disconnect();
  processor.disconnect();

  if (finish) { // if microphone pressed
    saveRecording(encoder.finish());
  } else { // if cancel pressed
    encoder.cancel();
  }
}

function saveRecording(blob) {
  var url = URL.createObjectURL(blob);
  var html = "<p class='recording' recording='" + url + "'><a class='btn btn-default' href='" + url + "' download='recording.wav'>Save Recording</a></p>";
  $recordingList.prepend($(html));

  // once we have done all the processing, upload the file to beyond verbal
  // uploadFile(blob);
}

// update the recording timer
function minuteSeconds(n) { return (n < 10 ? "0" : "") + n; }
function updateDateTime() {
  if (startTime !== null) {
    var sec = Math.floor((Date.now() - startTime) / 1000);
    $timeDisplay.html(minuteSeconds(sec / 60 | 0) + ":" + minuteSeconds(sec % 60));
  }
}
window.setInterval(updateDateTime, 200);
//navigator.getUserMedia垫片
navigator.getUserMedia=navigator.getUserMedia | | navigator.webkitGetUserMedia | | navigator.mozGetUserMedia | | navigator.msGetUserMedia;
//URL垫片
window.URL=window.URL | | window.webkitURL;
//音频上下文+.createScriptProcessor垫片
var audioContext=新的audioContext;
if(audioContext.createScriptProcessor==null){
audioContext.createScriptProcessor=audioContext.createJavaScriptNode;
}
//选择器
变量$micromic=$(“#micromic”);
var$cancel=$(“#cancel”);
var$recordingList=$(“#记录列表”);
var$timeDisplay=$(“#时间显示”);
变量$microphoneLevel=$(“#麦克风级别”);
var话筒=未定义;
var input=audioContext.createGain();
var mixer=audioContext.createGain();
var microphoneLevel=audioContext.createGain();
microphoneLevel.gain.value=0;
麦克风电平。连接(混音器);
var处理器=未定义;
var startTime=null;
var编码器=未定义;
//获取麦克风输入
$麦克风。单击(函数(){
getUserMedia({audio:true},
功能(流){
麦克风=audioContext.createMediaStreamSource(流);
麦克风。连接(麦克风级别);
控制台日志(麦克风);
},
函数(错误){
window.alert(“无法获取音频输入”);
});
});
//开始/停止录制
$麦克风。单击(函数(){
if(startTime!=null){
停止记录(真);
}否则{
startRecording();
}
});
//取消录制(不保存)
$cancel.单击(函数(){
停止录音(假);
});
//麦克风电平滑块
$microphoneLevel.on('input',function(){
变量级别=$microphoneLevel[0]。值为编号/100;
microphoneLevel.gain.value=电平*电平;
});
函数startRecording(){
startTime=Date.now();
$micromic.html('Stop');
$cancel.removeClass(“隐藏”);
startRecordingProcess();
}
函数startRecordingProcess(){
processor=audioContext.createScriptProcessor(1024,2,2);
输入连接(处理器);
processor.connect(audioContext.destination);
//wav编码器
编码器=新的WavAudioEncoder(audioContext.sampleRate,2);
processor.onaudioprocess=函数(事件){
encode(getBuffers(event));
};
}
函数getBuffers(事件){
var缓冲区=[];
对于(var ch=0;ch<2;++ch){
缓冲区[ch]=事件.inputBuffer.getChannelData(ch);
}
返回缓冲区;
}
功能停止录制(完成){
startTime=null;
$timeDisplay.html('00:00');
$micromic.html(“”);
$cancel.addClass('hidden');
停止记录过程(完成);
}
函数stopRecordingProcess(完成){
input.disconnect();
处理器。断开连接();
如果(完成){//如果按下麦克风
保存录制(encoder.finish());
}否则{//如果按取消键
encoder.cancel();
}
}
函数保存录制(blob){
var url=url.createObjectURL(blob);
var html=“

”; $recordingList.prepend($(html)); //完成所有处理后,将文件上载到beyond Verball //上传文件(blob); } //更新录制计时器 函数分钟秒(n){return(n<10?:“)+n;} 函数updateDateTime(){ 如果(开始时间!==null){ var sec=数学地板((Date.now()-startTime)/1000); $timeDisplay.html(分钟秒(秒/60 | 0)+“:”+分钟秒(秒%60)); } } setInterval(updateDateTime,200);
如果有人以前遇到过这种情况,我真的很感激你能帮我解决


感谢大家抽出时间,祝您度过愉快的一天/一夜

首先请与general检查您的麦克风。
如果工作正常,您可以尝试只将音频流和所需的mime类型传递给媒体录制器进行基本音频录制。
如果您想播放此webaudio上下文

Am怀疑microphoneLevel.gain.value=0存在问题 将其更改为
microphoneLevel.gain.value=1//或2

gain=0
表示我们正在静音音频。
gain=1
默认音频电平
增益=0.1-0.9
正在降低音量水平
增益=高于1.1
增加音量

在控制台上打印级别值

// microphone level slider
$microphoneLevel.on('input', function() {
   var level = $microphoneLevel[0].valueAsNumber / 100;
   console.log('value: ' + $microphoneLevel[0].valueAsNumber + ' Level: ' + level);
   microphoneLevel.gain.value = level * level; // if level is zero, then its silent
   // its better if you have a predefined level values based slider position instead of multiplying it
});
看我的和