AIR3 ios app麦克风录制/播放 - 缺少录制开始

时间:2011-10-04 19:03:25

标签: ios actionscript-3 audio air bytearray

我在Flash Pro 5.5中构建了一个小型测试应用程序,与AIR 3 sdk重叠。 只有2个按钮可以录制和播放麦克风的音频。

当我在iPhone 3g上测试时 - 我记录自己说“1-2-3-4-5”。但是当我从头开始播放半秒钟左右时:“3-4-5 - ”。

当我在桌面上测试时一切都很好

这是iPhone 3g的CPU功率的结果还是一个错误,还是我的代码?

感谢 萨尔

如果有人可以尝试这个代码,看看他/她是否重现了这一点,我将不胜感激

这是应用程序:

我在舞台上的所有内容都是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 个答案:

答案 0 :(得分:1)

我建议您使用滑动功能开始录制。 作为解决方法,您可以在用户初始化滑动手势时开始录制。 希望手势结束时录制开始。

如果你试试这个 - 让我们知道这是如何工作的

答案 1 :(得分:1)

好吧,这似乎是iOS录音的滞后。所以我使用一种解决方法:不断录制到缓冲区并使用按钮记录ByteArray的进出位置以进行播放

答案 2 :(得分:0)

尝试侦听flash.events.ActivityEvent-event。麦克风实际开始录制之前可能会有一个小延迟。

答案 3 :(得分:0)

尝试抓住录制的文件(U需要ssh iphone并在Apps目录下获取该文件),看看是否有录制延迟或播放延迟。