virtuelles Klavier durch beep()



  • Hallo,
    ich habe vor einer woche angefangen c - Programmieren zu lernen.
    Heute habe ich mir ein virtuelles Klavier programiert:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
    char Eingabe;
    
    printf("Play The Piano v 1.0 by Orkan\n");
    printf("Press any key to start\n");
    
    Eingabe=getch();                      
    
     printf("How to Play the Piano:\n|  | | | |  |  | | | | | |  |   |\n"
                                    "|  | | | |  |  | | | | | |  |   |\n"
                                    "|  |2| |3|  |  |5| |6| |7|  |   |\n"
                                    "|  |_| |_|  |  |_| |_| |_|  |   |\n"
                                    "|   |   |   |   |   |   |   |   |\n"
                                    "| q | w | e | r | t | z | u | i |\n"
                                    "|___|___|___|___|___|___|___|___|\n");
    while (1)
    {
    
          Eingabe=getch();
    
                  switch(Eingabe)
                  {
    case 'q': beep(264,200); //c
    break;
    case '2': beep(275,200); //cis, des
    break;
    case 'w': beep(297,200); //d 
    break;
    case '3': beep(317,200); //dis, es
    break;
    case 'e': beep(330,200); //e
    break;
    case 'r': beep(352,200); //f
    break;
    case '5': beep(367,200); //fis, gis
    break;
    case 't': beep(396,200); //g
    break;
    case '6': beep(422,200); //gis, as
    break;
    case 'z': beep(440,200); //a
    break;
    case '7': beep(457,200); //ais, b
    break;
    case 'u': beep(495,200); //h
    break;
    case 'i': beep(528,200); //c
    break;
    }
    }
    system("PAUSE");
    return 0;
    }
    

    Allerdings wollte ich es so modifizieren, dass der Ton so lange abgespielt wird, wie die Taste gedrückt wird.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int main(int argc, char *argv[])
    {
    char Eingabe;
    
    struct tm *Zeit;
    long anf;
    long end;
    long dif;
    
    dif = (anf-end)* (-1);
    
    printf("Play The Piano v 1.0 by Orkan\n");
    printf("Press any key to start\n");
    
    Eingabe=getch();                      
     printf("How to Play the Piano:\n|  | | | |  |  | | | | | |  |   |\n"
                                    "|  | | | |  |  | | | | | |  |   |\n"
                                    "|  |2| |3|  |  |5| |6| |7|  |   |\n"
                                    "|  |_| |_|  |  |_| |_| |_|  |   |\n"
                                    "|   |   |   |   |   |   |   |   |\n"
                                    "| q | w | e | r | t | z | u | i |\n"
                                    "|___|___|___|___|___|___|___|___|\n");
    while (1)
    {
    
          Eingabe=getch();
    
              time(&anf);
                  switch(Eingabe)
                  {
    case 'q': /*if(hier benötige ich eine funktion die erkennt ob ich die taste losgelassen habe){ time(&end);}*/
    
    beep(264,dif*100); //c
    break;
    .
    .
    .
    

    so in etwa ist mein Idee

    Ah noch ein frage:
    stimmt es das mehrere beep()s nicht gleichzeitig abgespielt werden können? (das habe ich i wo im internet gelesen)
    und falls nein: wie könnte man sowas hinbekommen?

    ich bitte um Hilfe

    mfg orkan 🙂



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Das 1. Programm funktioniert schon nicht wie du es möchtest.

    Bei while (Eingabe = 'q') ist das = eine Zumweisung und kein Vergleich.
    Eingabe ist dann 'q'.

    Dein Vergleich if(Eingabe == 'q','w','e','r','t','z','u','i','2','3','5','6','7') funktioniert so nicht in C.
    Du musst mit jedem Wert einzeln vergleichen und mit && und/oder || logisch verknüpfen.
    (den Vergleich brauchst du auch nicht, macht ja schon switch)

    Soweit ich das noch weiß, blockiert beep das Programm solange es piept.

    Und das ganze ist höchst Systemabhängig, weshalb der Forumbot schon zugeschlagen hat.



  • nachdem ich aber den 1. quellcode kompilirt hatte funktionierte alles ohne probleme und auch so wie ich es wollte.

    Edit:
    hab jez erst verstanden was du meintest^^
    hab den quellcode jetzt verbessert.



  • orkork1 schrieb:

    nachdem ich aber den 1. quellcode kompilirt hatte funktionierte alles ohne probleme und auch so wie ich es wollte.

    Aber immer nur den selben Ton ('q').

    orkork1 schrieb:

    hier die .exe:
    [url]
    http://ul.to/bi9xcpck
    [/url]

    Du glaubst doch nicht, dass hier irgend jemand eine EXE aus obskuren Quellen runterlädt und ausführt.

    Ich kann mit exe Dateien auch nichts anfangen. 🙂



  • hast recht
    kannst du mir aber mit meinem problem weiterhelfen?

    Edit:
    die 1. version hat keinerlei probleme gemacht ich konnte also jede note spielen nicht nur 'q'.
    habs jetzt zwar umgeändert - sieht so auch schöner aus - aber das ergebnis ist das selbe.


Anmelden zum Antworten