Как читать чистые необработанные данные с микрофона в Chrome на Android - PullRequest
0 голосов
/ 05 января 2019

Моя цель - записать высококачественное музыкальное аудио на моей веб-странице, работающей в Chrome на Android Для этой цели я возился с API getUserMedia.

Я передаю следующее ограничение для get media:

constraints = {echoCancellation: {exact: false},
                autoGainControl: {exact: false}};
navigator.mediaDevices.getUserMedia({audio: constraints}).then(record_processor);

И вот как я обрабатываю поток, полученный в обратном вызове getusermedia:

function record_processor(stream){
console.log('in record_processor');
context = new AudioContext();
var source  = context.createMediaStreamSource(stream);
buffer_size = 1024*16;
var processor = context.createScriptProcessor(buffer_size,1,1);
source.connect(processor);
processor.connect(context.destination);
sample_rate = context.sampleRate;
console.log('sample rate: ' + sample_rate);

total_iterations = ((TOTAL_RECORDING_TIME*sample_rate)/(1000*buffer_size));
console.log('total iterations: ' + total_iterations);

counter = 0;
var chunks = [];
processor.onaudioprocess = function (e){
  var buffer = new Float32Array(e.inputBuffer.getChannelData(0));
  chunks.push(buffer);

  //console.log('buffer: ', buffer);
  console.log(counter);


  counter +=1;
  if(counter > total_iterations){
    console.log('iterations complete');
    context.close();
    //stopStreaming();
    console.log('audiochunks: ', chunks);
    data = mergeBuffers(chunks, chunks.length*buffer_size);

    console.log('data', data);
    wav_view = encodeWAV(data);

    var audioBlob = new Blob([wav_view], {type: 'audio/wav'});
    //forceDownload(audioBlob, 'recording.wav');
    console.log(audioBlob);
    get_song(audioBlob, sample_rate);
  }
};

}

Проблема в том, что это дает мне предварительно обработанные, а не необработанные аудиоданные. По всей видимости, Chrome применяет некоторое обнаружение фонового шума и пытается отменить любой шаблон, длительность которого превышает полсекунды.

Не могли бы вы, ребята, спросить меня, как попросить Chrome не применять фильтрацию / предварительную обработку звука и предоставить мне чистые необработанные данные, полученные аппаратным обеспечением микрофона?

Ниже приведены форма волны и спектрограмма микрофонных данных, которые я получаю:

форма сигнала хромированного выхода Спектограмма хромированного выхода

...