在移动设备上进行第二次音频录制后未触发 SampleDataEvent
Posted
技术标签:
【中文标题】在移动设备上进行第二次音频录制后未触发 SampleDataEvent【英文标题】:SampleDataEvent not fired after second audio recording on mobile 【发布时间】:2014-10-07 13:14:07 【问题描述】:当我第二次从我的 ios 设备上的麦克风播放录制的音频时,我有一个奇怪的行为。
目标:
我想要实现的是一个应用程序,我们可以使用内置麦克风录制多个音频文件,还必须能够重新录制现有音频。
烦恼:
我第一次从麦克风录制音频并想在完成录制后播放它就像一个魅力。音频播放良好。
第二次我想用相同的 byteArray 或新的 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);
希望大家能帮帮我。
【问题讨论】:
代码很多;是否可以只发布可靠地产生错误的代码,以便更容易为您提供帮助? 我删除了一些代码,但重现错误的部分不清楚。我第一次录制和播放,一切正常。只有第二次播放导致没有触发 Event.SOUND_COMPLETE,并且 soundData.bytesAvailable 为 > 2 【参考方案1】:似乎自从更新到 IOS 8 后就出现了这个问题。在 IOS 7 设备上,一切都很顺利。希望 adobe 或 apple 有修复
【讨论】:
以上是关于在移动设备上进行第二次音频录制后未触发 SampleDataEvent的主要内容,如果未能解决你的问题,请参考以下文章
Cordova 3.5 deviceready 事件在 5 秒后未触发
iOS Facebook SDK 在设备上进行身份验证后未重定向