第二次在ios设备上播放麦克风录制的音频时,我有一种奇怪的行为。
目标:
我想要实现的是一个应用程序,我们可以使用内置麦克风录制多个音频文件,还必须能够重新录制现有音频。
麻烦:
我第一次录制麦克风的音频并希望在完成录制后播放它就像一个魅力。音频播放正常。
我想第二次用相同的byteaArray或新的byteArray录制音频,并想播放录制的音频。 SampleDataEvent.SAMPLE_DATA被触发了几次,但在4-6次后停止,然后没有。该应用程序不会崩溃,我不会得到任何错误。当我退出应用程序(按下iPad上的主页按钮),之后再次打开应用程序,音频开始播放。 SampleData再次触发,应用程序正常工作。但是如果我录制新的音频,它也不会播放。退出应用程序,再次打开它,它正在播放。
录制代码(AudioRecord.as):
public function activate():void {
//
mic = Microphone.getMicrophone();
mic.setSilenceLevel(0);
mic.gain = 50;
mic.rate = 44;
}
public function startRecord():void {
trace("start audio record");
isRecording = true;
recordTime = 0;
//
soundBytes = null;
soundBytes = new ByteArray();
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
}
private function micSampleDataHandler(event:SampleDataEvent):void {
while (event.data.bytesAvailable) {
var sample:Number = event.data.readFloat();
soundBytes.writeFloat(sample);
}
}
播放音频代码(AudioBytesPlayer.as):
public function playSound(bytes:ByteArray):void {
trace("AudioBytesPlayer - startSound");
isPlaying = true;
soundData = bytes;
soundData.position = 0;
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler);
soundChannel.addEventListener(Event.SOUND_COMPLETE, onSC);
soundChannel = sound.play();
}
private function playbackSampleHandler(event:SampleDataEvent):void {
trace("playbackSampleHandler");
for (var i:int = 0; i < 8192; i++) {
if (soundData.bytesAvailable < 2) {
stopSound();
break;
}
var sample:Number = soundData.readFloat();
event.data.writeFloat(sample);
event.data.writeFloat(sample);
}
}
希望你们能帮助我。
答案 0 :(得分:0)
似乎自IOS 8更新后出现此问题。在IOS 7设备上,它都很好用。希望adobe或苹果带来修复