Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Mp3 Stream abspielen
xiller
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

Mp3 Stream abspielen

beantworten | zitieren | melden

Hallo ihr,
gibt es eine Sound Engine für C# um Mp3 Streams abzuspielen?
Bereits getestet habe ich fmod, allerdings müsste ich mir da einen Wrapper selbst schreiben. Auf DirectX und den WMP würde ich gerne verzichten... ;-)
Danke für eure Antworten,

Gruß Börni
private Nachricht | Beiträge des Benutzers
svenson
myCSharp.de - Member



Dabei seit:
Beiträge: 8775
Herkunft: Berlin

beantworten | zitieren | melden

http://3d2f.com/programs/11-062-rsp-mp3-player-net-download.shtml

Kostet 100 $
private Nachricht | Beiträge des Benutzers
necro
myCSharp.de - Member



Dabei seit:
Beiträge: 33

beantworten | zitieren | melden

Sieh dir mal das hier an

nBASS

Das basiert auf die bass.dll von un4seen.com
private Nachricht | Beiträge des Benutzers
xiller
myCSharp.de - Member



Dabei seit:
Beiträge: 4

Themenstarter:

beantworten | zitieren | melden

Danke euch.

Die Beta Version von fmod bietet nun auch Suport für C#, gefällt mir sehr gut.

Gruß Xiller
private Nachricht | Beiträge des Benutzers
maxE
myCSharp.de - Member



Dabei seit:
Beiträge: 456
Herkunft: Sachsen

beantworten | zitieren | melden

Warum kompliziert, wenn es einfach geht:
Windows kann das auch mit Bordmitteln:
http://www.vbarchiv.net/archiv/tipp_499.htmlhttp://www.gamedev.net/reference/articles/article2053.asp
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
private Nachricht | Beiträge des Benutzers
Quallo
myCSharp.de - Member



Dabei seit:
Beiträge: 994
Herkunft: Nähe Bremen

beantworten | zitieren | melden

Hier, ich glaub besser geht das nicht:
http://www.mentalis.org/soft/class.qpx?id=1

Ist auch umsonst(LGPL wenn ich mich nicht irre)!

Grüße Christoph
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 962
Herkunft: Rostock

beantworten | zitieren | melden

hi maxE,

das sind schön einfache Beispiele, nur leider nur für VB und C++. Wäre ein gutes Thema für einen Artikel hier im Board. Wie man einfach Sound abspielen kann, sowas kann man immer brauchen.

Wenn du Lust dazu hast, da was zu schreiben, wende dich an Alexander, der trägt dich als Autor ein.


Gruss
Pulpapex
private Nachricht | Beiträge des Benutzers
maxE
myCSharp.de - Member



Dabei seit:
Beiträge: 456
Herkunft: Sachsen

beantworten | zitieren | melden

Hmm, könnte ich eigentlich machen
In Kürze werd ich da mal nen Artikel schreiben.
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Ist gar nicht schwierig


using System;
using System.Text;
using System.Runtime.InteropServices;

namespace MP3
{
	public class MP3Player
	{
		private string _Alias;

		public MP3Player(string pAlias)
		{
			this._Alias=pAlias;
		}

		public bool Play(string pFileName)
		{
			bool ret=false;
			StringBuilder retApi=new StringBuilder(new string(' ',256));
			if(GetShortPathName(pFileName,retApi,retApi.Length)>0)
			{
				//MCI öffnen
				int intMciResult=mciSendString(string.Format("open {0} type MPEGVideo alias {1}",retApi.ToString(),this._Alias),string.Empty ,0,IntPtr.Zero);

				int intPlayResult=-1;
				if (intMciResult==0)
				{
					//MP3 Play
					intPlayResult=mciSendString(string.Format("play {0} from 0",this._Alias),string.Empty ,0,IntPtr.Zero);
				}

				ret=intPlayResult==0;
			}
			return ret;
		}

