Skip to main content
Participant
January 22, 2018
Question

How to making voice answer for flash quiz?

  • January 22, 2018
  • 2 replies
  • 1253 views

can anyone help me? I want to make a flash quiz with a voice answer ... can I use actionsript 2.0 / ActionSCript 3.0? and how?

This topic has been closed for replies.

2 replies

JoãoCésar17023019
Community Expert
Community Expert
January 23, 2018

Hi!

Here is a little fun demo using AS3.

Although the code is big, I tried to keep it simple using the Animate CC timeline a lot. If you take a look at the FLA, you'll see it's kind easy to edit and extend.

Code:

Frame 1:

import flash.display.MovieClip;

import flash.display.SimpleButton;

import flash.events.MouseEvent;

import flash.media.Sound;

import flash.media.SoundChannel;

import flash.media.SoundTransform;

import flash.net.URLRequest;

import flash.utils.setTimeout;

var questionDelay:Number = 1000;

var toWin:uint = 70;

var totalQuestions:uint = 10;

var score:uint = 0;

var highscore:uint = 0;

var questionChannel:SoundChannel = new SoundChannel();

var alternativeChannel:SoundChannel = new SoundChannel();

var bgmChannel:SoundChannel = new SoundChannel();

var sfxChannel:SoundChannel = new SoundChannel();   

var questions:Object =

{

    question0: {correct:2, points:10},

    question1: {correct:0, points:30},

    question2: {correct:0, points:20},

    question3: {correct:3, points:50},

    question4: {correct:1, points:10},

    question5: {correct:3, points:20},

    question6: {correct:2, points:20},

    question7: {correct:3, points:20},

    question8: {correct:1, points:10},

    question9: {correct:1, points:50}

}

var audio:Object =

{

    bgm:

    {

        start:"audios/bgm/Moonshine_Town.mp3",

        ingame:"audios/bgm/Bluebird.mp3",

        end:"audios/bgm/Sour_Tennessee_Red.mp3"

    },

    sfx:

    {

        correct:"audios/sfx/335908__littlerainyseasons__correct.mp3",

        wrong:"audios/sfx/142608__autistic-lucario__error.mp3",

        button:"audios/sfx/264446__kickhat__open-button-1.mp3"

    }

};

// start

function start():void

{

    score = 0;

   

    gotoAndStop("start");   

   

    listeners();

   

    playSound(audio.bgm.start, "bgm", 0.2);

   

    if (highscoreText)

        highscoreText.text = "HIGHSCORE: " + highscore;

}

function startGame():void

{

    score = 0;       

   

    gotoAndStop("ingame");

   

    enableQuestions(true);

   

    readQuestion();

    playSound(audio.bgm.ingame, "bgm", 0.2);

       

    scoreText.text = "SCORE: 0";       

}

// ingame

function changeQuestion(e:SimpleButton):void

{

    var alternativeIndex:uint = uint(e.name.slice(11, e.name.length));

    var current:uint = currentFrame - 3;

    var correct:uint = uint(questions["question" + current].correct);

    var points:uint = uint(questions["question" + current].points);

    var letter:MovieClip = this["letter" + alternativeIndex];

   

    enableQuestions(false);

   

    if (alternativeIndex == correct)

    {

        letter.gotoAndStop("correct");

        score += points;

        scoreText.text = "SCORE: " + String(score);

        playSound(audio.sfx.correct, "sfx");

    }       

    else

    {

        letter.gotoAndStop("wrong");

        playSound(audio.sfx.wrong, "sfx");

    }

   

    setTimeout(function():void

    {

        if (current < totalQuestions - 1)

        {

            nextFrame();

            readQuestion();

            enableQuestions(true);

            letter.gotoAndStop("normal");

        }

        else

        {

            playSound(audio.bgm.end, "bgm", 0.2);

           

            if (score >= toWin)

            {

                gotoAndStop("win");

                setWin();

            }

               

            else

            {

                gotoAndStop("lose");

                setLose();

            }               

        }       

    },

    questionDelay);

}

function readQuestion():void

{

    playSound("audios/questions/question_" + (currentFrame - 3) + "/question.mp3", "question");

}

function readAlternative(index:uint):void

{

    playSound("audios/questions/question_" + (currentFrame - 3) + "/alternative_" + index + ".mp3", "alternative");

}

// end

function setWin():void

{

    var percentage:Number = (score - toWin) / (totalPoints() - toWin);

   

    star0.visible = false;

    star1.visible = false;

    star2.visible = false;

    star3.visible = false;

    star4.visible = false;   

   

    if (percentage < 0.2)

        stars(1);

    else if (percentage >= 0.2 && percentage < 0.4)

        stars(2);

    else if (percentage >= 0.4 && percentage < 0.6)

        stars(3);

    else if (percentage >= 0.6 && percentage < 0.8)

        stars(4);

    else if (percentage > 0.8)

        stars(5);

   

    if (highscore < score)

    {

        highscore = score;

        newRecord.visible = true;

    }

    else

        newRecord.visible = false;

       

    finalScoreText.text = String(score);

    listeners();

}

function setLose():void

{

    finalScoreText.text = String(score);

    listeners();

}

function stars(index):void

{

    for (var i = 0; i < index; i++)

        this["star" + i].visible = true;

}

