Захват аудио в режиме реального времени с помощью Cordova в Android - PullRequest
1 голос
/ 29 июня 2019

У меня проблема с приложением, созданным на Javascript и Cordova, работающим на Android.Приложение в основном захватывает аудио вход в режиме реального времени с микрофона, и все данные буферизируются и отображаются на экране.Когда уровень звука ниже определенного уровня, приложение отображает предупреждение.В веб-браузерах (протестировано на Firefox) это работает, но когда я портирую веб-приложение, оно показывает только предупреждения перед той частью кода, где обрабатывается аудио.Я читал некоторые из плагинов AudioInput, но я не знаю, как заставить его работать.

С веб-приложением это приложение отлично работает и выполняет все задачи, но приложение Android более важно и полезно.Я попытался изменить код веб-приложения JS, но он не работает.

Вот код веб-приложения.Я пытался использовать в приложении Cordova, но ничего не происходит:

      var ventanas = [];
      var MAX_VENTANAS = 7;


      var webaudio_tooling_obj = function () {
        alert("arrancando");
        var audioContext = new AudioContext();

        alert("audio is starting up ...");

        var BUFF_SIZE = 16384;

        var audioInput = null,
            microphone_stream = null,
            gain_node = null,
            script_processor_node = null,
            script_processor_fft_node = null,
            analyserNode = null;

        if (!navigator.getUserMedia)
                navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
                              navigator.mozGetUserMedia || navigator.msGetUserMedia;

        if (navigator.getUserMedia){

            navigator.getUserMedia({audio:true}, 
              function(stream) {
                  start_microphone(stream);
                  alert("Correct");
              },
              function(e) {
                alert('Error capturing audio.');
              }
            );

        } else { alert('getUserMedia not supported in this browser.'); }

        // ---

        function show_some_data(given_typed_array, num_row_to_display, label) {

            var size_buffer = given_typed_array.length;
            var index = 0;
            var max_index = num_row_to_display;

            console.log("__________ " + label);

            for (; index < max_index && index < size_buffer; index += 1) {

                console.log(given_typed_array[index]);
            }
        }

        function process_microphone_buffer(event) { // invoked by event loop

            var i, N, inp, microphone_output_buffer;

            microphone_output_buffer = event.inputBuffer.getChannelData(0); // just mono - 1 channel for now

            // microphone_output_buffer  <-- this buffer contains current gulp of data size BUFF_SIZE

            //show_some_data(microphone_output_buffer, 5, "from getChannelData");
            var suma = 0;
            for(var i=0; i<BUFF_SIZE; i++){
              suma = suma + Math.abs(microphone_output_buffer[i]);
            }
            suma = suma / BUFF_SIZE;
            document.getElementById("barra-progreso").style.width= Math.floor(suma*100)+"%";
            if(ventanas.length>=MAX_VENTANAS){
              ventanas.shift();
            }
            ventanas.push(suma);
            //chart.render();

            var sumaVentanas = 0;
            for(var i=0; i<ventanas.length; i++){
              sumaVentanas = sumaVentanas + ventanas[i];
            }
            sumaVentanas = sumaVentanas / (MAX_VENTANAS * BUFF_SIZE) * 1000000;
            console.log(sumaVentanas)

            document.getElementById("barra-progreso2").style.width= Math.floor(sumaVentanas)+"%";



        }
        function start_microphone(stream){

          gain_node = audioContext.createGain();

          microphone_stream = audioContext.createMediaStreamSource(stream);
          microphone_stream.connect(gain_node); 

          script_processor_node = audioContext.createScriptProcessor(BUFF_SIZE, 1, 1);
          script_processor_node.onaudioprocess = process_microphone_buffer;

          microphone_stream.connect(script_processor_node);      
        }

      }(); //  webaudio_tooling_obj = function()

Если вы можете порекомендовать мне курс или пост, чтобы узнать, как сделать нечто похожее на то, что я делаю в коде веб-приложения для CordovaПриложение Буду очень признателен!Извините за мой плохой английский, и спасибо всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...