Регистрация звука в Chrome для Android с помощью веб-аудио API и Navigator. GetUsermedia

StackOverflow https://stackoverflow.com//questions/20054273

Вопрос

Chrome для версий Android версий 30 и 31 бета-версии на Android 4.1 не отображается правильно записи звука с помощью веб-аудио и навигатора HTML5. (Chrome 30+ на Android должен поддерживать эти API.)

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

Я создал упрощенный тест-центр (перейти к http://jsfiddle.net/jcftk/ и нажмите Кнопка записи, затем выберите подходящий параметр, чтобы позволить ему получить доступ к вашему микрофону). Ключевая часть кода ниже («запись» функция является точкой записи).

function processAudioBuffer(e) {
    var floats = e.inputBuffer.getChannelData(0);
    var min = 0, max = 0;
    for (var i = 0; i < floats.length; i++) {
        var current = floats[i];
        min = Math.min(current, min);
        max = Math.max(current, max);
    }
    log('Block min/max: ' + min.toFixed(3) + ', ' + max.toFixed(3));
}

function record() {
    if (!window.AudioContext) {
        window.AudioContext = window.webkitAudioContext;
    }
    if (!navigator.getUserMedia) {
        navigator.getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
    }
    data.context = new AudioContext();
    navigator.getUserMedia({audio: true}, function(stream) {
        data.mediaStream = stream;
        startAudio();
    }, function(error) {
        log('Stream get error: ' + error);
    });
}

function startAudio() {
    // Get input media stream.
    data.audioStream = data.context.createMediaStreamSource(data.mediaStream);

    // Set up JS processor.
    data.processor = data.context.createScriptProcessor(2048, 1, 1);
    data.processor.onaudioprocess = processAudioBuffer;

    // You need to connect the output of processor to the audio output or it
    // doesn't work. (In Firefox, connecting it just to a gain node works;
    // in Chrome you have to connect to output like this.)
    data.processor.connect(data.context.destination);

    // Connect input stream to processor, then we're done.
    data.audioStream.connect(data.processor);
    log('Stream connected OK');
}
.

Испытание показывает звуковое значение min / Max от каждого записанного блока. Когда он работает - как он делает в настольном Chrome, например, вы увидите значения MIN / MAX варьируются в зависимости от фонового шума. Когда не работает, эти значения всегда 0,000.

Этот тестский пример работает следующим:

    .
  • Chrome 30 (Windows)
  • firefox 25 (Windows)
  • firefox 25 (Android 4.1) на Sony Xperia M
  • firefox 25 (андроид 4.1) на планшете Samsung

Этот тестовый случай не работает следующим:

    .
  • Chrome 30 (Android 4.1) на Sony Xperia M
  • Chrome Beta 31 (Android 4.1) на Sony Xperia M
  • Chrome 30 (Android 4.1) на планшете Samsung

Testcase также не работает в других браузерах, таких как Safari или IE, но это ожидается, что они не поддерживают необходимые API. Это только Chrome для Android, что я надеялся сделать эту работу, но это не так.

Я подал это как проблему, используя процесс отчетности Chrome Emposit, (который является частным и, возможно, черная дыра), но я думал, что я также спрошу здесь: кто-нибудь осознает обходные пути, которые будут решить этот код, чтобы я мог на самом деле заставить его работать на Chrome для Android?

(требование для моих целей заключается в том, что записанное аудио должно перейти на обработчик событий JavaScript, например, здесь, и, например, непосредственно на сервер как часть загрузки формы, которая очень, возможно, может работать уже.) < / P >.

У меня сложилось впечатление, что это кровотечение, и не слишком много людей пытаются его использовать, но я подумал, что это возможно, стоит спросить. :)

Это было полезно?

Решение

Мы все еще работаем над аудиовходом в Android;Он включен в версии 31, но он еще не включен на все устройства.Он работает на устройствах Nexus, по крайней мере, - N4, N5, N7.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top