SampleDataEvent no se activa después de la segunda grabación de audio en el móvil
Frecuentes
Visto 123 equipos
-1
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.
1 Respuestas
0
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 ios actionscript-3 audio arrays audio-recording or haz tu propia pregunta.
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? - APerson
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 - Suur