Ich möchte mich in diesem Tutorial mit der Windows-Funktion Beep beschäftigen.
Diese Funktion lässt den SystemSpeaker einen Ton mit einer bestimmten Frequenz und für eine bestimmte Dauer erklingen.
== Gerüst ==
Hierzu ist
erforderlich. Außerdem importiert ihr iostream und verwenden den namespace std für Ausgaben in der Konsole.
Jetzt bestimmt ihr die Frequenz der Töne als const int, weil sie ja nicht verändert werden müssen.
== Musiklehre ==
Wichtig ist zu wissen, dass die Hälfte einer Frequenz, der gleiche Ton eine Oktave tiefer, und, dass das Doppelte der Frequenz eine Oktave höher ist.
Wenn man die Frequenz selber berechnen möchte, muss man die 12. Wurzel aus 2 mit der Frequenz des Tones, der eine halbe Stufe unter dem gesuchten Ton liegt multiplizieren.
Ein Beispiel:
- Ton A = 440Hz (ein normal temperierte Klaviersaite des Tons A schwingt mit dieser Frequenz (es kann auch mit der Hälfte oder dem Doppelten gerechnet werden))
- 12. Wurzel aus 2 * Frequenz des Tones = Halbton höher (Ais) = 466
- beliebig oft wiederholen
== Frequenzen ==
Also, für diejenigen, die die Frequenzen nicht selber berechnen möchten:
Alles anzeigen
Was die Variable Takt soll, könnt ihr euch sicherlich denken.
Recht praktisch ist, jeden Beep so zu gestalten:
So ertönt der Ton C1 als Viertelnote.
Wieder der Ton C, allerdings doppelt so lang und eine Oktave höher.
Und nochmal der Ton C, diesmal jedoch 4 Mal so lang und 2 Oktaven höher.
Um einen Ton eine Oktave niedriger erklingen zu lassen, einfach das * Zeichen mit / ersetzen.
Eventuell ist es erforderlich, das ihr hinter einen jeden Beep Aufruf das Programm kurz mit Sleep(1); anhalten und danach weiterlaufen lassen, beispielsweise bei 16tel Noten.
Ihr könnt ja mal Probieren "Alle meine Entchen" zu programmieren.
== Beispiel Tetris ==
Hier noch der Sourcecode von Tetris.
Alles anzeigen
Diese Funktion lässt den SystemSpeaker einen Ton mit einer bestimmten Frequenz und für eine bestimmte Dauer erklingen.
== Gerüst ==
Hierzu ist
erforderlich. Außerdem importiert ihr iostream und verwenden den namespace std für Ausgaben in der Konsole.
Jetzt bestimmt ihr die Frequenz der Töne als const int, weil sie ja nicht verändert werden müssen.
== Musiklehre ==
Wichtig ist zu wissen, dass die Hälfte einer Frequenz, der gleiche Ton eine Oktave tiefer, und, dass das Doppelte der Frequenz eine Oktave höher ist.
Wenn man die Frequenz selber berechnen möchte, muss man die 12. Wurzel aus 2 mit der Frequenz des Tones, der eine halbe Stufe unter dem gesuchten Ton liegt multiplizieren.
Ein Beispiel:
- Ton A = 440Hz (ein normal temperierte Klaviersaite des Tons A schwingt mit dieser Frequenz (es kann auch mit der Hälfte oder dem Doppelten gerechnet werden))
- 12. Wurzel aus 2 * Frequenz des Tones = Halbton höher (Ais) = 466
- beliebig oft wiederholen
== Frequenzen ==
Also, für diejenigen, die die Frequenzen nicht selber berechnen möchten:
Quellcode
Was die Variable Takt soll, könnt ihr euch sicherlich denken.
Recht praktisch ist, jeden Beep so zu gestalten:
So ertönt der Ton C1 als Viertelnote.
Wieder der Ton C, allerdings doppelt so lang und eine Oktave höher.
Und nochmal der Ton C, diesmal jedoch 4 Mal so lang und 2 Oktaven höher.
Um einen Ton eine Oktave niedriger erklingen zu lassen, einfach das * Zeichen mit / ersetzen.
Eventuell ist es erforderlich, das ihr hinter einen jeden Beep Aufruf das Programm kurz mit Sleep(1); anhalten und danach weiterlaufen lassen, beispielsweise bei 16tel Noten.
Ihr könnt ja mal Probieren "Alle meine Entchen" zu programmieren.
== Beispiel Tetris ==
Hier noch der Sourcecode von Tetris.
Quellcode
- #include <windows.h>
- #include <iostream>
- using namespace std;
- const int C = 261;
- const int Cis = 277;
- const int D = 293;
- const int Dis = 311;
- const int E = 329;
- const int F = 349;
- const int Fis = 369;
- const int G = 391;
- const int Gis = 415;
- const int A = 440;
- const int Ais = 466;
- const int H = 493;
- const int Takt = 1700;
- int main() {
- cout << "Tetris" << endl << " (Enter dr" << (unsigned char)129 << "cken um fortzufahren)";
- getchar();
- while (1) {
- Sleep(Takt / 4);
- Beep(E * 2, Takt / 4);
- Beep(H * 1, Takt / 8);
- Beep(C * 2, Takt / 8);
- Beep(D * 2, Takt / 4);
- Beep(C * 2, Takt / 8);
- Beep(H * 1, Takt / 8);
- Beep(A * 1, Takt / 4);
- Beep(A * 1, Takt / 8);
- Beep(C * 2, Takt / 8);
- Beep(E * 2, Takt / 8);
- Beep(E * 2, Takt / 8);
- Beep(D * 2, Takt / 8);
- Beep(C * 2, Takt / 8);
- Beep(H * 1, Takt / 2.5);
- Beep(C * 2, Takt / 8);
- Beep(D * 2, Takt / 4);
- Beep(E * 2, Takt / 4);
- Beep(C * 2, Takt / 4);
- Beep(A * 1, Takt / 4);
- Beep(A * 1, Takt / 4);
- Sleep(Takt / (8 / 3));
- Beep(D * 2, Takt / 3.25);
- Beep(F * 2, Takt / 8);
- Beep(A * 2, Takt / 8);
- Beep(A * 2, Takt / 8);
- Beep(G * 2, Takt / 8);
- Beep(F * 2, Takt / 8);
- Beep(E * 2, Takt / 3);
- Beep(C * 2, Takt / 8);
- Beep(E * 2, Takt / 8);
- Beep(E * 2, Takt / 8);
- Beep(D * 2, Takt / 8);
- Beep(C * 2, Takt / 8);
- Beep(H * 1, Takt / 4);
- Beep(H * 1, Takt / 8);
- Beep(C * 2, Takt / 8);
- Beep(D * 2, Takt / 4);
- Beep(E * 2, Takt / 4);
- Beep(C * 2, Takt / 4);
- Beep(A * 1, Takt / 4);
- Beep(A * 1, Takt / 4);
- }
- return 0;
- }
17.729 mal gelesen