PlaySound Frage ...



  • ich habe ( ispiriert von einem Ähnlichem Post ) ein "playSound" Programm geschrieben ...
    so siehts aus ...

    #include <windows.h>
    #include <mmsystem.h>
    #include <stdlib.h>
    
    #pragma comment(lib, "winmm.lib")
    
    int main()
    {
        PlaySound((LPCWSTR) "al.wav" , NULL, SND_FILENAME | SND_ASYNC | SND_LOOP );
        system("PAUSE");
        return 0;
    }
    

    das is ja noch alles gut ... lässt sich linken und alles ... aber ... was mein Problem ist ... Das Programm wiedergiebt meine wav datei nicht ... ich habe im Verzeichnis wo das Programm ist schon diese wav datei drin ... aber wenn ich das prog starte Piept nur kurz der PC-interne Lautsprecher und ich sehe das Bitte Taste drücken ... ich habs schon versucht eine Monoton datei zu "erzeugen" aber die spielt er auch net ab ... was muss ich fürne Wav nehmen damit sie von der Knsole abgespielt wird ?



  • C++Laie1 schrieb:

    ...(LPCWSTR) "al.wav"
    

    Was ist das denn? Kennst du den Unterschied zwischen Unicode und Multibyte? Das geht so nicht.. schau dir mal im Debugger an was aus (LPCWSTR) "al.wav" wird...



  • aha ... und was wird daraus ?



  • Jo, war mein post...
    Dir ist schon klar, dass der Parameter vom Typ 'char' sein muss?



  • way schrieb:

    Jo, war mein post...
    Dir ist schon klar, dass der Parameter vom Typ 'char' sein muss?

    Hättest du Ahnung bzw. dir den Code von ihm angesehen, dann hättest du nicht soein unpassendes/falsches Kommentar abgegeben.

    Wenn du es schon so sagen willst, dann müsste es nicht "char" sondern "wchar_t" heißen.
    Erst informieren, dann posten.

    @Threadstarter: schau doch mal mit dem Debugger, anstatt dumm zu fragen 🙄

    Da ich aber nett bin, versuchs mal so:

    PlaySound( L"al.wav" , NULL, SND_FILENAME | SND_ASYNC | SND_LOOP );
    

    Warum das so ist, musst du selbst rausfinden 🙄



  • aja ... ok ... ich gebs zu ... ich bin blöd 😞 ... sry ...



  • @C++Laie1: falls du ne alte Version der WinApi hast, da kann der Parameter noch ein LPCSTR sein.



  • wie alte version ? gibts da sogar noch unterschiede ?



  • Big Brother schrieb:

    @C++Laie1: falls du ne alte Version der WinApi hast, da kann der Parameter noch ein LPCSTR sein.

    Das hat nix mit der WinApi zu tun. Das kommt nur drauf an, was du in den Projekteigenschaften eingestellt hast. Entweder benutzt du Multibyte Character oder Unicode Caracter.

    LPCTSTR gehört zu den Multibyte-Chars
    LPCWSTR gehört zu den Unicode-Chars



  • Machine schrieb:

    Big Brother schrieb:

    @C++Laie1: falls du ne alte Version der WinApi hast, da kann der Parameter noch ein LPCSTR sein.

    Das hat nix mit der WinApi zu tun. Das kommt nur drauf an, was du in den Projekteigenschaften eingestellt hast. Entweder benutzt du Multibyte Character oder Unicode Caracter.

    LPCTSTR gehört zu den Multibyte-Chars
    LPCWSTR gehört zu den Unicode-Chars

    Doch, hat es. Ich habe hier noch eine recht alte Doku, da gibt es für diesen Funktionsparameter keine andere Option als LPCSTR.



  • also ... folgendes ... unter MSVC++ lässt sich die Variante mit

    PlaySound( L"al.wav" , NULL, SND_FILENAME | SND_ASYNC | SND_LOOP );
    

    Linken und ausführen und er spielt sogar den sound ab ... gut ... aber in DEV C++
    geht das nicht ... das is der Quelltext

    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {  
      PlaySound( L"al.wav" , NULL, SND_FILENAME | SND_ASYNC | SND_LOOP );
      system("pause");
    }
    

    und das sind die Fehler

    C:\Dokumente und Einstellungen\admin\Desktop\Mini.Haupt\Mini Win\sound.cpp In function `int main()': 
    9 C:\Dokumente und Einstellungen\admin\Desktop\Mini.Haupt\Mini Win\sound.cpp cannot convert `const wchar_t*' to `const CHAR*' for argument `1' to `BOOL PlaySoundA(const CHAR*, HINSTANCE__*, DWORD)'
    

    tja ... und jetz ?



  • VisualStudio und DevCpp benutzen verschiedene Compiler. Das ist nicht einfach so übertragbar.
    Am besten schaust du dir mal ein paar Grundlagen an, anstatt hier einfach irgendwelche Fragen zu stellen.

    BTW: DevCpp ist ziemlich veraltet. Wenn du VisualStudio hast, dann würde auch dabei bleiben.



  • C++Laie1 schrieb:

    tja ... und jetz ?

    Für DEV-CPP (steht in der Fehlermeldun was der Compiler will):

    const char* my_wavefile = "C:\\Examplepath\\examplewavefile.wav";
    
    if ( FALSE == PlaySound(  my_wavefile , NULL, SND_FILENAME | SND_ASYNC | SND_LOOP ) )
    puts ( "File not found." );
    

    Für Visual Studio:
    TCHAR my_wavefile = _T("C:\\Examplepath\\examplewavefile.wav");

    Wenn du SND_ASYNC verwendest, musst du irgendwie auf das Abspielen warten (getchar oder so), weil PlaySound sofort zurückehrt:

    SND_ASYNC
    The sound is played asynchronously and PlaySound returns immediately after beginning the sound. To terminate an asynchronously played waveform sound, call PlaySound with pszSound set to NULL.

    Das könnte dein kurzes Knacken erklären, weil das Programm zu Ende ist bevor du etwas richtig zu hören bekommst.

    Gruß,
    F.d.S.



  • Freund der Sonne schrieb:

    const char* my_wavefile = "C:\\Examplepath\\examplewavefile.wav";
    
    if ( FALSE == PlaySound(  my_wavefile , NULL, SND_FILENAME | SND_ASYNC | SND_LOOP ) )
    puts ( "File not found." );
    

    DevCpp gibt dann den Fehler aus ...

    [Linker error] undefined reference to `PlaySoundA@12'
    


  • Du musst die richtige Bibliothek einbinden.



  • ja das is ja sehr hilfreich ... es gibt einen ganzen pott davon ... welche denn ?
    von MSVC++ kenn ich das

    #pragma comment(lib, "winmm.lib")
    

    und bei Dev ?



  • Jeder Compiler bringt da seine eigene mit. Du kannst z.B. nicht mit dem Dev die Bibliotheken von VC benutzen, denn dann kommen solche Fehlermeldungen zustande.



  • F.d.S schrieb:

    Jeder Compiler bringt da seine eigene mit. Du kannst z.B. nicht mit dem Dev die Bibliotheken von VC benutzen, denn dann kommen solche Fehlermeldungen zustande.

    Machine schrieb:

    VisualStudio und DevCpp benutzen verschiedene Compiler. Das ist nicht einfach so übertragbar.

    🙄



  • Jeder Compiler bringt da seine eigene mit. Du kannst z.B. nicht mit dem Dev die Bibliotheken von VC benutzen, denn dann kommen solche Fehlermeldungen zustande.

    Wat!? Stimmt mal überhaupt nicht.
    Bei manchen Ausnahmefällen ist das so. Die Libs sind NICHT von Compiler (Eigentlich IDE) zu Compiler anders eingebunden.

    @C++Laie
    Haste du auch schon versucht die andere Lib zu inkludieren...?



  • welche den ?


Anmelden zum Antworten