2011-10-04 82 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

我建議您使用滑動功能開始錄製。 作爲解決方法,您可以在用戶初始化滑動手勢時開始錄製。 希望手勢完成後錄製將開始。

如果您嘗試這一點 - 讓我們知道這是如何工作

相關問題