Audioformate (*.wav;*.mp3, etc) mit C# abspielen


J

Juan

Hallo Leute,

Folgendes Problem:

Ich möchte mit einem C#-Programm Sounddateien abspielen können, ohne dazu ein externes Programm wie z.B. den Windoof-Mediaplayer aufrufen zu müssen. Da ich noch nicht lange C# programmiere, wäre ich dankbar, wenn der Code nicht allzu komplex ist. Eine Normal .wav-Datei abzuspielen würde für den Anfang genügen.

Hoffe, dass mir jemand helfen kann.
 

Saber

Erfahrenes Mitglied
Wave-Files sind relativ einfach wieder zu geben. Da gibts ne Menge Controls, aber im Prinzip reichen Dir auch die Windows APIs.

Wenn Du gleich mehrere Formate unterstützen möchtest wie WMA, MP3, Wave etc., dann lade Dir noch das kostenlose Microsoft Windows MediaPlayer SDK runter. Wenn Du die Funktionalität dann einbindest kannst Du alles wiedergeben, was der Windows MediaPlayer auch abspielen kann.

Das SDK findet Du hier: Download Seite

:)
 

TonicTickle

Grünschnabel
Hallo!

Ich bin auch derzeit auf der Suche nach einer einfachen Abspielmöglichkeit in MP3 und WAV.

Für WAV:


using System.Runtime.InteropServices; // für DLL-Import

[DllImport("winmm.dll")]
public static extern long PlaySound(String lpszName, IntPtr hModule, Int32 dwFlags);

PlaySound("ringin.wav", (IntPtr)0, 0);


Dafür wird aber leider auch eine Extra-DLL von Windows genutzt, die warscheinlich dem Media Player gehört.

Bei dem WMP 9 SDK hab ich nichts gescheites gefunden. Da wird genauso immer der WMP 9 benötigt, bzw. die schreiben da, wie man den WMP 9 in seine eigenen Anwendungen integriert.

Es muss doch was einfaches und .NET-konformes geben, um WAV und MP3 abspielen zu können, ohne den WMP oder sonstiges extra benutzen zu müssen

Und ich möchte aus einem kleinen 8 KB C#-Programm doch kein 15 MB Ding draus machen, indem ich irgendwelche Runtimes, Bibliotheken oder den WMP 9 dazuhänge?!
 

TonicTickle

Grünschnabel
Hallo!

Ich hab jetzt eine vom Media Player unabhängige Sound-Bibliothek für .NET gefunden. Werd's mir demnächst anschaun:

http://www.codeproject.com/cs/media/nbass.asp


Und hier eine Anleitung, wenn man alle Audioformate vom Media Player abspielen will (hier wird aber der WMP benötigt): http://www.codeproject.com/csharp/csstopwatch.asp

Bei CodeProject gibt es auch Anleitungen, wie man in .NET mit LAME WAV's in MP3's umwandelt, aber leider nicht, wie man diese mit LAME abspielt.
 
M

Marc1

Hy was hat es denn mit dem (String lpszName, IntPtr hModule, Int32 dwFlags); auf sich ich kann damit nichts anfangen fang auch grad erst mit C# an aber leider im DOS also im Editor programmieren und im DOS umwandeln und dann wird es auch in einer Anwendung ausgeführt.

weiß da jemand was? wie das mit denn sounds geht?.

MFG Marc1

http://www.pv-s660.de.ki
hab da mein erstes PC programm veröffentlicht.
 
Zuletzt bearbeitet von einem Moderator:

LordDeath

Erfahrenes Mitglied
Hi

Mit DirectX gehts auch. Da gibts ein Assambly namens DirectX.AudioVideoPlayback!

Dazu brauchst du allerdings das DirectX SDK (9.0) und der Anwender deines Programms benötigt DirectX Runtime !

BloodyGreetz
 
M

Marc1

wie das versteh ich jetzt nicht so richtig redest du jetzt über mein programm auf der HP oder das problem mit dem sound?
 
M

Marc1

achso! aber ich proge eigentlich zur zeit eher mit c# wollte eigentlich c machen aber hab dann doch das c# genommen. Wozu ist das String lpszName, IntPtr hModule, Int32 dwFlags); denn gut? das geht zwar im dos aber der sagt beim compileren das da was fehlt.

MFG Marc1

könnt ja mal bei http://www.wie-geht.de gucken da bin ich auch zugange is zwar eher für PV fahns aber... is auch gemischt.

PV=Pocketviewer is ne art PDA halt ohne farbdisplay. Wollte eigentlich dafür c nehmen weil man für die teile auch in c progen muss aber hatte kein c gefunden als buch =)
 

Niro99

Mitglied
Guten Tag!

Mit DirectX lassen sich diverse Einstellungen wie z.B. Volume relativ einfach treffen. Brauchst du das nicht, d.h. willst du ganz einfach nur einen Sound abspielen, reicht es die winmm.dll einzubinden.

Für *.wav Dateien wurde es schon von TonicTickle gepostet - aber auch *.mp3 Files lassen sich damit abspielen. Dazu ist folgende Methode zu gebrauchen:
Code:
[DllImport("winmm.dll")]
private static extern int mciSendString (string lpCommand, string lpReturn, int nReturnLength, IntPtr callBack);
Ich hab mir mal ne Klasse dazu gemacht. Wer's interessiert, kanns mal anschauen.
 

Anhänge

M

Marc1

ja ist ja schon klar aber der agt bei mir das bei dem

string lpCommand, string lpReturn, int nReturnLength, IntPtr callBack);
irgendwas fehlt ich hab denn text normal reinkopiert und so geändert das das lied von mir abgespielt wird aber der sagt beim compilern halt nen fehler
 
M

Marc1

using System;

class sound
{
[DllImport("winmm.dll")]
private static extern int mciSendString (string lpCommand, string lpReturn, int nReturnLength, IntPtr callBack);
}

wenn ich das compilern will dann sagt der:
test.cs (5,2): error cs0246: the type or namespace name 'dllimport' could not be found (are you missing a using directive or an assembly referencer?)


mfg Marc1
 

Christian Kusmanow

Erfahrenes Mitglied
Schau was TonicTickle oben im 3. Post gepostet hat:
Code:
(!)--> using System.Runtime.InteropServices; // für DLL-Import <--(!)

[DllImport("winmm.dll")]
public static extern long PlaySound(String lpszName, IntPtr hModule, Int32 dwFlags);
:rolleyes:
are you missing a using directive or an assembly referencer?
Das heisst:
  1. Entweder ist keine using direktive vorhanden. Also der Namespace nicht vorhanden ist, in dem sich das Objekt befindet
  2. Es existiert gar keine Referenz zur DLL, in der sich die Namespaces befinden.
Ergo muss man schauen ob alle Namespaces eingebunden und vorhanden sind.
Wenn Du nicht weisst welche, kannst Du auch im Objektbrowser nach dem Objektnamen suchen. ;)