Playsound



  • Ich habe bischen recherchiert und bis binhierhin gekommen(Win-Forms Application):

    #pragma once
    
    namespace TheLegend {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::Media; //
    
    	/// <summary>
    	/// Zusammenfassung für Form2
    	/// </summary>
    
    	public ref class Form2 : public System::Windows::Forms::Form
    	{
    
    	private: SoundPlayer^ soundPlayer; //
    
    	public:
    		Form2(void)
    		{
    			InitializeComponent();	
    			soundPlayer = gcnew SoundPlayer("the_legend_menu.wav");//
    
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    		}
    
    // ...
    
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    
    			soundPlayer->Play(); //
    		 }
    

    Ich habe Winmm.lib verknüpft.Das Programm kompiliert fehlerfrei, jedoch wenn ich auf button1 klicke kommt das:

    "The Legend.exe" (Verwaltet (v4.0.30319)): "C:\windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll" geladen
    "The Legend.exe" (Verwaltet (v4.0.30319)): "C:\Users\pre-admin\documents\visual studio 2010\Projects\The Legend\Debug\The Legend.exe" geladen, Symbole geladen.
    "The Legend.exe" (Verwaltet (v4.0.30319)): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll" geladen
    "The Legend.exe" (Verwaltet (v4.0.30319)): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll" geladen
    "The Legend.exe" (Verwaltet (v4.0.30319)): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll" geladen
    "The Legend.exe" (Verwaltet (v4.0.30319)): "C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.resources\v4.0_4.0.0.0_de_b77a5c561934e089\System.resources.dll" geladen
    Eine Ausnahme (erste Chance) des Typs "System.UriFormatException" ist in System.dll aufgetreten.
    Eine Ausnahme (erste Chance) des Typs "System.IO.FileNotFoundException" ist in System.dll aufgetreten.
    Eine nicht behandelte Ausnahme des Typs "System.IO.FileNotFoundException" ist in System.dll aufgetreten.

    Zusätzliche Informationen: Stellen Sie sicher, dass eine Sounddatei am angegebenen Speicherort vorhanden ist.

    Das Programm "[1216] The Legend.exe: Verwaltet (v4.0.30319)" wurde mit Code -805306369 (0xcfffffff) beendet.

    Und noch eine MessageBox, wo das drin steht:

    Eine nicht behandelte Ausnahme des Typs "System.IO.FileNotFoundException" ist in System.dll aufgetreten.

    Zusätzliche Informationen: Stellen Sie sicher, dass eine Sounddatei am angegebenen Speicherort vorhanden ist.



  • Ich habe Winmm.lib verknüpft.

    Naja, da du jetzt offensichtlich PlaySound(..) nicht verwendest ist Winmm.lib nicht mehr nötig. Anstelle dessen scheinst du jetzt auf [url=http://msdn.microsoft.com/en-us/library/system.media.soundplayer.aspx]SoundPlayer
    [/url] zu setzen, was zumindest in der .NET Welt mehr angebracht ist, als PlaySound(..) .

    Das Programm kompiliert fehlerfrei, jedoch wenn ich auf button1 klicke kommt das:

    Naja, das Programm sagt dir ja ziemlich genau, was das Problem ist. Und zwar wird offenbar die angegebene Sound-Datei nicht gefunden. Die Datei muss im aktuelle Arbeitsverzeichnis deiner Applikation liegen.
    ➡ Finde herraus welches das aktuelle Arbeitsverzeichnis deiner Applikation ist, wenn du es mit Doppelklick auf das Exe im Explorer bzw. aus dem Debugger mit F5 ausführst.

    ABER: Ich rate dir dringend zu C# zu wechseln. Da hast du zumindest weniger Komplextät und die Gefahr, dass du C++ und C++/CLI unwissentlich mischst, wäre damit auch gebannt. Ausserdem hat Visual Studio in neueren Versionen keinen GUI-Editor mehr für Windows Forms mit C++/CLI.



  • Achso das mit PlaySound und SoundPlayer habe ich vergessen zu erwähnen, das ich gewecheselt habe.

    Die .wav ist neben der .exe, also im 1 Debug-Ordner.

    Müsste ich

    soundPlayer = gcnew SoundPlayer("the_legend_menu.WAV");
    

    So schreiben?:

    soundPlayer = gcnew SoundPlayer("c:\ ... the_legend_menu.WAV");
    

    Trotzdem kommt kein Mucks :/.

    Doch ich würde lieber bei C++ (CLI) bleiben.

    EDIT:An der .wav kann es nicht liegen, denn mit dem Media Player hört man es.



  • Hier nochmal der obligatorische Link: http://www.c-plusplus.net/forum/263084



  • Pehlivan schrieb:

    Die .wav ist neben der .exe, also im 1 Debug-Ordner.

    Und jetzt die Quizfrage: Ist das der Ort wo die Datei gesucht wird?
    Antwort: ?

    Weiterführende Frage: Wo wird die Datei gesucht?



  • Ich hatte es mit jedem Ordner versucht und es klappt trotzdem nicht.



  • Pehlivan schrieb:

    Ich hatte es mit jedem Ordner versucht und es klappt trotzdem nicht.

    Glaub ich dir nicht.
    Was meinst du mit "jedem Ordner"? Ich nehme an, dass es einige 1000 auf deinem System sind... 🕶

    Nein, im ernst. Gehe systematisch vor. Ich habe geschrieben, dass es sinnvoll ist herauszufinden, wo gesucht wird. Das könnte man z.B. machen indem man Debugging-Ausgaben ( System::Diagnostics::Debug::WriteLine(..) ) einfügt und bestimmte Dinge überpüft. Gib z.B. das aktuelle Arbeitsverzeichnis aus.

    Edit:
    Ausserdem:

    Simon schrieb:

    Weiterführende Frage: Wo wird die Datei gesucht?

    Falls du die Frage beantwortet hast, darfst du die Antwort ruhig auch hier posten. Das hilft uns zu verstehen, was du machst und wo du stehst.



  • Es wird hier ausgeführt:
    The Legend.vcxproj -> C:\Users\****\Documents\Visual Studio 2010\Projects\The Legend\Debug\The Legend.exe

    Und in dem Ornder hatte ich auch die .wav reingeschoben.



  • Pehlivan schrieb:

    Es wird hier ausgeführt:
    The Legend.vcxproj -> C:\Users\****\Documents\Visual Studio 2010\Projects\The Legend\Debug\The Legend.exe

    Und in dem Ornder hatte ich auch die .wav reingeschoben.

    Wenn du die Applikation aus dem VS startest, ist das Arbeitsverzeichnis (per default) NICHT dort wo das EXE liegt, sondern dort wo das VS Projekt liegt. Wenn du es von der Kommandozeile startest ist es u.U. anders, auch wenn du es per Doppelklick aus dem Explorer startest.

    Tipp: Benutze Directory.GetCurrentDirectory:
    http://msdn.microsoft.com/en-us/library/system.io.directory.getcurrentdirectory.aspx



  • Ich wüsste jetzt nicht, wie ich Directory::GetCurrentDirectory benutzen könnte.
    Könntest du mir ein Beispiel geben(für Win-Forms)?

    Und den Link habe ich mir durchgelesen, doch das hat nicht weitergeholfen.


Anmelden zum Antworten