function totalPoints():uint

{

    var sum:uint = 0;

   

    for (var key:String in questions)

        sum += uint(questions[key].points);

   

    return sum;

}

// common

function mouseHandler(e:MouseEvent):void

{

    if (e.type == MouseEvent.MOUSE_DOWN)

    {

        if (e.currentTarget == startButton)

        {

            playSound(audio.sfx.button, "sfx");

            startGame();

        }                           

        else if (e.currentTarget == homeButton)

            start();

        else if (e.currentTarget == restartButton)

            startGame();

        else if (e.currentTarget.name.indexOf("alternative") == 0)

            changeQuestion(e.currentTarget as SimpleButton);

    }

    else if (e.type == MouseEvent.MOUSE_OVER)

    {       

        if (e.currentTarget.name.indexOf("alternative") == 0)

            readAlternative(uint(e.currentTarget.name.slice(11, e.currentTarget.name.length)));

    }

}

function playSound(path:String, channelType:String, volume:Number = 1, start:Number = 0, loops:int = 0):void

{

    var sound:Sound = new Sound();   

    var sTransform:SoundTransform = new SoundTransform();

   

    sound.load(new URLRequest(path));   

   

    if (channelType == "bgm")

    {

        bgmChannel.stop();

        bgmChannel = sound.play(start, loops);

        sTransform.volume = volume;

        bgmChannel.soundTransform = sTransform;

    }       

    else if (channelType == "sfx")

    {

        sfxChannel.stop();

        sfxChannel = sound.play(start, loops);

        sTransform.volume = volume;

        sfxChannel.soundTransform = sTransform;

    }

    else if (channelType == "question")

    {

        questionChannel.stop();

        questionChannel = sound.play(start, loops);

        sTransform.volume = volume;

        questionChannel.soundTransform = sTransform;

    }

    else if (channelType == "alternative")

    {

        alternativeChannel.stop();

        alternativeChannel = sound.play(start, loops);

        sTransform.volume = volume;

        alternativeChannel.soundTransform = sTransform;

    }

}

function enableQuestions(enable:Boolean):void

{

    if (enable)

    {

        if (alternative0 && !alternative0.hasEventListener(MouseEvent.MOUSE_DOWN))

        {

            setTimeout(function():void

            {

                alternative0.mouseEnabled = true;

                alternative1.mouseEnabled = true;

                alternative2.mouseEnabled = true;

                alternative3.mouseEnabled = true;

               

                alternative0.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

                alternative1.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

                alternative2.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

                alternative3.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

               

                alternative0.addEventListener(MouseEvent.MOUSE_OVER, mouseHandler);

                alternative1.addEventListener(MouseEvent.MOUSE_OVER, mouseHandler);

                alternative2.addEventListener(MouseEvent.MOUSE_OVER, mouseHandler);

                alternative3.addEventListener(MouseEvent.MOUSE_OVER, mouseHandler);

            },

            questionDelay * 2);           

        }       

    }

    else

    {

        alternative0.mouseEnabled = false;

        alternative1.mouseEnabled = false;

        alternative2.mouseEnabled = false;

        alternative3.mouseEnabled = false;

       

        alternative0.removeEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

        alternative1.removeEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

        alternative2.removeEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

        alternative3.removeEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

       

        alternative0.removeEventListener(MouseEvent.MOUSE_OVER, mouseHandler);

        alternative1.removeEventListener(MouseEvent.MOUSE_OVER, mouseHandler);

        alternative2.removeEventListener(MouseEvent.MOUSE_OVER, mouseHandler);

        alternative3.removeEventListener(MouseEvent.MOUSE_OVER, mouseHandler);

    }

}

function listeners():void

{   

    if (startButton && !startButton.hasEventListener(MouseEvent.MOUSE_DOWN))

        startButton.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

   

    if (homeButton && !homeButton.hasEventListener(MouseEvent.MOUSE_DOWN))

        homeButton.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

   

    if (restartButton && !restartButton.hasEventListener(MouseEvent.MOUSE_DOWN))

        restartButton.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandler);

}

Frame2:

stop();

start();

FLA download:

animate_cc_as3_super_quiz_game.zip - Google Drive

Preview:

I hope it can help you.

Regards,

JC

Participant
January 28, 2018

hi JoãoCésar thank you very much for the answer. this I can save as one of my records. but what I want is when there is a written problem that is answered by our voice / user by saying the answer. can it be made that way

JoãoCésar17023019
Community Expert
Community Expert
January 28, 2018

Got it.

You can still make use of the quiz game sample above.

But you're gonna have to solve two problems:

- Record the audio, wich can be done like described in the following links:

Adobe Flash Platform * Capturing sound input

https://code.tutsplus.com/tutorials/create-a-useful-audio-recorder-app-in-actionscript-3--active-5836

- Compare the voice answer with the correct audio for the question. This one is harder, but I guess it's not impossible.

Robert Mc Dowell
Legend
January 22, 2018

You can use as2 or as3, it's up to your knowledge and taste.

make some research on internet like "audio quiz actionscript" or "quiz with sound actionscript"

it's very simple to do it, just associate any voice recorded (unless you are looking for TTS voice than reproduce an written answer which is another story) with Sound object the play it when needed