【问题标题】:SampleDataEvent not fired after second audio recording on mobile在移动设备上进行第二次音频录制后未触发 SampleDataEvent
【发布时间】: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

标签: ios actionscript-3 audio bytearray audio-recording


【解决方案1】:

似乎自从更新到 IOS 8 后就出现了这个问题。在 IOS 7 设备上,一切都很顺利。希望 adobe 或 apple 有修复

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多