utilisation de la fonction Beep de <windows.h> pour jouer des petits morceaux (diatoniques pour l'instant)
le clavier correspond aux touches du piano: 'q' est un sol --> 'j': fa dièse, 'k': sol à l'octave
p: pause. Dans un morceaux, vous allez placer la lettre de la note et la durée (1 == 1 temps, c'est à dire 100 ms)
Vous pouvez taper votre morceau directement dans la console, ou dans le fichier "music.txt". 'd' va jouer une démo
Amusez-vous!!! (vous êtes libres d'enrichir le programme)
Source / Exemple :
//code réalisé par Alberto Bietti
#include <iostream>
#include <fstream>
#include <sstream>
#include <windows.h>
using namespace std;
//fréquences des notes
enum {SOL=200, LA=220, SI=250, DO=265, RE=300, MI=340, FA_DIESE=380, SOL2=400, PAUSE=0};
int tofreq(char ch) //retourne la fréquence d'un note avec le caractère donné
{
switch(ch)
{
case 'Q': case 'q': return SOL;
case 'S': case 's': return LA;
case 'D': case 'd': return SI;
case 'F': case 'f': return DO;
case 'G': case 'g': return RE;
case 'H': case 'h': return MI;
case 'J': case 'j': return FA_DIESE;
case 'K': case 'k': return SOL2;
case 'P': case 'p': return PAUSE;
default: return 0;
}
}
int tonb(char ch)
{
switch(ch)
{
case '1': return 1;
case '2': return 2;
case '3': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case '7': return 7;
case '8': return 8;
case '9': return 9;
default: return 1;
}
}
int main()
{
istream* stream; //pointeur vers la input stream principale
char res;
cout <<"load from file ('a'), demo ('d') or input (else)? "; //choix de la source
cin >> res;
if (res == 'a') stream = new ifstream("music.txt"); //source: fichier 'music.txt'
else if (res == 'd') stream = new istringstream( //source: démo: frère Jacque!! :
"Q2S2D2Q2Q2S2D2Q2D2F2G4D2F2G4G1H1G1F1D2Q2G1H1G1F1D2Q2S2G2Q4S2G2Q4");
else stream = &cin; //source: entrée par l'utilisateur dans la console
char ch;
int freq; //fréquence
int dur; //durée
while (stream->get(ch))
{
freq = tofreq(ch);
if (ch != '\n') {
stream->get(ch);
dur = tonb(ch);
}
else dur = 1;
Beep(freq, 100*dur); //faire un Beep
}
system("pause");
return 0;
}
Conclusion :
Pour changer la source du script du morceau, j'ai utilisé un pointeur vers une input stream, qui pointera soit vers un cin classique, soit vers une ifstream (input file stream) soit vers une istringstream (la source étant une chaine de caractères)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.