SampleDataEvent no se activa después de la segunda grabación de audio en el móvil

Tengo un comportamiento extraño cuando reproduzco un audio grabado desde el micrófono en mi dispositivo ios por segunda vez.

Meta:

lo que quiero lograr es una aplicación en la que podamos grabar múltiples archivos de audio con el micrófono incorporado, también tiene que ser posible volver a grabar un audio existente.

Los problemas:

La primera vez que grabo un audio desde el micrófono y quiero reproducirlo después de terminar el registro, funciona de maravilla. El audio se reproduce bien.

La segunda vez quiero grabar un audio con el mismo byteaArray o un byteArray nuevo, y quiero reproducir el audio grabado. SampleDataEvent.SAMPLE_DATA se activa varias veces, pero se detiene después de 4 a 6 veces y luego no lo hace. La aplicación no falla, no recibo ningún error. Cuando salgo de la aplicación (presiono el botón de inicio en el iPad) y luego abro la aplicación nuevamente, el audio comienza a reproducirse. SampleData se activa nuevamente y la aplicación funciona bien. Pero también aquí si grabo un nuevo audio, no se reproduce. Sal de la aplicación, ábrela de nuevo y se está reproduciendo.

Código de grabación (AudioRecord.as):

public function activate():void {
        //
        mic = Microphone.getMicrophone();
        mic.setSilenceLevel(0);
        mic.gain = 50;
        mic.rate = 44;
    }

    public function startRecord():void {
        trace("start audio record");
        isRecording = true;
        recordTime = 0;
        //
        soundBytes = null;
        soundBytes = new ByteArray();
        mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
    }

    private function micSampleDataHandler(event:SampleDataEvent):void {
        while (event.data.bytesAvailable) {
            var sample:Number = event.data.readFloat();
            soundBytes.writeFloat(sample);
        }
    }

Reproducir código de audio (AudioBytesPlayer.as):

public function playSound(bytes:ByteArray):void {
        trace("AudioBytesPlayer - startSound");
        isPlaying = true;
        soundData = bytes;
        soundData.position = 0;
        sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler);
        soundChannel.addEventListener(Event.SOUND_COMPLETE, onSC);
        soundChannel = sound.play();
    }

    private function playbackSampleHandler(event:SampleDataEvent):void {
        trace("playbackSampleHandler");
        for (var i:int = 0; i < 8192; i++) {
            if (soundData.bytesAvailable < 2) {
                stopSound();
                break;
            }
            var sample:Number = soundData.readFloat();
            event.data.writeFloat(sample);
            event.data.writeFloat(sample);
        }
    }

Espero que me puedan ayudar.

preguntado Oct 07 '14, 14:10

Eso es mucho código; ¿sería posible publicar solo el código que produce su error de manera confiable, para que sea más fácil ayudarlo? -

Eliminé algo de código, pero la parte que reproduce el error no está clara. La primera vez que grabo y reproduzco, todo funciona bien. solo la segunda vez que se reproduce no se dispara Event.SOUND_COMPLETE, y soundData.bytesAvailable es > 2 -

1 Respuestas

Parece que desde la actualización a IOS 8 se presenta este problema. En los dispositivos IOS 7 todo funciona bien. Espero que Adobe o Apple vengan con una solución.

Respondido 08 Oct 14, 08:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.