3

我正在 Flash (AS3) 中构建一种游戏,其中声音输入(麦克风)触发均衡器(micLevel.height控制面具的高度(显示均衡器)。麦克风的activityLevel给了我一个数字( 0 - 100 ) 显示在 textfield prosent中。参赛者对着麦克风大喊并尝试达到 100 (我使用mc.gain使其难以达到 100 )。到目前为止一切都很好!我对 AS3 还很陌生,所以我觉得有点失落。

我需要显示他们设法达到的最高数字,并且我希望对此有时间限制。让我们说5秒内的最高声级。

这是到目前为止的代码:

var mic:Microphone = Microphone.getMicrophone();

Security.showSettings("privacy");
mic.setLoopBack(true);

if(mic != null)
{
    mic.setUseEchoSuppression(true);
    stage.addEventListener(Event.ENTER_FRAME, showLevel);
}

function showLevel(e:Event)
{
    micLevel.height = mic.activityLevel * 6;
    //mic.gain = 1;
    //trace(mic.activityLevel);
    prosent.text = "Activity: " + String(mic.activityLevel) + "%";
}

我只需要一些从文本字段“prosent”(有时间限制)中获取最高数字并将其显示在新文本字段中的代码。

如果我不清楚,我很抱歉,但如果有人可以帮助我,我会很高兴!

哈拉尔德

4

2 回答 2

1

启动计时器以重置您的最高级别变量。这将每 5 秒显示一次最高级别。如果您想始终显示一个最高值,您也可以添加一个计时器启动停止按钮。

然后在您的 showLevel 函数中,用于Math.max()获取最高数字(在当前活动和最近最高之间)

var highestLevel:Number = 0;
var timer:Timer = new Timer(5000); // fires every 5 seconds

function initLevels(e:TimerEvent){
  timer.stop(); // you could stop your timer here automatically and then use a button to start again
  highestLevel = 0;  // when timer fires restart your highestLevels var
}

function showLevel(e:Event) {
  highestLevel = Math.max(mic.activityLevel * 6, highestLevel);
  prosent.text = "Activity: " + String(highestLevel) + "%";
}

timer.start();
timer.addEventListener(TimerEvent.TIMER, initLevels);
addEventListener(Event.ENTER_FRAME, showLevel);
于 2012-11-01T22:29:36.837 回答
1

只需创建一个变量,只要micLevel.height值高于它就会更新,例如

var highest:Number = 0;

function showLevel(e:Event):void
{
    if(micLevel.height > highest)
    {
        // The mic level was higher than the previous highest level.
        highest = micLevel.height;

        // Change your other text field to show the value of 'highest'.
        // ..
    }

    prosent.text = "Activity: " + String(mic.activityLevel) + "%";
}
于 2012-11-01T22:20:50.717 回答