PlaySound() - Defaultton



  • Hallo,
    ich versuche gerade eine einfach wav-datei mit PlaySound() abzuspielen;

    dazu habe ich mal testweise die datei test.wav unter C:\\test.wav abgelegt;

    mein code sieht momentan so aus:

    #include<iostream>
    #include<windows.h>
    using namespace std;
    
    #pragma comment(lib, "winmm.lib")
    
    PlaySound(TEXT("C:\\test.wav"), NULL, SND_FILENAME | SND_ASYNC);
    cin.get();
    

    allerdings kommt immer nur der 'default-ton', also eine Art Piepston, laut doku heißt das dass test.wav nicht gefunden wurde 😞 .

    aber woran liegt das? der Pfad stimmt und die Syntax ist laut Suchfunktion und doku auch korrekt 😕

    BTW: ich verwende WinVista, Microsoft Visaul C++ 2008 Express Edition

    danke schonmal,
    andi01.



  • Der Code an sich stimmt. Da lässt sich nichts bemaengeln.
    Hast du es schon mal mit einer anderen Datei probiert?
    Und auch die Datei mal in dein Projektverzeichnis kopiert um sie dort auszulesen?



  • BasicMan01 schrieb:

    Hast du es schon mal mit einer anderen Datei probiert?

    ja, mit einer .mp3-datei , aber um gaanz sicher zu gehen dass es nicht an der datei liegt werde is es nch mit einer dritten versuchen 😉

    BasicMan01 schrieb:

    Und auch die Datei mal in dein Projektverzeichnis kopiert um sie dort auszulesen?

    also ich hatte bereits versucht sie ins Debug-Verzeichnis zu legen und dann nur den dateinamen anzugeben, etwas so:

    Dateipfad=Pfad der exe: C:\Users\Admin\Dokumente\Visual Studio\Projects\playsound\Debug

    dann habe ich im Code folgendes geschrieben:

    PlaySound(TEXT("test.wav"), NULL, SND_FILENAME | SND_ASYNC);
    

    naja wie gesagt es kann nur daran liegen dass die datei nciht gefunden wird...

    dadurch ergeben sich natürlich weitere Fragen:

    ➡ wie löst man das eigentlich normalerweise? legt man die datei irgendwo auf die Festplatte oder direkt in den Programmordner?

    ➡ und wenn die Datei im Programmordner liegt: muss ich dann nur den Dateinamen angeben oder den Pfad des ordners oder den der datei?

    ➡ kann PlaySound() auch die mp3-erweiterung oder nur wav?

    ➡ muss ich beim pfad die endung (.wav) mit angeben?

    ➡ muss ich die wav-datei vielleicht irgendwie linken? also so öhnlich wie ne lib meine ich...

    hier noch schnell die Rückgabewerte:

    wenn ich die wav-datei im debugverzeichnis habe und den namen als name.wav angeben gibt getLastError() 0 zurückauch wenn ich die datei irgendwo auf der festplatte habe und den pfad mit doppelten Backslashes angebe, die Funktion gibt immer 1 (erfolgreich) zurück;

    was mich so wundert: wenn er die Datei findet (GetLastErr(): 0 -> sonst 2!) warum spielt er sie denn nicht ab?! 😕

    das kommt sowohl bei mp3 als auch wav...

    danke schinmal,
    andi01.



  • andi01 schrieb:

    wie löst man das eigentlich normalerweise? legt man die datei irgendwo auf die Festplatte oder direkt in den Programmordner?

    ich persoenlich lege alle Ressourcen, die im Programm verwendet werden (Bilder, Sound, Musik, dll ect) in das Projektverzeichnis.

    *.EXE
    /musikordner mit Musik
    /soundordner mit Sound
    /imageorder mit Bildern usw.

    Denke dran, dass du dein Programm vielleicht mal weitergeben willst. Da ist es einfacher, alles in einem Ordner zu haben und die Dateien nicht spaeter umkopieren zu muessen.

    Wenn du das Programm ueber VS2008 compilierst und ausfuehrst, kann es sein, dass du die Datei nicht in den Debug-Ordner sondern in den normalen Quelldatei-Ordner legen musst. Einfach mal probieren.

    andi01 schrieb:

    und wenn die Datei im Programmordner liegt: muss ich dann nur den Dateinamen angeben oder den Pfad des ordners oder den der datei?

    Fuer den oben beschriebenen Fall reicht dann im Programm
    "musikordner\\musikdatei"

    andi01 schrieb:

    kann PlaySound() auch die mp3-erweiterung oder nur wav?

    Da moechte ich mich nicht zu weit aus dem Fenster lehnen zwecks erlaubten Endungen. Aber ich glaube, mp3 zaehlt nicht dazu. Dies war bei mir der Grund, warum ich auf die fmod-Bibliothek zurueckgreife,

    andi01 schrieb:

    muss ich beim pfad die endung (.wav) mit angeben?

    Ja

    andi01 schrieb:

    muss ich die wav-datei vielleicht irgendwie linken? also so öhnlich wie ne lib meine ich...

    Das ist nicht noetig.



  • ok ich habe das Problem inwischen gelöst xDDD
    es lag an der wav-datei weil ber der mp3->wav konvertierung wohl was schiefging, ich habe die datei jetzt neu konvertiert und es geht 🙂 👍

    bleibt noch eine Frage: kann ich es irgendwie schaffen dass auch mp3-dateien abgespielt werden ohne dass ich sie immer manuell nach wav konvertieren muss? gibt es eine Funktion die das kann?

    danke schonmal,
    andi01.



  • mp3 koennen zum Beispiel die mci... Funktionen.

    http://msdn.microsoft.com/en-us/library/dd743586(v=VS.85).aspx

    Ein einfacher Befehl, der sowas macht, ist mir nicht bekannt. Sowas haette sich rumgesprochen 😃

    Ansonsten kannst dir ja auch mal das ansehen

    http://www.fmod.org/



  • ok, jetzt funktioniert alles perfekt 🙂

    danke für die Hilfe,
    andi01.


Anmelden zum Antworten