Question

chrome pour les versions Android 30 et 31 bêta sur Android 4.1 n'apparaissent pas d'enregistrement correctement audio à l'aide de l'audio Web HTML5 et de Navigator.WebkittTretermedia. (Chrome 30+ sur Android est censé supporter ces API.)

Le symptôme est que le code semble fonctionner correctement, y compris l'affichage de l'invite pour permettre ou non d'autoriser l'accès au microphone, mais les données enregistrées ne contiennent que des zéros.

J'ai créé une TESTCASE simplifiée (Aller à http://jsfiddle.net/jcftk/ , puis cliquez sur Bouton d'enregistrement, puis choisissez l'option appropriée pour lui permettre d'accéder à votre microphone). La partie clé du code est ci-dessous (la fonction "Enregistrer" est le point d'entrée).

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

Le test indique la valeur audio min / max de chaque bloc enregistré. Lorsqu'il fonctionne - comme dans le bureau chrome, par exemple - vous verrez que les valeurs min / max varient en fonction du bruit de fond. Quand cela ne fonctionne pas, ces valeurs sont toujours 0.000.

Ce témoignage fonctionne dans ce qui suit:

  • Chrome 30 (Windows)
  • Firefox 25 (Windows)
  • Firefox 25 (Android 4.1) sur un Sony Xperia M
  • Firefox 25 (Android 4.1) sur une tablette Samsung

Ce boîtier de test ne fonctionne pas dans ce qui suit:

  • chrome 30 (Android 4.1) sur un Sony Xperia M
  • chrome beta 31 (Android 4.1) sur un Sony Xperia M
  • Chrome 30 (Android 4.1) sur une tablette Samsung

L'attestation ne fonctionne pas non plus dans d'autres navigateurs tels que Safari ou c'est-à-dire, mais cela est attendu car ils ne supportent pas les API nécessaires. Ce n'est que Chrome pour Android que j'espérais faire ce travail, mais ce n'est pas le cas.

J'ai déposé cela comme un problème à l'aide du processus de reporting d'émission de chrome (qui est privé et éventuellement un trou noir) mais je pensais que je demanderais aussi ici: Quelqu'un est-il au courant des travaux de contournement qui corrigerait ce code afin que je puisse réparer ce code afin que je puisse fait effectivement fonctionner sur chrome pour Android?

(une exigence de mes fins est que l'audio enregistré doit accéder à un gestionnaire d'événements JavaScript tel que celui ici et, par exemple, pas directement sur le serveur dans le cadre d'un téléchargement de formulaire, qui pourrait très peut-être fonctionner déjà.) < / p>

J'ai l'impression que ceci est des trucs saignements et pas trop de gens essaient de l'utiliser, mais je pensais que cela mérite d'être demandé. :)

Était-ce utile?

La solution

Nous travaillons toujours sur l'entrée audio dans Android;Il est activé dans la version 31, mais cela n'est pas encore activé sur tous les appareils.Il fonctionne sur les appareils Nexus, au moins - N4, N5, N7.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top