我已经在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