beep system



  • hi ich programmiere gerade eine beep/keyboard ähnliches teil zum üben es funtz zwar aber aus irgenteingrund daurt es immer before ich wieder ein sound machen kann... hier is das programm, was mach ich falsch oder warum is das so?:

    int main()
    {
    	if (kbhit() && (getch()==27))
    	{
    		return 0;
    	}
    	if (kbhit() && (getch()==59))
    	{
    		Beep(200,150);
    	}
    	if (kbhit() && (getch()==60))
    	{
    		Beep(400,150);
    	}
    	if (kbhit() && (getch()==61))
    	{
    		Beep(600,150);
    	}
    	return main();
    }
    


  • tingle schrieb:

    ...

    1. Nutze schleifen, hier sind rekursive Aufrufe fehl am Platz.
    2. main sollte niemals im Programmcode aufgerufen werden.
    3. Wird in einem Singlethread-Programm jeder Aufruf linear ausgeführt (Sprich ein Aufruf blockiert bis er fertig ist den eigentlichen Programmfluß). Du solltest dir dirs vor allem mal bezüglich deiner vielen Funktionsaufrufe in deinen ifs überlegen (zumal hier ein switch ohnehin besser wäre). Spiel mal im Gedanken durch was es für dein Programm bedeutet...

    cu André



  • void meinthread (void *parameter)
    {
      Beep (((std::pair *) parameter)->first, ((std::pair *) parameter)->second);
    }
    //----------------------------------------
    
    int main ()
    {
    std::pair </*var1*/, /*var2*/> Ton;
    while (kbhit ())
    {
    switch (getch ())
      {
          case 'C':
            Ton.first = tonhoehe;
            Ton.second = tonlaenge;
            _beginthread (NULL, meinthread, (void *) &bla, 0); //bin mir hier nicht mehr ganz sicher ^^
    //außerdem wird es auch sehr viel bessere varianten geben... vll sind if else konstrukte auch besser - da kann man wenigstens variablen drin deklarieren
            break;
    //etc
          default:
            return EXIT_SUCCESS;
      }
    };
    }
    


  • ah danke dann mach ichs so ^^ noch ne frage ich will das alles übern numpad machen und nicht über F1,F2,F3, ect... was sind die zahlen bzw wo find ich die zahlen für die keys?



  • in der msdn glaub ich...
    ansonsten einfach so:

    while (kbhit ())
    {
    std::cout << getch () std::endl;
    Sleep (100);
    };
    

    dann merkste dir, was du drückst und was auf der konsole erscheint ^^ geht am schnellsten - allerdings wird das ja meist über defines bzw const int`s gemacht... also hast du dann nur den wert - das sollte sich zwar die nächsten tage nicht gleich ändern aber doof isses trotzdem ^^



  • habs hingekriegt ^^ ma ne andere frage ich brauch ein if comparison das check ob das was die person eingibt eine zahl is oder nicht:

    int main()
    {
    	cout << "-----------------------------------\n";
    	cout << "---- Tingle's Frequency Tester ----\n";
    	cout << "-------- Press Esc to Exit --------\n";
    	cout << "-----------------------------------\n\n";
    	int b;
    	int a;
    	b = 1;
    	while (b=1)
    	{
    			cout << "Please enter a Frequency: ";
    			cin >> a;
    			Beep (a,300);
    			cout << "\nBeep at " << a << " Frequency\n\n";
    	}
        return 0;
    }
    

    ich will das da ein if is ob a eine nummer is oder ein buchstabe und wenn es was anderes is als eine nummer soll es eine nachricht bringen also ein error



  • mm i got it but what can i do in the if statment to check if int a is a number because when ever i typ in letter my programm starts going wild

    int main()
    {
    	cout << "-----------------------------------\n";
    	cout << "---- Tingle's Frequency Tester ----\n";
    	cout << "-----------------------------------\n\n";
    	int b;
    	int a;
    	b = 1;
    	while (b=1)
    	{
    			cout << "Enter a Frequency: ";
    			cin >> a;
    			if (a == )
    			{
    			Beep (a,300);
    			cout << "\nBeep at " << a << " Frequency\n\n";
    			}
    			else
    			{
    				cout << "\nError :: Not a legal variable\n\n";
    			}
    	}
        return 0;
    }
    


  • if (cin.fail()){
      cout << "An error occured!" << endl;
      cin.clear();
    }
    

    http://www.cppreference.com/cppio/index.html



  • thx it works but no it doesnt now the message comes but it loops in an error for some reson take a look:

    #include "stdafx.h"
    using namespace std;
    
    int main()
    {
    	cout << "-----------------------------------\n";
    	cout << "---- Tingle's Frequency Tester ----\n";
    	cout << "-----------------------------------\n\n";
    	int b;
    	int a;
    	b = 1;
    	while (b=1)
    	{
    			cout << "Enter a Frequency: ";
    			cin >> a;
    			if (a >= 0)
    			{
    			Beep (a,300);
    			cout << "\nBeep at " << a << " Frequency\n\n" << endl;
    			}
    			if (cin.fail())
    			{
    				cout << "Error, only numbers are legal\n\n" << endl;
    				cin.clear();
    			}
    	}
        return 0;
    }
    


  • ah nevermind i know why because it keeps the integer saved in a... how to i clear



  • #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	cout << "-----------------------------------\n"
    	     << "---- Tingle's Frequency Tester ----\n"
    	     << "-----------------------------------\n\n";
    	int a;
    	while (true)
    	{
    			cout << "Enter a Frequency (-1 to quit): ";
    			cin >> a;
    			if (cin.fail())
    			{
    				cout << "Error, only numbers are legal\n\n" << endl;
    				cin.clear();
    			}
    			else if (a >= 0)
    			{
    			  Beep (a,300);
    			  cout << "\nBeep at " << a << " Frequency\n\n" << endl;
    			}
                            else
                            { 
                              if (a == -1) break;
                              cout << "Only numbers greater or equal than zero allowed\n\n" << endl;
                            }
    	}
    }
    


  • nope as soon as you typ in a number it loops/crashes



  • um i mean character



  • cin.ignore(); may help. Or cin.ignore(1000);

    Or something like string sth; cin >> sth; just to get rid of the rest. But it is unclean.



  • @tingle_: deutsch zu schreiben wurde wohl auf die Dauer langweilig? ; )



  • lol^^ 😛 sry^^ ich bin bilangual auf gewachsen ich merks meinstens garnicht vorallem im i-net hehehe



  • ^^ np - mein englisch is gerad noch gut genug um das zu verstehen ;o) aber in nem deutschen forum isses wahrscheinlich besser, deutsch zu schreiben (man bekommt schneller antworten etc ^^)



  • ^^, mal ne frage ich check das ganz net mit switch und so... könnt mir jemand ein template(skellet) her schreiben für das was ich machen will? das sind die tasten codes die töne erzeugen sollen:
    (alles nummpads ^^)
    0 = 48
    1 = 49
    2 = 50
    3 = 51
    4 = 52
    5 = 53
    6 = 54
    7 = 55
    8 = 56
    9 = 57



  • ah egal ich habs ^^ funtzt ja supper... nur ne frage gibt es ein command das die aktuele zeile gelöscht wird bzw das was angezeigt wird? weil 20x \b funtzt nur in so fern wie nix länger is als das vorherige



  • das was angezeigt wird

    versteh die frage nicht -.-

    std::cout << "text" << varialbe << /*...*/ <<  std::endl;
    

    geht zum anzeigen eigtl immer ganz gut fand ich ^^
    zum zeile löschen gibts mit sicherheit auch was - aber da müsstest du wahrscheinlich mal unter improved console gucken - hab ich kA von ^^



  • juhuu^^ hab das programm fertig sogar mitn intigierten lied "Popcorn" xD hier is download link und source:

    http://filebeam.de/temp/Tingles_Sound_Pad.exe

    #include "stdafx.h"
    using namespace std;
    
    #define C 65
    #define D 73
    #define E 82
    #define F 87
    #define G 99
    #define A 110
    #define H 123
    #define Cs 70
    #define Ds 78
    #define Fs 92
    #define Gs 104
    #define As 117
    
    int main()
    {
    	int a;
    	int b;
    	int c;
    	b = 150;
    	a = 1;
    	c = 1;
    	cout << "---------------------------" << endl;
    	cout << "---- Tingles Sound Pad ----" << endl;
    	cout << "---------- v3.05 ----------" << endl << endl;
    	cout << "Keys:" << endl << endl;
    	cout << "ESC - Exit" << endl << endl;
    	cout << "F1 - Short Tone" << endl;
    	cout << "F2 - Normal Tone" << endl;
    	cout << "F3 - Long Tone" << endl;
    	cout << "F4 - Very Long Tone" << endl;
    	cout << "F5 - Extra Long Tone" << endl << endl;
    	cout << "F6 - Octav 2 and 3" << endl;
    	cout << "F7 - Octav 4 and 5" << endl;
    	cout << "F8 - Octav 6 and 7" << endl << endl;
    	cout << "F9 - Play Popcorn Song" << endl << endl << endl << endl;
    	while (_kbhit() && a || 1)
    	{
    		switch(_getch ())
    		{
    		case 27:
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bExiting... Good bye               ";
    			Sleep(2000);
    			return 0;
    			break;
    		case 59:
    			b = 50;
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bSet to Short Tone               ";
    			break;
    		case 60:
    			b = 150;
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bSet to Normal Tone               ";
    			break;
    		case 61:
    			b = 250;
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bSet to Long Tone               ";
    			break;
    		case 62:
    			b = 350;
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bSet to Very Long Tone               ";
    			break;
    		case 63:
    			b = 450;
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bSet to Extra Long Tone               ";
    			break;
    		case 64:
    			c = 1;
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bSet to Octav 2 and 3              ";
    			break;
    		case 65:
    			c = 4;
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bSet to Octav 4 and 5               ";
    			break;
    		case 66:
    			c = 16;
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bSet to Octav 6 and 7               ";
    			break;
    		case 67:
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bPlaying Popcorn Song               ";
    				Beep(H*c,b);
    				Sleep(100);
    				Beep(A*c,b);
    				Sleep(100);
    				Beep(H*c,b);
    				Sleep(100);
    				Beep(Fs*c,b);
    				Sleep(100);
    				Beep(D*c,b);
    				Sleep(100);
    				Beep(Fs*c,b);
    				Sleep(100);
    				Beep(62*c,b);
    				Sleep(300);
    				Beep(H*c,b);
    				Sleep(100);
    				Beep(A*c,b);
    				Sleep(100);
    				Beep(H*c,b);
    				Sleep(100);
    				Beep(Fs*c,b);
    				Sleep(100);
    				Beep(D*c,b);
    				Sleep(100);
    				Beep(Fs*c,b);
    				Sleep(100);
    				Beep(62*c,b);
    				Sleep(300);
    				Beep(H*c,b);
    				Sleep(100);
    				Beep(Cs*2*c,b);
    				Sleep(100);
    				Beep(D*2*c,b);
    				Sleep(100);
    				Beep(Cs*2*c,b);
    				Sleep(100);
    				Beep(D*2*c,b);
    				Sleep(100);
    				Beep(H*c,b);
    				Sleep(100);
    				Beep(Cs*2*c,b);
    				Sleep(100);
    				Beep(H*c,b);
    				Sleep(100);
    				Beep(Cs*2*c,b);
    				Sleep(100);
    				Beep(A*c,b);
    				Sleep(100);
    				Beep(H*c,b);
    				Sleep(100);
    				Beep(A*c,b);
    				Sleep(100);
    				Beep(Fs*c,b);
    				Sleep(100);
    				Beep(H*c,b);
    				Sleep(100);
    				cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bPopcorn Song stoped               ";
    				break;
    		case 121:
    			Beep(65*c,b);
    			break;
    		case 115:
    			Beep(69*c,b);
    			break;
    		case 120:
    			Beep(73*c,b);
    			break;
    		case 100:
    			Beep(78*c,b);
    			break;
    		case 99:
    			Beep(82*c,b);
    			break;
    		case 118:
    			Beep(87*c,b);
    			break;
    		case 103:
    			Beep(92*c,b);
    			break;
    		case 98:
    			Beep(99*c,b);
    			break;
    		case 104:
    			Beep(104*c,b);
    			break;
    		case 110:
    			Beep(110*c,b);
    			break;
    		case 106:
    			Beep(117*c,b);
    			break;
    		case 109:
    			Beep(123*c,b);
    			break;
    		case 113:
    			Beep(130*c,b);
    			break;
    		case 50:
    			Beep(139*c,b);
    			break;
    		case 119:
    			Beep(147*c,b);
    			break;
    		case 51:
    			Beep(156*c,b);
    			break;
    		case 101:
    			Beep(165*c,b);
    			break;
    		case 114:
    			Beep(175*c,b);
    			break;
    		case 116:
    			Beep(196*c,b);
    			break;
    		case 54:
    			Beep(208*c,b);
    			break;
    		case 122:
    			Beep(220*c,b);
    			break;
    		case 55:
    			Beep(233*c,b);
    			break;
    		case 117:
    			Beep(247*c,b);
    			break;
    		case 53:
    			Beep(185*c,b);
    			break;
    		default:
    			cout << "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bUnknow Key...               ";
    		}
    	}
    	return 0;
    }
    

Anmelden zum Antworten