第二次从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);
}
}
希望你们能帮助我。
看来,由于更新了IOS 8,因此会出现此问题。在IOS 7设备上,一切正常。希望Adobe或Apple附带修复程序
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句