MP3 Datei abspielen mit DirectX
-
Hallo,
ich bin in Sachen C++/CLI NET, und DirectX
nicht sehr erfahren. Ich versuche ein Programm
zu schreiben, das auf Button-Druck eine MP3-Datei
abspielt. Dazu benutze ich AudioVideoPlayback (DirectX SDK von April 07).
Ich habe beim googlen zwar einige Beiträge zum Thema
AudioVideoPlayback gefunden, die beziehen sich allerdings
entweder auf C# oder VB.NET. Bei den ausserdem unvollständigen
Beispielen fällt es mir schwer in C++/CLI NET umzudenken.
(Da noch nicht viel Praxis in Sachen programmieren).Folgender Code wird zwar ohne Fehler von Visual C++ kompiliert,
wenn ich allerdings beim Ausführen auf den Play-Button drücke,
kommt eine unbehandelte Ausnahme.Hier der C++/CLI NET Code:
#pragma once
#using <Microsoft.DirectX.AudioVideoPlayback.DLL>
#using <Microsoft.DirectX.DLL>
#using <Microsoft.DirectX.Direct3D.DLL>namespace mp3_test {
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 Microsoft::DirectX::AudioVideoPlayback;
using namespace Microsoft::DirectX;
using namespace Microsoft::DirectX::Direct3D;/// <summary>
/// Zusammenfassung für Form1
///
/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
/// die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
/// das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
/// Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
/// arbeiten, die diesem Formular zugewiesen sind.
/// </summary>
public ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//}
protected:
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;
protected:private:
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
System::ComponentModel::Container ^components;#pragma region Windows Form Designer generated code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
void InitializeComponent(void)
{
this->button1 = (gcnew System::Windows::Forms::Button());
this->SuspendLayout();
//
// button1
//
this->button1->Location = System::Drawing::Point(12, 36);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(75, 23);
this->button1->TabIndex = 0;
this->button1->Text = L"Play";
this->button1->UseVisualStyleBackColor = true;
this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
//
// Form1
//
this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->ClientSize = System::Drawing::Size(292, 71);
this->Controls->Add(this->button1);
this->Name = L"Form1";
this->Text = L"MP3-Player_TEST";
this->ResumeLayout(false);}
#pragma endregionprivate: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Audio ^m_Audio;
String ^fileName="C:\test.mp3";
m_Audio=gcnew Audio(fileName);
m_Audio->Play();
}
};
}Und hier die unbehandelte Ausnahme:
************** Ausnahmetext **************
Fehler in der Anwendung -2147024773 [Unknown] bei Microsoft.DirectX.AudioVideoPlayback.Audio.Open(String fileName, Boolean autoRun)
bei Microsoft.DirectX.AudioVideoPlayback.Audio..ctor(String fileName)
bei mp3_test.Form1.button1_Click(Object sender, EventArgs e) in c:\dokumente und einstellungen\schnubbel\eigene dateien\visual studio 2005\projects\mp3_test\mp3_test\form1.h:Zeile 98.
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)************** Geladene Assemblys **************
mscorlib
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll.
----------------------------------------
mp3_test
Assembly-Version: 1.0.2745.27566.
Win32-Version: .
CodeBase: file:///c:/Dokumente%20und%20Einstellungen/schnubbel/Eigene%20Dateien/Visual%20Studio%202005/Projects/mp3_test/debug/mp3_test.exe.
----------------------------------------
msvcm80d
Assembly-Version: 8.0.50608.0.
Win32-Version: 8.00.50727.42.
CodeBase: file:///C:/WINDOWS/WinSxS/x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c/msvcm80d.dll.
----------------------------------------
System
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll.
----------------------------------------
System.Windows.Forms
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.
----------------------------------------
System.Drawing
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.
----------------------------------------
Microsoft.DirectX.AudioVideoPlayback
Assembly-Version: 1.0.2902.0.
Win32-Version: 5.04.00.2904.
CodeBase: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX.AudioVideoPlayback/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.AudioVideoPlayback.dll.
----------------------------------------
Microsoft.DirectX
Assembly-Version: 1.0.2902.0.
Win32-Version: 5.04.00.2904.
CodeBase: file:///C:/WINDOWS/assembly/GAC/Microsoft.DirectX/1.0.2902.0__31bf3856ad364e35/Microsoft.DirectX.dll.
----------------------------------------
mscorlib.resources
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll.
----------------------------------------
System.Windows.Forms.resources
Assembly-Version: 2.0.0.0.
Win32-Version: 2.0.50727.42 (RTM.050727-4200).
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms.resources/2.0.0.0_de_b77a5c561934e089/System.Windows.Forms.resources.dll.
----------------------------------------Bin für jede Hilfe dankbar ...
Pedro
-
Hi,
zunächst einmal, weniger ist oft mehr! Poste beim nächsten Mal nicht den kompletten Code, sondern nur den Teil der Probleme macht. Ausserdem gibts Codetags...Laut der Ausnahme würde ich darauf schliessen das der Pfad nicht stimmt!
Fehler in der Anwendung -2147024773 [Unknown] bei Microsoft.DirectX.AudioVideoPlayback.Audio.Open(String fileName, Boolean autoRun)
Wahrscheinlich liegt das Problem hier:
String ^fileName="C:\test.mp3";
Normal werden bei C - C++ - C++/CLI Pfadangaben mit \\ angegeben!
Konkret:C:\\test.mp3
Stichwort Escape Sequenz
MFG
Dappeljuh
-
Hallo
Vielen Dank, jetzt funktioniert es.
Soviel zum Thema "den Wald vor lauter Bäumen nicht sehen."Ciao ....
Pedro
-
hey ho, mal ne frage hierzu:
kann man das auch in purem c anwenden und wenn ja wie? ich möchte in diesem c programm sounds/audiofiles abspielen. bisher ist es so gelöst das jedesmal ein externer player mit dem file geöffnet wird was nich gerade ne klasse lösung is.
wäre für hilfe dankbar...
-
Hab den Code mal so übernommen, hab aber das Problem das er die DirectX Dll's nicht findet:
fatal error C1107: Die Assembly "Microsoft.DirectX.AudioVideoPlayback.DLL" wurde nicht gefunden: Geben Sie den Assemblysuchpfad an, indem Sie /AI verwenden oder die Umgebungsvariable LIBPATH festlegen
Wie muss man die einbinden? Konnte auch kein nützliches Tutorial finden. Benutze Visual C++ Express Edition 2008.
Please Help...THX