kramann.info
© Guido Kramann

Login: Passwort:










6.1.1 Audio-Ausgabe

6.1.1 Audio output (EN google-translate)

6.1.1 wyjście audio (PL google-translate)

Vergleiche auch Kapitel 4.3

See also chapter 4.3

Zobacz także rozdział 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 ).

To ensure that the sound generation and detection also can be easily implemented with an Arduino, only Rectangular vibrations taken as a basis and not too high Frequencies used. To easily identify the sounds a ev. later to be able to use small speakers, but they are not used too low frequencies. In addition, the distance of the frequencies is chosen so that they humans can be easily distinguished (Maximize Human Participation).

Aby zapewnić również generowanie i wykrywanie dźwięku można łatwo zaimplementować tylko za pomocą Arduino Wibracje prostokątne przyjmowane jako podstawa i niezbyt wysokie Wykorzystane częstotliwości. Aby łatwo zidentyfikować dźwięki ev. później, aby móc używać małych głośników, ale nie są używane zbyt niskie częstotliwości. Ponadto odległość częstotliwości jest tak dobrana, aby były ludzi można łatwo odróżnić (Maksymalizuj ludzki udział).

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

The basic idea is to work with three frequencies that form a partial overtone series: 700Hz==4*175Hz, 1050Hz==6*175Hz, 1575Hz==9*175Hz.

Podstawową ideą jest praca z trzema częstotliwościami, które tworzą częściową sekwencję wydmową: 700 Hz == 4 * 175 Hz, 1050 Hz == 6 * 175 Hz, 1575 Hz == 9 * 175 Hz.

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

At 44100Hz sample rate, that's 63, 42, and 28 samples per oscillation period.

Przy częstotliwości próbkowania 44100 Hz, to 63, 42 i 28 próbek na okres oscylacji.

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

To have complete control even over the exact number and time duration of the generated waves, streaming technique is used.

Aby mieć pełną kontrolę nad dokładną liczbą i czasem trwania generowanych fal, używana jest technika strumieniowania.

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.

How exactly can these frequencies be implemented with the Arduino? Comp. Arduino Chapter 29, Code 29-2: Triggering sounds via digital outputs on A3, A4, A

Jak dokładnie można zaimplementować te częstotliwości w Arduino? Comp. Arduino Rozdział 29, kod 29-2: Wywoływanie dźwięków przez wyjścia cyfrowe na A3, A4, A

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 6.1.1-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 6.1.1-2: Minimalsistischer Code zur Demonstration der Erzeugung von Rechteckschwingungen.