kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Hörtest-Anwendung in Javascript - Tonerzeugung

(EN google-translate)

(PL google-translate)

Schließlich wird ein Audio-Stream-Element erzeugt, das stetig einen zu füllenden Buffer bereitstellt, in den der Sampleverlauf geschrieben wird.


<!DOCTYPE html>
<html>
    <head lang="de">
        <meta charset="iso-8859-1">
         <script language:javascript>
            var frequenz = 440;
            var amplitude = 100;

            var zustand = -1; //-1: vor erstem Start, 1: nach erstem Start, 0: nach erstem Stop.

            var context;
            var node;
            var x;
            var data;
            var wert;

            function prozess(e)
            {
                var data = e.outputBuffer.getChannelData(0);
                //2*PI*f*t  == 2*PI*f*(1/Samplefrequenz)*x_test_sample

                for (var i = 0; i < data.length; ++i) 
                {
                    if(zustand==1)
                    {
                        wert = (amplitude/1000.0)*Math.sin(2*Math.PI*frequenz*x/context.sampleRate);
                    }
                    else
                    {
                        wert = 0.0;
                    }
                    data[i] = wert;
                    x++;
                }
            }


            function setzeFrequenz()
            {
                frequenz = document.getElementById("input_frequenz").value;
                document.getElementById("wert_frequenz").innerHTML = frequenz;
            }
            function setzeAmplitude()
            {
                amplitude = document.getElementById("input_amplitude").value;
                document.getElementById("wert_amplitude").innerHTML = amplitude;
            }

            function startstop()
            {
                if(zustand==-1)
                {
                    x=0;
                    context = new (window.AudioContext || window.webkitAudioContext)();

                    //1. Param.: Erlaubte Puffergroessen: 256, 512, 1024, 2048, 4096, 8192, 16384
                    //2. Param.: Anzahl der Input-Kanaele
                    //3. Param.: Anzahl der Output-Kanaele
                    node = context.createScriptProcessor(1024, 0, 1);
                    node.onaudioprocess = function(e) { prozess(e) };
                    node.connect(context.destination); //"play"

                    document.getElementById("startstop").value = "AN";
                    document.getElementById("startstop").style.backgroundColor = "#00FF00";
                    zustand = 1;
                }
                else if(zustand==1)
                {
                    document.getElementById("startstop").value = "AUS";
                    document.getElementById("startstop").style.backgroundColor = "#FF0000";
                    zustand = 0;
                }
                else //if(zustand==0)
                {
                    document.getElementById("startstop").value = "AN";
                    document.getElementById("startstop").style.backgroundColor = "#00FF00";
                    zustand = 1;
                }
            }

        </script>
    </head>
    <body>
        <fieldset>
            <p>
                <label>Frequenz: 
                    <input style="width:400px;" id="input_frequenz"  type="range" min="1" max="20000" value="440" onmousemove="javascript:setzeFrequenz()" />
                <span id="wert_frequenz">440</span>Hz</label>
            </p>
            <br/>
            <p>
                <label>Amplitude: 
                    <input style="width:400px;" id="input_amplitude"  type="range" min="0" max="700" value="100" onmousemove="javascript:setzeAmplitude()" />
                <span id="wert_amplitude">100</span></label>
            </p>
            <p>
                <input id="startstop" type="button" value="AUS" style="background-color: #FF0000" onclick="javascript:startstop()"/>
            </p>
        </fieldset>
    </body>
</html>

Code 0-1: Quelltext.