		public bool Stop()
		{
			bool ret=false;
			if(mciSendString(string.Format("stop {0}",this._Alias),string.Empty ,0,IntPtr.Zero)==0)
			{
				ret=mciSendString(string.Format("close {0}",this._Alias),string.Empty ,0,IntPtr.Zero)==0;
			}
			return ret;
		}
		[DllImport("winmm.dll")]
		private static extern int mciSendString (string lpCommand,string lpReturn, int nReturnLength,IntPtr callBack);

		[DllImport("kernel32")]
		private static extern int GetShortPathName(string lpLongPath, StringBuilder lpShortPath, int Buffer);
	}
}



So sieht der ClientCode aus...


MP3.MP3Player _M=new MP3.MP3Player("myPlayer");
		private void btnPlay_Click(object sender, System.EventArgs e)
		{
			this._M.Play(@"C:\..\xy.mp3");
		}

		private void btnStop_Click(object sender, System.EventArgs e)
		{
			this._M.Stop();
		}


Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
maxE
myCSharp.de - Member



Dabei seit:
Beiträge: 456
Herkunft: Sachsen

beantworten | zitieren | melden

Ich schreib den Artikel trotzdem, da solche Fragen ja immer wieder auftauchen.
Die Wrapper Klasse werd ich noch um einige zusätzliche Features erweitern. CD-Audio, Video, usw. ...
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

ja sicher maxE ich wollte Dir die Arbeit nicht wegnehmen...
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
Quallo
myCSharp.de - Member



Dabei seit:
Beiträge: 994
Herkunft: Nähe Bremen

beantworten | zitieren | melden

Mein Beispiel ist doch komplette C# Klasse! Oder bin ich zu blöd?

Grüße Christoph
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 962
Herkunft: Rostock

beantworten | zitieren | melden

Ja, aber da braucht man eine spezielle Bibliothek dafür. Die muss mit der Anwendung mitgeliefert werden.

Wenn man nur ein kleines Programm schreiben möchte, das Mp3s abspielen können soll, ist es doch schön, wenn man mit Boardmitteln auskommen kann, auch wenn die Funktionen sehr rudimentär sind. Besonders, wenn es so einfach ist.

Für komplexere Geschichten ist eine fertige Bibliothek besser geeignet, keine Frage.


Gruss
Pulpapex
private Nachricht | Beiträge des Benutzers
JK_net
myCSharp.de - Member



Dabei seit:
Beiträge: 187

beantworten | zitieren | melden

Hallo,

Momentan verwende ich die Klasse von Programmierhans, in einem Projekt, in dem das Abspielen einer MP3-Datei völlig ausreicht.
Meine Frage ist jetzt, ob es die Möglichkeit gibt, die Klasse zu erweitern, um festzustellen, ob eine MP3-Datei fertig abgespielt ist, d.h. das Ende festzustellen.

MfG
Jens
private Nachricht | Beiträge des Benutzers
MartinE
myCSharp.de - Member



Dabei seit:
Beiträge: 49

Managed DirectX für Audioplayback

beantworten | zitieren | melden

Hallo.

Sehr einfach zu verwenden für die Wiedergabe von Audio- und Video-Material ist Managed DirectX, die Erweiterung für DirectX seit DirectX 8. Wer die DirectX Redistributional schon mal installiert hat (wer hat das eigentlich nicht), dem ist vielleicht am Ende das kleine Fenster mit "Managed blabla" aufgefallen.

Um damit zu entwickeln lädt man sich am besten das DirectX SDK (aktuelle Version Feburar 05 Update) herunter. Danach kann man in seine Projekte die "DirectX.AudioVideoPlayback.dll" einbinden. Danach ist die Sache einfach.


using Microsoft.DirectX.AudioVideoPlayback;

...

string filename = "Song.mp3";
Audio audioPlayback = new Audio(filename);
audioPlayback.Play();

