2013-07-22 3 views
4

Я пытаюсь записать с микрофона с помощью HTML5 в Chrome 29 Beta для Android (он включил поддержку веб-аудио в своей бета-версии 29). В приведенном ниже коде ProcessAudio - это функция веб-аудиофильтра, в которой я получаю входной буфер от микрофона. Я получаю правильный размер выборки. Однако, образцы аудио pcm в мобильном хроме всегда равны нулю. Хром отключает входные звуковые фильтры в своей мобильной версии? Кто-нибудь получил аудиозапись, использующую HTML5 в Chrome-версии для Chrome? Следующий код прекрасно работает в хром (настольная версия).Использование html5 для захвата входа микрофона на мобильный хром

<!DOCTYPE HTML> 
    <html> 
    <head> 
    <script> 
     function GetMedia(obj, fnSuccess, fnFailure) 
     { 
      if(navigator.getUserMedia) 
      { 
       return navigator.getUserMedia(obj, fnSuccess, fnFailure); 
      } 
      else if(navigator.webkitGetUserMedia) 
      { 
       return navigator.webkitGetUserMedia(obj, fnSuccess, fnFailure); 
      } 
      else if(navigator.mozGetUserMedia) 
      { 
       return navigator.mozGetUserMedia(obj, fnSuccess, fnFailure); 
      } 
      else if(navigator.msGetUserMedia) 
      { 
       return navigator.msGetUserMedia(obj, fnSuccess, fnFailure); 
      } 
      alert("no audio capture"); 
     } 

     var incrementer = 0; 
     function ProcessAudio(e) 
     { 
      var inputBuffer = e.inputBuffer.getChannelData(0); 
      var outputBuffer = e.outputBuffer.getChannelData(0); 
      outputBuffer.set(inputBuffer, 0); 
      document.getElementById("display").innerText = 
          incrementer + " " + inputBuffer[0]; 
      incrementer++; 

     } 

     var context = null; 

     function Success(localMediaStream) 
     { 
      context = new window.webkitAudioContext(); 
      var microphone = context.createMediaStreamSource(localMediaStream); 
      var node = context.createScriptProcessor(4096, 1, 1); 
      node.onaudioprocess = ProcessAudio; 
      microphone.connect(node); 
      node.connect(context.destination); 
     } 
     function Error(err) 
     { 
      alert("no audio support"); 
     } 
     function load(e) 
     { 
      GetMedia({audio:true,video:false}, Success, Error); 
     } 
    </script> 
    </head> 
    <body onload="load(event)"> 
    <div>Audio Player</div> 
    <div id="display"></div> 
    <video id="localvideo" autoplay="autoplay" style="opacity:1"></video> 
    </body> 
    </html> 
+0

FYI прошло некоторое время, так как Chrome для мобильных устройств (как стабильный, так и бета) был обновлен, и хорошей новостью является то, что все работает отлично, как и ожидалось, вместе с живым входом. Хит код! PS: Может быть, мой отчет об ошибке сделал это C: – JSmyth

ответ

1

В настоящее время проблема с inputBuffer в бета-версии Chrome для Android - это всегда содержит нули (по крайней мере, на тех устройствах, которые я тестировал), как вы упомянули, - подтверждено. Это не очень помогает, но для демонстрационных целей лучшее, что я смог достичь прямо сейчас, - это «живой» входной поток через объект <audio>. См. here. Нажмите «запись», а затем начните воспроизведение аудио объекта. Остальное помимо этого - TARFU в текущей бета-версии. Угадайте, я жду, когда G-люди исправят его как можно скорее. Однако я узнал, что zingaya.com отлично работает (то есть записывает ваш звук и воспроизводит его обратно) в Chrome Beta для Android. Просто попробуйте их, и они будут воспроизводить ваш поток. По-видимому, это достигается за счет использования WebRTC. Другими словами, вы, очевидно, можете записать аудиопоток таким образом, я еще не понял, как это сделать. Постарайтесь, если придумаете что-нибудь. С другой стороны, G-парни работают быстро - они выпустили новую бета-версию менее недели назад, которая, по крайней мере, может воспроизводить аудио с XHR. Версия до этого не могла этого сделать.

2

Теперь у нас есть вход для веб-аудио в Chrome для Android Beta (31.0.1650.11).