Wie füge ich in C# Musik ein, die über eine Website läuft?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet
using System;
using System.Windows.Media;
class Prog{
    public static void Main(string[] args){
        Console.WriteLine("MDR Jump Player");
        var p1 = new System.Windows.Media.MediaPlayer();
        p1.Open(new System.Uri(@"http://mdr-284320-0.cast.mdr.de/mdr/284320/0/mp3/high/stream.mp3"));
        p1.Play();
        Console.ReadKey();
    }
}

Nicht vergessen PresentationCore.dll und WindowsBase.dll zu referenzieren:

Visual Studio:

  • im Projektmappen-Explorer nach "Referenzen"
  • Rechtsklick auf "Referenzen"
  • Wähle "Verweis hinzufügen ..."
  • Suche die Liste "Presentation.Core" und aktivieren Sie das Kontrollkästchen
  • dito für Windows.Base

Kommandozeilencompiler:

  • /reference:C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationCore.dll /reference:C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\WindowsBase.dll

(Pfade können für andere .Netversionen abweichen)

Es gibt noch andere Lösungen aber das ist die billigste, welche mit wenigen Zeilen auch OnlineURLs abspielt.

Hier noch eine kleine DemoBatch, welche mit dem Standard-Win10 C#-Kommandozeilencompiler eine kleine exe erzeugt.

Demo.cmd

/* 2>nul ||@cls
@echo off
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d  /o:-n "%SystemRoot%\Microsoft.NET\Framework\*csc.exe"') do (
set "csc=%%v"
)
"%csc%" /reference:C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationCore.dll /reference:C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\WindowsBase.dll /out:"%~n0.exe" "%~f0" 
"%~n0.exe"
pause
exit /b %errorlevel%
rem Die nächste Zeile ist wichtig nicht ändern!
::::C#code */

using System;
using System.Windows.Media;
class Prog{
    public static void Main(string[] args){
        Console.WriteLine("Radio - Time For Friends");
        var p1 = new System.Windows.Media.MediaPlayer();
        p1.Open(new System.Uri(@"http://radio-tff.funk-team.de:8000/listen1"));
        p1.Play();
        Console.ReadKey();
    }
}



Palladin007  04.01.2022, 11:12

Du hast gelesen, dass es hier im eine Website geht? Da hilft WPF herzlich wenig.

Und .NET 4.x sollte nicht mehr genutzt werden, das wird nicht mehr weiterentwickelt. WPF gibt's auch für .NET 6, läuft dann bloß nicht mehr manuell über die Referenzen, sondern über die "UseWPF"-MSBuild-Property.

Und wozu man eine Batch braucht, die das zeigt ... naja, wie Du meinst.

0
regex9  04.01.2022, 15:17
@Palladin007

Es geht um Musik, die von einer Webseite kommt (wie einem Internetradio). Nicht um das Abspielen von Musik auf einer Webseite.

2
Palladin007  04.01.2022, 15:34
@regex9

Die Frage klingt für mich danach, dass die Website selber es abspielen können soll - wie ein Internet-Radio.

Aber ja, wenn es ein Client ist, dann stimmt das natürlich.
Und dennoch sollte man mit .NET 6 arbeiten - zumindest wenn man die Möglichkeit hat.

0
Erzesel  04.01.2022, 17:43
@Palladin007
Musik ein, die über eine Website läuft

über?...also eine beliebige Url/Stream-Quelle

Praktischerweise bietet WEP nahezu die uralte Schnittstelle, welche unsereins bereits unter VBS/JS mit "WMPlayer.OCX.7" bedient hat

Entschuldige bitte, das ich auf ein universell nutzbares Beispiel gesetzt habe. und eine Referenz auf auf die stets verfügbaren net4.x Bibliotheken gesetzt habe. (Net 6 hat lediglich andere Pfade, ist aber nicht auf jedem 0815-Rechner verfügbar)

Ich hatte bereits vor Jahren in anderen Foren das Problem, das Anfänger bei using System.Windows.Media; nicht wussten, das using nicht automatisch die WEP einbindet... (deshalb die idiotensichere Variante)

Die Batch war lediglich ein Gimmick, wie man auch ohne VS compiliert und dabei die /reference: einsetzt. ( msbuild funktioniert auch über die native Kommandozeile, aber dann hätte ich ja für die Demo die ganze Struktur auf bauen müssen . ...dafür war ich zu faul, um ehrlich zu sein) .

Was habe ich doch für ein Glück, dass ich nicht auf den nativen Ansatz nach Art von C++ verwiesen habe:

[DllImport("winmm.dll")]
        private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, int Callback);

(Ich hatte ja bereits oben geschrieben, das es mehrere Möglichkeiten gibt)



0
Palladin007  05.01.2022, 00:36
@Erzesel
über?...also eine beliebige Url/Stream-Quelle

Ich meine, dass die Website es im Browser direkt abspielt und als WebAssembly läuft WPF wahrscheinlich nicht, zumindest würde es mich sehr wundern.

Wenn es sich um eine Desktop-Anwendung handeln soll (geht mMn. nicht klar aus der Frage hervor), muss natürlich auch eine Desktop-Lösung verwendet werden. Ob WPF dafür so gut geeignet ist, ist sicherlich diskussionswürdig, aber es funktioniert.

Net 6 hat lediglich andere Pfade, ist aber nicht auf jedem 0815-Rechner verfügbar

... aber sehr leicht zu installieren oder mit der Anwendung ohne Installation mitzuliefern.

Mag sein, dass das alte .NET 4.x noch funktioniert, aber es wird seit knapp zwei Jahren nicht mehr weiterentwickelt und wer weiß, ob es ein Windows 12 noch erleben wird. Und wahrscheinlich werden auch Drittanbieter-Frameworks immer weniger, da .NET Standard 2.0 auch nicht mehr weiterentwickelt wird.
Daher sollte mMn. jeder, der damit arbeitet, wissen, dass das ein sterbendes Pferd ist. Gerade Einsteiger bekommen das dank der enormen Masse an "alten" Tutorials oft nicht mit.

0

Gar nicht, C# läuft nicht auf dem Client. Du musst das mit JavaScript umsetzen, von C# aus lieferst Du dann nur noch den Stream zur Musik-Datei.

Anders sieht das bei mit WebAssemblies aus, da in diesem Fall doch C# auf dem Client läuft, aber eingeschränkt und mit besonderen Anforderungen. Hier musst Du dann aber auch eine dafür vorbereitetes Framework finden, denn z.B. WPF (was Erzesel zeigt), wird da vermutlich nicht laufen.

In beiden Fällen kann ich dir keinen konkreten Tipp geben, aber zumindest die Technologien, an denen Du dich orientieren musst: JavaScript oder WebAssembly