【问题标题】:Flash Microphone Event ResizeFlash 麦克风事件调整大小
【发布时间】:2012-08-12 15:12:48
【问题描述】:

我最近一直在学习和学习 Flash AC3,我的目的是为我的网站制作一个小型录音机。我一直在使用谷歌和搜索引擎,并在这里和那里得到不同的答案,但它仍然不能正常工作。

我遇到的问题是,flash 插件是 215x50 像素。我知道除非是 215x138 像素,否则 Flash 播放器安全面板将不会自动打开。

我设计了一个解决方法,如果当安全被调用打开时,我会使用一个名为 ResizeFlash 的 javascript 函数将 Flash 对象所在的 DIV 调整为 215x138 的大小,然后再回到 215x50用户可以选择是否允许使用麦克风。

现在我已经摸不着头脑了几天,因为我确实让以下代码工作并且它确实调整了 DIV 的大小,但它没有重新调整 DIV 的大小。我想我可能在错误的地方调用了 ResizeFlash (???)。我不够熟悉,不知道哪里可能出错。

我一直在重新排列代码以查看是否可行,我会得到它确实调整为 215x138 的时间,打开安全面板,然后将大小调整回 215x50,但随后无法开始录制,就好像我被困在某个地方一样在一个循环中。

我希望有人可以花点时间看一下这段代码,并告诉我处理这个问题的正确方法。非常感谢!

代码如下:

public function Main():void
{
    recButton.stop();
    submitButton.enabled = false;  // These reset everything, maybe in wrong place?? 
    activity.stop(); 
    addListeners();

        mic = Microphone.getMicrophone();

        if (mic == null)
        {
            // no camera is installed
        }
        else if (mic.muted)
        {
            // user has disabled the access in security settings
            mic.addEventListener(StatusEvent.STATUS, onMicStatus, false, 0, true); // listen out for their new decision
            Security.showSettings('2'); // show security settings window to allow them to change security settings
        }
        else
        {
            // you have access
            mic.setUseEchoSuppression(true); //... also this might be in wrong place?
            // .. I would like this to always be on
        }
    }

    private function addListeners():void
    {
        recButton.addEventListener(MouseEvent.MOUSE_UP, startRecording);
        submitButton.addEventListener(MouseEvent.MOUSE_UP, onSend);
        recorder.addEventListener(RecordingEvent.RECORDING, recording);
        recorder.addEventListener(Event.COMPLETE, recordComplete);
        activity.addEventListener(Event.ENTER_FRAME, updateMeter);

    }

    function onMicStatus(event:StatusEvent):void 
    {   
        if (event.code == "Microphone.Unmuted") 
        { 
            mic.removeEventListener(StatusEvent.STATUS, onMicStatus);
            ExternalInterface.call('ResizeFlash', '215', '50'); // When the user presses allow, resize the div back to 215x50
        }
    }

    private function startRecording(e:MouseEvent):void
    {
        recorder.record();
        e.target.gotoAndStop(2);

        recButton.removeEventListener(MouseEvent.MOUSE_UP, startRecording);
        recButton.addEventListener(MouseEvent.MOUSE_UP, stopRecording);

    }

    private function stopRecording(e:MouseEvent):void
    {
        recorder.stop();

        e.target.gotoAndStop(1);

        recButton.removeEventListener(MouseEvent.MOUSE_UP, stopRecording);
        recButton.addEventListener(MouseEvent.MOUSE_UP, startRecording);
    }

我知道我里面的东西顺序错误..!我感谢任何 cmets。

【问题讨论】:

    标签: javascript actionscript flash microphone


    【解决方案1】:

    正如您所建议的,在麦克风的状态事件处理程序中将应用程序的大小重新调整为 215x50 可能为时过早。

    只是一种预感,但当用户单击 Flash 安全面板中的“允许”单选按钮时,会立即调度该状态事件。面板仍处于打开状态。事实上,如果您将其保持打开状态并在允许/拒绝之间单击,它每次都会被调度...

    当安全面板启动时,有些事情你不能做。我想知道使用ExternalInterface(调整应用程序大小)是否落入此桶。

    我建议如下:

    1. 在不使用安全面板的情况下测试您的调整大小功能。确保此代码在两个方向上都成功地调整了应用的大小。
    2. 然后看看this question 如何检测用户何时真正关闭了安全面板。那里有两种方法,一种非常hacky(BitmapData.draw() hack),但我知道它有效。我建议尝试第二个,如果它确实有效,请在那里评论/投票(我也会这样做)。这是一种更优雅的方式来检测用户何时关闭对话框,但我还没有机会尝试。
    3. 当您检测到对话框已关闭时,请调整应用大小。

    【讨论】:

    • 感谢您的回答。这很有趣,因为我最近才开始玩 Flash 和 AS3,而且我已经用 C++、JS 和 HTML 编写代码很长时间了,我注意到 Flash 中仍然有很多错误.. :)
    • 围绕安全对话框的问题可能会让开发人员感到烦恼。所有的限制都是为了保护用户(即:所以用户不能被诱骗允许摄像头/麦克风访问等)。也就是说,我们必须使用的 API 有时会达不到要求 :) 希望您使用 Flash 的体验会有所改善。我喜欢 Flash 的一件事是一致性:当它工作时,它将在 99% 的时间内在所有平台/浏览器上工作,让您摆脱所有这些浏览器的特性。
    • 在大约一周的不眠之夜弄清楚我能做什么之后,我想出了一个噱头……我读了一些答案,说要寻找 stage.FOCUS 事件。我也尝试了 BITMAP hack,但似乎我猜在最新的 Flash Player 中,BITMAP 确实可以在面板打开的情况下工作(我想是因为我一尝试它就会给出 OK。)
    • 基本上我什么都试过了,我做了以下。当我打开安全面板时,我还会触发一个每 100 毫秒扫描一次的 TIMER 侦听器。我会寻找 Microphone.Unmuted == TRUE。然后我还会向舞台发送一个 Focus 事件。当 onFocus 处理程序检测到事件时,我几乎会说安全面板已关闭。我第一次尝试 hack,但它似乎奏效了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2013-04-13
    • 2012-08-23
    相关资源
    最近更新 更多