Захват звука с микрофона в Chrome - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь получить аудиопоток, используя navigator.mediaDevices.getUserMedia. Это прекрасно работает в Firefox, к сожалению, не в Chrome. сделали это с помощью защищенной страницы (например, https), но Chome не реагирует на функцию «onAudioProcess».

в консоли, Firefox показывает фрагменты аудио, захваченные микрофоном. Но Chrome ничего не показывает.

У кого-нибудь есть идея? это было бы здорово.

рабочий пример jsfiddle можно показать здесь: https://jsfiddle.net/aminekassir/3fjxq7wr/2/

<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
<input type="button" id="btn_001" value="Click" />
```html

```javascript
console.log(adapter.browserDetails.browser);

$(function () {
  $('#btn_001').click(function () {
    console.log('start recording');
    startRecording();
  });
});

const mediaConstraints = window.constraints = { audio: true, video: false };
const micBufferSize = 512;
var audioCtx; 

function startRecording() {

  if (typeof AudioContext === 'function') {
    console.log('AudioContext defined');
    audioCtx = new AudioContext();
  } else if (typeof webkitAudioContext === 'function') {
    console.log('webkitAudioContext defined');
    audioCtx = new webkitAudioContext();
  } else if (typeof mozAudioContext === 'function') {
    console.log('mozAudioContext defined');
    audioCtx = new mozAudioContext();
  } else {
    console.error('Web Audio not supported!');
  }

  console.log('audioCtx', audioCtx);
  audioCtx.resume();

  navigator.mediaDevices.getUserMedia(mediaConstraints).then(onMicrophoneStream).catch(onMicrophoneStreamError);

  console.log('hasOwnProperty("createScriptProcessor")', window.AudioContext.prototype.hasOwnProperty('createScriptProcessor'));

  function onMicrophoneStream(stream) {
    console.log('onMicrophoneStream', stream);
    let micStream = audioCtx.createMediaStreamSource(stream);
    var scriptProcessorNode = audioCtx.createScriptProcessor(micBufferSize, 1, 1);
    scriptProcessorNode.onaudioprocess = onAudioProcess;
    micStream.connect(scriptProcessorNode);
  }
  function onMicrophoneStreamError(e) {
    console.log('onMicrophoneStreamError', e);
  }

  function onAudioProcess(e) {
    //console.log('onAudioProcess');
    if (audioCtx.state === 'suspended') {
      audioCtx.resume();
    }
    var micOutBuff = e.inputBuffer.getChannelData(0); // incoming microphone stream is Float32
    console.log(micOutBuff);
  }
}
```javascript
...