kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Audio-Ausgabe

(EN google-translate)

(PL google-translate)

Vergleiche auch Kapitel 4.3

Um zu gwährleisten, dass die Tonerzeugung und -erfassung auch leicht mit einem Arduino umgesetzt werden kann, werden nur Rechteckschwingungen als Grundlage genommen und nicht zu hohe Frequenzen verwendet. Um die Töne leicht identifizieren und ev. später einmal kleine Lautsprecher verwenden zu können, werden aber auch nicht zu niedrige Frequenzen verwendet. Zudem wird der Abstand der Frequenzen so gewählt, dass sie durch den Menschen sehr leicht unterschieden werden können (Maximize Human Participation ).

Grundidee ist es, mit drei Frequenzen zu arbeiten, die in eine partielle Obertonreihe bilden: 700Hz==4*175Hz, 1050Hz==6*175Hz, 1575Hz==9*175Hz.

Bei 44100Hz Abtastrate sind das 63, 42 und 28 Samples pro Schwingungsperiode.

Um eine vollständige Kontrolle auch über die genaue Anzahl und zeitliche Dauer der erzeugten Wellen zu haben, wird Streaming-Technik verwendet.

Wie genau lassen sich diese Frequenzen mit dem Arduino umsetzen? Vergl. Arduino Kapitel 29, Code 29-2: Auslösen der Töne über digitale Ausgänge bei A3, A4, A5.

Konfiguration von Timer 1 im CLC-Mode:
OCR1A = 8000000/f    - 1 
OCR1A = 8000000/700  - 1 = 11427,57, real erzeugt: f1=fclk/(2*N*(OCR1A+1))=16000000/(2*1*(11428+1)) = 699,97Hz 
OCR1A = 8000000/1050 - 1 = 7618,05,  real erzeugt: f2=fclk/(2*N*(OCR1A+1))=16000000/(2*1*(7618+1))  = 1050,01Hz
OCR1A = 8000000/1575 - 1 = 5078,37,  real erzeugt: f3=fclk/(2*N*(OCR1A+1))=16000000/(2*1*(5078+1))  = 1575,11Hz

Code 0-1: Notiz zur Umsetzung auf einem Arduino-Micro mit Timer 1.

<!DOCTYPE html>
<html>
    <head lang="de">
        <meta charset="iso-8859-1">
         <script language:javascript>
            var ZAEHLER  = 0;

            //Samplingrate: 44100
            //Periode für 700Hz   entspricht DZ=63 Zählschritten.
            //Periode für 1050Hz  entspricht DZ=42 Zählschritten.
            //Periode für 1575Hz  entspricht DZ=28 Zählschritten.

            var DZ = 63;
            //var DZ = 42;
            //var DZ = 28;

            function prozess(e)
            {
                var data = e.outputBuffer.getChannelData(0);

                for (var i = 0; i < data.length; ++i) 
                {
                    if(ZAEHLER<14)
                        data[i] = 0.5;
                    else
                        data[i] = 0.0;
                    ZAEHLER++;
                    ZAEHLER%=DZ;
                }
            }

            function initialisieren()
            {
                    var 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
                    var node = context.createScriptProcessor(1024, 0, 1);
                    node.onaudioprocess = function(e) { prozess(e) };
                    node.connect(context.destination); //"play"
            }

            initialisieren();

      </script>
    </head>
    <body>
    </body>
</html>

Code 0-2: Minimalsistischer Code zur Demonstration der Erzeugung von Rechteckschwingungen.