Domanda

Chrome per le versioni Android 30 e 31 Beta su Android 4.1 Non sembrano registrare correttamente l'audio utilizzando HTML5 Web Audio e Navigator.WebKitgetExermedia. (Chrome 30+ su Android dovrebbe supportare queste API).

Il sintomo è che il codice sembra funzionare correttamente, inclusa la visualizzazione del prompt se consentire o meno l'accesso al microfono, ma i dati registrati non contengono nient'altro che zeri.

Ho creato un testCase semplificato (vai su http://jsfiddle.net/jcftk/ e clicca Tasto di registrazione, quindi scegliere l'opzione appropriata per consentirgli di accedere al microfono). La parte chiave del codice è sotto (la funzione "record" è il punto di ingresso).

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');
}
.

Il test mostra il valore audio min / massimo da ciascun blocco registrato. Quando funziona - come fa in Desktop Chrome, ad esempio - vedrai i valori min / max variano a seconda del rumore di fondo. Quando non funziona, questi valori sono sempre 0.000.

Questo testCase funziona in quanto segue:

    .
  • Chrome 30 (Windows)
  • Firefox 25 (Windows)
  • Firefox 25 (Android 4.1) su un Sony Xperia M
  • Firefox 25 (Android 4.1) su un tablet Samsung

Questo caso di prova non funziona in quanto segue:

    .
  • Chrome 30 (Android 4.1) su un Sony Xperia M
  • Chrome beta 31 (Android 4.1) su un Sony Xperia M
  • Chrome 30 (Android 4.1) su un tablet Samsung

Il testCase non funziona anche in altri browser come Safari o IE, ma è atteso in quanto non supportano le API necessarie. È solo cromo per Android che speravo di fare questo lavoro, ma non lo faceva.

Ho presentato questo problema come un problema utilizzando il processo di reporting dei problemi di Chrome (che è privato e possibilmente un buco nero) ma ho pensato che avrei anche chiesto qui: qualcuno è a conoscenza dei soluzioni alternativi che risolverebbero questo codice così posso In realtà fallo funzionare su Chrome per Android?

(Un requisito per i miei scopi è che l'audio registrato deve andare su un gestore di eventi JavaScript come quello qui, ed es. Non direttamente al server come parte di un caricamento del modulo, che è molto probabilmente potrebbe funzionare già.) < / P >.

Ho l'impressione che questa sia roba e sanguinamento e non troppe persone stanno cercando di usarlo, ma pensavo che potesse valere la pena chiedere. :)

È stato utile?

Soluzione

Stiamo ancora lavorando sull'ingresso audio in Android;È abilitato nella versione 31, ma non è ancora attivato tutti i dispositivi.Lavora sui dispositivi Nexus, almeno - N4, N5, N7.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top