2011-10-04 77 views
1

我已经在AIR 3 SDK中覆盖Flash Pro 5.5中构建了一个小测试应用程序。 只有2个按钮来录制和播放麦克风的音频。AIR3 iOS应用程序麦克风录制/播放 - 开始录制缺失

当我在我的iPhone 3g上测试这个 - 我记录自己说“1-2-3-4-5”。但是当我回放半秒左右时,从开头就缺少了:“3-4-5-”。

当我测试这个桌面上的所有优良

这是iPhone 3G的CPU处理能力的结果,或者是一个bug或者是我的代码?

感谢 萨尔

,如果任何人可以试试这个代码,看他/她再现了这一点,我将不胜感激

这是应用程序:

所有我必须在舞台上为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); 
           } 
        } 
      } 

} 

回答

1

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

0

尝试李打开flash.events.ActivityEvent事件。麦克风实际开始录制之前可能会有一小段延迟。

+0

谢谢。从用户的角度来看这是不好的,因为他/她一旦按下按钮就开始讲话。我将向Adobe提交一个错误。与此同时,我使用了一种解决方法:不断录制到缓冲区并使用按钮记录ByteArray的进入和退出位置以便播放 – Saariko

+0

我不确定这是否是一个adobe错误。它也发生在我iPhone上的语音备忘录应用程序中(我按下记录并立即开始说话,它在“1-2-3-4”中忽略了我的“1”)。 –

+0

这是一个好点,虽然空气应用程序相当晚。顺便说一句,在Android的相同的应用程序开始立即录制 – Saariko

0

尝试获取录制文件(U需要ssh iphone并获取Apps dir下的文件)并查看是否存在录制延迟或播放延迟。

+0

事实上,我的解决方法工作实际上表明,这是一个录音问题,而不是一个播放 – Saariko

1

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

如果您尝试这一点 - 让我们知道这是如何工作

相关问题