...

Die Klasse Audio bietet noch viele weitere Eigenschaften und Methoden an das Playback zu steuern, z.B. Position, Lautstärke, u.s.w.
Im Hintergrund verwendet DirectX Codecs, die auf dem Rechner installiert sind. Daher wird das Playback auch für andere Formate wie WAV, WMA, u.s.w. funktionieren.

Video-Playback ist übrigens ähnlich einfach. Dies regelt (wie sollte es anders sein) natürlich die Klasse "Video". Viel Spaß beim Probieren.

-Martin Ehrlich
------------------------------
Martin Ehrlich
private Nachricht | Beiträge des Benutzers
Pulpapex
myCSharp.de - Member



Dabei seit:
Beiträge: 962
Herkunft: Rostock

beantworten | zitieren | melden

Hi MartinE, hast du dir mal den Startbeitrag durchgelesen?

Konnte mir das nicht verkneifen,
schönes WE.
private Nachricht | Beiträge des Benutzers
maxE
myCSharp.de - Member



Dabei seit:
Beiträge: 456
Herkunft: Sachsen

beantworten | zitieren | melden

Geduldet euch nur
Ich setze den Artikel heute Abend online.
Er wird auch erklären, wie man die aktuelle Abspielposition ermittelt.
Ein kleiner simpler Medien-Player, mit dem man Videos, MP3s, WMAs und CDs abspielen kann, werd ich mit zum Artikel packen.
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Wenn man den send um ein notify erweitert


mciSendString(string.Format("play {0} from 0 notify",this._Alias),string.Empty ,0,this.Handle);

dann kann man im Fenster ode Control welches this.Handle repräsentiert eine Benachrichtigung abfangen wenn der play fertig ist.


protected override void WndProc(ref Message m)
{
	base.WndProc (ref m);
	if (m.Msg==MM_MCINOTIFY)
	{
		//ich hatte hier ein Problem, dass er hier immer 2 mal reingelaufen ist 
		//mit einem ganz kurzen Thread.Sleep trat es nimmer auf
		Thread.Sleep(1);
		//schliessen
		mciSendString(string.Format("close {0}",this._Alias),string.Empty ,0,this.Handle);
		//Play Complete
	}
}	
}
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
maxE
myCSharp.de - Member



Dabei seit:
Beiträge: 456
Herkunft: Sachsen

beantworten | zitieren | melden

So der Artikel ist online.
Ich hoffe das Beispielprogramm demonstriert die Verwendung von MCI ganz gut.
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
private Nachricht | Beiträge des Benutzers
Zebes
myCSharp.de - Member



Dabei seit:
Beiträge: 459
Herkunft: NRW

beantworten | zitieren | melden

@ Programmierhans

ich habe gerade dein beispiel ausprobiert nur gibt mir mciSendString immer den Fehler 263 zurück.

in der msdn finde ich auch nichts was mir weiterhilft.

zur info. ich will nur ein mp3 audio stück abspielen.

mfg
Zebes
private Nachricht | Beiträge des Benutzers
Zebes
myCSharp.de - Member



Dabei seit:
Beiträge: 459
Herkunft: NRW

beantworten | zitieren | melden

kann es sein das mci unter windows 64 nicht geht?
private Nachricht | Beiträge des Benutzers
Kasperdelasopa
myCSharp.de - Member



Dabei seit:
Beiträge: 121

beantworten | zitieren | melden

@Programmierhans

In welche Klasse ich den diese Methode reinschreiben, damit ich es abfangen kann wenn das Lied zu ende ist?

Ich habe noch nicht so viel Übung in den Dingen.
private Nachricht | Beiträge des Benutzers
Zebes
myCSharp.de - Member



Dabei seit:
Beiträge: 459
Herkunft: NRW

beantworten | zitieren | melden

hat denn keiner erfahrung mit dem system gemacht?
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Zitat
Original von Kasperdelasopa
@Programmierhans

