Problem mit "PlaySound"



  • Ah. Gut. Jetzt hab ich's verstanden.
    Und mal noch für c++: in c kann man ja mit zb system(("%c", string)) etwas einsetzten. Wie geht das in c++?



  • Kannst du die Frage bitte nochmal so formulieren, daß man sie auch versteht?
    system() kennt keine Format-String, die man einsetzen könnte - das übernimmt einen einfachen String, der den auszuführenden Befehl enthalten sollte. (und ja, die Funktion existiert wie die restliche ANSI-C Standardbibliothek auch unter C++)



  • Ja ok. Also folgendes:

    wenn man zum beispiel den Benutzer des Programmes eine Internetseite öffnen lassen will kann er diese in einem string speichern und man selber kann die dann bei ShellExecute einsetzen

    char internet;
    
    printf("Bitte geben Sie die Adresse einer Seite ein, die Sie besuchen wollen: ");
    scanf("%c", &internet);
    
    ShellExecute(NULL, ("%c", internet), .....bla bla
    

    meine frage ist nun wie man das mit C++ machen kann (und auch wirklich mit C++ und nicht mit C in C++^^

    Aber trotzdem schonmal danke.



  • Also. Ich habe das jetzt ausprobiert und festgestellt das bei allen Klingeltönen außer dem Wecker.wav ein Windows.Fehler.Ton erklingt. Ich weiß echt nicht was ich noch machen soll...=(
    die Ordnerstruktur ist übrigens

    Ordner Wecker
    |-Wecker.exe
    |-Wecker.wav
    |-Imperium.wav

    usw.



  • Ich hab lange nichts mehr mit c++ gemacht und weiß daher nicht ob das stimmt, aber evt. liegt es deiner if abfragerei. Ich hab die mal auf das vereinfacht:

    if(sound==1) { 
    	printf("Wenn das Klingeln ert%cnt, k%cnnen Sie das Klingeln\ndurch das Dr%ccken einer beliebigen Taste beenden.\n", oe, oe, ue); 
    	sleep(timer*60000); 
    	while(!kbhit()) { 
    		PlaySound("Wecker.wav", NULL, SND_FILENAME); 
    	} 
    } else if(sound==2) { 
    	printf("Wenn das Klingeln ert%cnt, k%cnnen Sie das Klingeln\ndurch das Dr%ccken einer beliebigen Taste beenden.\n", oe, oe, ue); 
    	sleep(timer*60000); 
    	while(!kbhit()) { 
    		PlaySound("Imperium.wav", NULL, SND_FILENAME); 
    	} 
    } else if(sound==3) {                       
    	printf("Wenn das Klingeln ert%cnt, k%cnnen Sie das Klingeln\ndurch das Dr%ccken einer beliebigen Taste beenden.\n", oe, oe, ue); 
    	sleep(timer*60000); 
    	while(!kbhit()) { 
    		PlaySound("R2D2.wav", NULL, SND_FILENAME); 
    	} 
    } else if(sound==4) {                       
    	printf("Wenn das Klingeln ert%cnt, k%cnnen Sie das Klingeln\ndurch das Dr%ccken einer beliebigen Taste beenden.\n", oe, oe, ue); 
    	sleep(timer*60000); 
    	while(!kbhit()) { 
    		PlaySound("Schrillen.wav", NULL, SND_FILENAME); 
    	} 
    }
    

    Habs nicht getestet, aber vieleicht hilfts. Wie du aber schon gut erkannt hast wäre ein switch/case viel einfacher und übersichtlicher.

    Gruß Dimo



  • Danke für deine Mühe. Aber das habe ich alles schon ausprobiert. Das Problem ist das nur einen der Töne erkennt. Es gibt auch keine Probleme beim compilieren. Er erkennt die anderen ainfach nicht =(. Ich werde mal versuchen den ersten Ton in "Schrillen.wav" zu ändern und gucken, ob es etwas damit zu tun hat.



  • OK..Das ist seltsam: egal welcher Ton als erstes definiert (bzw in der switch.case sache vorne) steht, wirklich NUR bei Wecker.wav spielt er den richtigen Ton ab. Auch wenn dieser am Ende definiert ist. Ich verstehe das echt nicht mehr =(.



  • Ok, aber dann würde ich drauf tippen, dass es an deinen Sound-dateien liegt und nicht an deinem Code.
    Versuch es doch mal mit anderen Sound-Dateien und schau ob es mit denen funktioniert.



  • 3P!CF41L schrieb:

    Ja ok. Also folgendes:

    wenn man zum beispiel den Benutzer des Programmes eine Internetseite öffnen lassen will kann er diese in einem string speichern und man selber kann die dann bei ShellExecute einsetzen

    char internet;
    
    printf("Bitte geben Sie die Adresse einer Seite ein, die Sie besuchen wollen: ");
    scanf("%c", &internet);
    
    ShellExecute(NULL, ("%c", internet), .....bla bla
    

    meine frage ist nun wie man das mit C++ machen kann (und auch wirklich mit C++ und nicht mit C in C++^^

    Aber trotzdem schonmal danke.

    Nimm dir einen Stringstream und bau dir damit den Anweisungsstring zusammen.
    (Übrigens sind deine printf()/scanf()-Vorlagen auch in der Liga "C in C++" 😉 in "echtem" C++ verwendet man eher cout/cin)



  • CStoll schrieb:

    (Übrigens sind deine printf()/scanf()-Vorlagen auch in der Liga "C in C++" 😉 in "echtem" C++ verwendet man eher cout/cin)

    Das ist ja auch keine C++Anwendung. Die ist absichtlich in C. Ich komme damit besser klar.

    Und es hat dann im übrigen auch funktioniert. Ich habe es dann nochmal mit switch.case probiert und dann hat es geklappt.


Anmelden zum Antworten