Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex SampleDataEvent.SAMPLE_数据在Flex中从不激发?_Apache Flex_Flash_Actionscript 3_Flex3 - Fatal编程技术网

Apache flex SampleDataEvent.SAMPLE_数据在Flex中从不激发?

Apache flex SampleDataEvent.SAMPLE_数据在Flex中从不激发?,apache-flex,flash,actionscript-3,flex3,Apache Flex,Flash,Actionscript 3,Flex3,麦克风.addEventListener(SampleDataEvent.SAMPLE_数据,gotMicData); 事件gotMicData从未被激发。。但是,我尝试使用dispatchEvent,但它将返回null byteArray。。 然而,类似的代码在Flashcs5中工作良好 导入flash.events.SampleDataEvent; 导入flash.media.microscope; 导入flash.media.Sound; 导入flash.utils.ByteArray;

麦克风.addEventListener(SampleDataEvent.SAMPLE_数据,gotMicData); 事件gotMicData从未被激发。。但是,我尝试使用dispatchEvent,但它将返回null byteArray。。 然而,类似的代码在Flashcs5中工作良好

导入flash.events.SampleDataEvent;
导入flash.media.microscope;
导入flash.media.Sound;
导入flash.utils.ByteArray;
[Bindable]专用var话筒列表:阵列;
保护无功话筒:话筒;
受保护的变量isRecording:Boolean=false;
保护var录音:ByteArray;
保护var声音输出:声音;
受保护的函数setupMicrohoneList():void
{
麦克风列表=麦克风名称;
}
受保护的函数setupMirror():void
{
麦克风=麦克风。获取麦克风(comboMicList.selectedIndex);
麦克风频率=44;
}
受保护的函数startMicRecording():void
{
isRecording=true;
录音=新的ByteArray();
麦克风.addEventListener(SampleDataEvent.SAMPLE_数据,gotMicData);
}
受保护的函数stopMicRecording():void
{
isRecording=false;
麦克风.removeEventListener(SampleDataEvent.SAMPLE_数据,gotMicData);
}
私有函数gotMicData(micData:SampleDataEvent):void
{
声音记录。写入字节(micData.data);
}
受保护的函数playbackData():void
{
soundRecording.position=0;
soundOutput=新声音();
soundOutput.addEventListener(SampleDataEvent.SAMPLE_数据,播放声音);
soundOutput.play();
}
专用函数播放声音(声音输出:SampleDataEvent):无效
{
如果(!soundRecording.bytesAvailable>0)
返回;
对于(变量i:int=0;i<8192;i++)
{
var样本:数量=0;
如果(soundRecording.bytesAvailable>0)
sample=soundRecording.readFloat();
soundOutput.data.writeFloat(示例);
soundOutput.data.writeFloat(示例);
}               
}
]]>

安装Flex Builder也会将sdk 3.2设置为默认值,我发现您只需下载最新的Flex sdk并在Flex Builder中使用即可。。代码将正常工作。

SampleDataEvent是Flash player 10.1的一项功能。在项目的Flex编译器属性中将您的播放器目标设置为10.1或更高,您应该会很好。

嘿,只是为了添加到这个线程中,我遇到了一个类似的问题,直到我在这个博客上看到一条评论:

基本上,你必须确保你的舞台足够大,可以容纳flash安全设置窗口


试图找出这种美让我发疯。

让私人var可绑定是不寻常的,但我怀疑这与您当前的问题有关。对我来说,“StartMicrocrding”的名称并不明显。如果没有,那么您的侦听器将永远不会被添加。仍然无法启动类似的代码-SampleDataEvent根本没有启动(Flex SDK 4.1)…我建议尝试使用flash builder 4,因为默认情况下它使用SDK 4.1。事件不触发是sdk的问题。
        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>