In welche Klasse ich den diese Methode reinschreiben, damit ich es abfangen kann wenn das Lied zu ende ist?

Im Form oder UserControl in welchem Du das MP3 startest.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
Zebes
myCSharp.de - Member



Dabei seit:
Beiträge: 459
Herkunft: NRW

beantworten | zitieren | melden

Weis keiner was zu der Fehler nummer? ich habe mitlerweile mehrere beispiele aus dem internet ausprobiert. leider haben alle nicht funktioniert. gibt es noch eine alternative zu mci? am besten etwas das voraussichtlich auf jedem rechner laufen wird.

mfg
Zebes
private Nachricht | Beiträge des Benutzers
Zebes
myCSharp.de - Member



Dabei seit:
Beiträge: 459
Herkunft: NRW

beantworten | zitieren | melden

ok ich glaube ich weiß was der fehler war. im thread [Tutorial] Audio- und Videowiedergabe mit MCI steht die antwort. und zwar muss die applikation als [STAThread] eingestellt sein.

ich habe das jetzt nur hier auf der arbeit getestet und werde das zu hause nochmal überprüfen da ich hier den fehler 266 bekommen habe und zuhause 265.

mfg
Zebes
private Nachricht | Beiträge des Benutzers
Zebes
myCSharp.de - Member



Dabei seit:
Beiträge: 459
Herkunft: NRW

beantworten | zitieren | melden

ok das wars wohl doch noch nciht so ganz.

ich habe das nun zuhause nochmal auf meinem 62 bit windows ausprobiert aber da bekomme ich nun die fehlermeldung "The specified device is not open or is not recognized by MCI."

allerdings ist der code der selbe wie auf dem 32 bit system.

gibt es noch andere voraussetzungen die für MCI erfüllt sein müssen?

mfg
Zebes
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Zitat
Original von Zebes
ok das wars wohl doch noch nciht so ganz.

ich habe das nun zuhause nochmal auf meinem 62 bit windows ausprobiert aber da bekomme ich nun die fehlermeldung "The specified device is not open or is not recognized by MCI."

Ev. ist Dein Windows defekt... scheint so als hättest Du 2 bits verloren :-)

PS: Ja ich gebe es zu mein Post ist nicht wirklich todernst gemeint :-)

Gruss
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
Dragosani
myCSharp.de - Member

Avatar #avatar-2498.jpg


Dabei seit:
Beiträge: 32

beantworten | zitieren | melden

Ich habe zu der Klasse vom Programmierhans mal eine kleine Frage:

vorab: sie funktioniert tadellos, sprich ich kann damit problemlos MP3s abspielen.

Aber: ich habe Störgeräusche dabei, als eine Art "Ploppen" bei manchen Tiefen. Habe ich bei der selben Datei abgespielt mit WinAMP oder dem MediaPlayer nicht.

Jemand eine Ahnung, woran es liegen könnte?

Edit: Hat sich erledigt, ich Löse es nun ohne dieses Knacken per DirectX
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Dragosani am .
private Nachricht | Beiträge des Benutzers
Narnaja
myCSharp.de - Member



Dabei seit:
Beiträge: 57

beantworten | zitieren | melden

Das Beispiel von Programmierhans funktioniert perfekt.
Danke dir!

Dies bezieht sich aber auf MP3-Dateien.
Ich wollte noch einen Radio Stream auf ein OnClick Button setzen. Hat sich schwer gestaltet^^. Wie macht man das am besten?

Ich habe dies nun nicht wirklich schon gemacht. Habe eine Batchdatei erstellt, die den stream startet und auf das OnClick des Buttons startet der Batch!

Unschön aber machbar.

Habt ihr ne bessere Idee?

Gruss Narnaja
Projekt GloDaS
--> You need technical support? PM to me!
private Nachricht | Beiträge des Benutzers