'compositeur' de morceaux (par fichier ou console) en 'script' avec la fonction beep()

Soyez le premier à donner votre avis sur cette source.

Vue 6 964 fois - Téléchargée 448 fois

Description

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)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
subsonique et disrupteur dimensionnel sont les éléments qui m'ont mis la puce à l'oreille, sans compter que ton poste est arrivé à la seconde 42 ^^.
kishkaya
Messages postés
366
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
17 avril 2008
-
ou tu overclocke le wirestream du beep subsonique. Ensuite t'attques la sortie wireless avec un distrupteur dimensionnel et tu rebbot en compilant dans le kernel32.
Ensuite t'upload a 128MGBPSP sur le noyau !

Enjoy
cs_max12
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014
-
Regarde les API sur la sortie et l'entrée de son sous Windows, tu peux écrire un buffer directement dedans pour sortir les sons que tu veux (mais j'y connais rien, je suis donc pas la référence ! (quoique je compte bien m'y mettre un moment donné, un NetMeeting Like ferait un beau projet de fin de session)

A+
cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
+1

ce programme est trippant :)

rien de plus intelligent à dire, si ce n'est de faire +1 à la remarque de BruNews sur le tonb().
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
13 -
int tonb(char ch)
{
if(ch >= '1' && ch <= '9') return (ch - 48);
else return 1;
}

SVP, retirer cet ENORME exe du zip, inutile car détruit au téléchargement.

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.