SampleDataEvent.SAMPLE_DATA никогда не срабатывает во Flex? - PullRequest
0 голосов
/ 28 июля 2010

микрофон.addEventListener (SampleDataEvent.SAMPLE_DATA, gotMicData); событие gotMicData никогда не запускается .. однако я попытался использовать dispatchEvent, но это вернет null byteArray .. Однако подобный код прекрасно работает в Flashcs5 ...

        import flash.events.SampleDataEvent;
        import flash.media.Microphone;
        import flash.media.Sound;
        import flash.utils.ByteArray;

        [Bindable] private var microphoneList:Array;
                 protected var microphone:Microphone;
                 protected var isRecording:Boolean = false;
                 protected var soundRecording:ByteArray;
                 protected var soundOutput:Sound;

        protected function setupMicrophoneList():void
        {
            microphoneList = Microphone.names;
        }

        protected function setupMicrophone():void
        {
            microphone = Microphone.getMicrophone(comboMicList.selectedIndex);
            microphone.rate = 44;
        }

        protected function startMicRecording():void
        {
            isRecording = true;
            soundRecording = new ByteArray();
            microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData);
        }

        protected function stopMicRecording():void
        {
            isRecording = false;
            microphone.removeEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData);
        }

        private function gotMicData(micData:SampleDataEvent):void
        {
            soundRecording.writeBytes(micData.data);
        }

        protected function playbackData():void
        {
            soundRecording.position = 0;

            soundOutput = new Sound();
            soundOutput.addEventListener(SampleDataEvent.SAMPLE_DATA, playSound);

            soundOutput.play();
        }

        private function playSound(soundOutput:SampleDataEvent):void
        {
            if (!soundRecording.bytesAvailable > 0)
                return;
            for (var i:int = 0; i < 8192; i++)
            {
                var sample:Number = 0;
                if (soundRecording.bytesAvailable > 0)
                    sample = soundRecording.readFloat();
                soundOutput.data.writeFloat(sample); 
                soundOutput.data.writeFloat(sample);  
            }               
        }


    ]]>
</mx:Script>

Ответы [ 3 ]

0 голосов
/ 22 марта 2011

SampleDataEvent - это функция Flash Player 10.1.Установите в качестве цели вашего игрока значение 10,1 или выше в свойствах Flex Compiler для вашего проекта, и вам это будет хорошо.

0 голосов
/ 07 июля 2012

Эй, просто чтобы добавить к этой теме, у меня была похожая проблема, пока я не увидел комментарий в этом блоге:

http://www.bytearray.org/?p=1858

В основном вы должны убедиться, что ваша сцена большаядостаточно для размещения окна настроек безопасности флэш.

Сводил меня с ума, пытаясь понять эту красоту.

0 голосов
/ 29 июля 2010

Установка Flex Builder также установит SDK 3.2 по умолчанию, и я обнаружил, что вам просто нужно скачать последнюю версию Flex SDK и использовать ее в Flex Builder ... и код будет работать нормально.

...