我已經在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);
}
}
}
}
謝謝。從用戶的角度來看這是不好的,因爲他/她一旦按下按鈕就開始講話。我將向Adobe提交一個錯誤。與此同時,我使用了一種解決方法:不斷錄製到緩衝區並使用按鈕記錄ByteArray的進入和退出位置以便播放 – Saariko
我不確定這是否是一個adobe錯誤。它也發生在我iPhone上的語音備忘錄應用程序中(我按下記錄並立即開始說話,它在「1-2-3-4」中忽略了我的「1」)。 –
這是一個好點,雖然空氣應用程序相當晚。順便說一句,在Android的相同的應用程序開始立即錄製 – Saariko