Запись / воспроизведение в микрофоне приложения AIR3 ios - начало записи отсутствует - PullRequest
1 голос
/ 04 октября 2011

У меня есть небольшое тестовое приложение во Flash Pro 5.5, наложенное на AIR 3 SDK.Он имеет всего 2 кнопки для записи и воспроизведения звука с микрофона.

, когда я проверяю это на своем iPhone 3g - я записываю себя, говоря «1-2-3-4-5».но когда я воспроизводлю полсекунды или около того с самого начала не хватает: «3-4-5 -».

когда я проверяю это на рабочем столе, все нормально

эторезультат питания процессора iPhone 3g или это ошибка, или это мой код?

спасибо Саару

, если кто-нибудь может попробовать этот код и посмотреть, воспроизводит ли он / она это, я был бы признателенэто

это приложение:

все, что у меня есть на сцене, это 2 прямоугольных видеоклипа с именами «записано» и «проигрыватель», весь код находится в этом классе документа:

package  {

          import flash.display.MovieClip;
          import flash.media.Microphone;
          import flash.media.SoundMixer;
          import flash.events.MouseEvent;
          import flash.utils.ByteArray;
          import flash.media.Sound;
          import flash.media.SoundChannel;
          import flash.events.SampleDataEvent;
          import flash.media.AudioPlaybackMode;


          public class RecTest extends MovieClip {
                    var mic:Microphone;
                    var nowRecording:Boolean = false;
                    var nowPlaying:Boolean = false;
                    var recordedBytes:ByteArray = new ByteArray();
                    var s:Sound = new Sound();
                    var sc:SoundChannel;

                    public function RecTest() {
                              mic = Microphone.getMicrophone(-1);
                              SoundMixer.useSpeakerphoneForVoice = true;
                              SoundMixer.audioPlaybackMode = AudioPlaybackMode.MEDIA;
                              mic.gain = 100;
                              mic.setSilenceLevel(0);
                              mic.rate = 44;

                              recorder.addEventListener(MouseEvent.CLICK, onRec);
                              player.addEventListener(MouseEvent.CLICK, onPlay);
                    }

                    function onRec(e:MouseEvent) {
                              if (nowRecording) {
                                        trace("stopped");
                                        mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, getMicAudio);
                                        nowRecording = false;
                              } else {
                                        trace("recording");
                                        recordedBytes.position = 0;
                                        recordedBytes.length = 0;
                                        mic.addEventListener(SampleDataEvent.SAMPLE_DATA, getMicAudio);
                                        nowRecording = true;
                              }
                    }

                    function onPlay(e:MouseEvent) {
                              if (nowPlaying) {
                                        trace("stopped");
                                        sc.stop();
                                        s.removeEventListener(SampleDataEvent.SAMPLE_DATA, playAudio);
                                        nowPlaying = false;
                              } else {
                                        trace("playing");
                                        recordedBytes.position = 0;
                                        s.addEventListener(SampleDataEvent.SAMPLE_DATA, playAudio);
                                        sc = s.play();
                                                sc.addEventListener(Event.SOUND_COMPLETE, onComplete,false,0,true);
                                        nowPlaying = true;
                              }
                    }

                        function onComplete(e:Event) {
                                              trace("stopped");
                                              s.removeEventListener(SampleDataEvent.SAMPLE_DATA, playAudio);
                                              nowPlaying = false;
                    }


                    function getMicAudio(e:SampleDataEvent) {
                              recordedBytes.writeBytes(e.data);
                    }

                    function playAudio(e:SampleDataEvent) {
                              for (var i:int = 0; i < 8092 && recordedBytes.bytesAvailable > 0; i++) {
                                        e.data.writeBytes(recordedBytes);
                                        e.data.writeBytes(recordedBytes);
                              }
                    }
          }

}

Ответы [ 4 ]

1 голос
/ 09 апреля 2012

хорошо, похоже, это задержка записи iOS.поэтому я использую обходной путь: постоянная запись в буфер и использование кнопок для записи входных и выходных позиций ByteArray для воспроизведения

1 голос
/ 20 января 2012

Я предлагаю вам использовать функцию смахивания, чтобы начать запись.В качестве обходного пути вы можете начать запись, когда пользователь инициализирует жест смахивания.Надеюсь, что запись начнется после завершения жеста.

Если вы попробуете это - дайте нам знать, как это работает

0 голосов
/ 12 октября 2011

Попытайтесь заполучить записанный файл (вам нужно ssh iphone и получить файл в папке Apps dir) и посмотреть, есть ли задержка записи или задержка воспроизведения.

0 голосов
/ 05 октября 2011

Попробуйте прослушать событие flash.events.ActivityEvent. Может быть небольшая задержка, прежде чем микрофон начнет запись.

...