Musik abspielen aus Ordner ohne zusatz Player

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 54 Antworten in diesem Thema. Der letzte Beitrag () ist von cyberworm83.

    Musik abspielen aus Ordner ohne zusatz Player

    Hi zusammen,
    ich versuche mich gerade an einem kleinen Programm für unsere Tochter (5). Und zwar soll es so aussehen/funktionieren. Der Monitor hat touch funktion deswegen ist keine Tastatur oder Maus angeschlossen, nur bei Elternlicher Konfiguration.
    Hauptbildschirm: 3 anklickbare Buttons (Musik, Hörbücher und Filme) per drücken von F12 kommt ein Menü zum sperren bzw ausblenden der Buttons (hab ich hin bekommen)
    bei drücken auf den Button Musik, kommt ein neues Fenster wo ca 20 (mehr oder weniger) Buttons sind mit Bildern von den jeweiligen CD's (hab ich gemacht) bei anklicken eines CD-Buttons soll dieser die Musik die sich in einem Ordner befindet (ca 20 Titel) wiedergeben ob random oder der reihe nach ist egal (was einfacher zu programmieren ist) desweiteren soll dann ein Text "Play" auf dem Button erscheinen und auch wieder verschwinden wenn die CD zuende ist. (krieg ich nicht hin) Wie schon geschrieben wäre es cool, wenn sich kein externe player im vordergrund öffnet. es könnte sich einer im hintergrund öffnen und wieder schließen das die Kurze das aber nicht mitbekommt und auch nichts daran rumstellen kann.
    Bei Hörbücher soll das selbe passieren.
    Bei Filme soll sich ein Fenster öffnen wo man play und pause machen kann. mehr nicht (wenns möglich ist, wenn das nicht geht dann ohne den punkt Filme)

    Freue mich auf eure Kommis. Ich werde, wenn ich das fertig habe auch mal hier reinstellen wenn interesse besteht.

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Fuer Musik empehle ich gern die bass.dll(fuer .net zusaetzlich die BassNet.dll). Gibt hier auch einen kleinen Crashcourse, schau hier mal nach einem Tutorial.
    un4seen.com/

    Was Videos angeht, da kenn ich keine gescheite Bibliothek. Gibt zwar die Bass_DShow, aber so gut ist die nicht.
    And i think to myself... what a wonderfuL World!
    Du kannst den Windows Media Player als Steuerelement in deiner Form nutzen. Werkzeugkasten -> Hinzufügen -> Reiter Com dort sollte sich der Mediaplayer finden lassen. Bin mir aber nicht 100% sicher ob sich die Steuerelemte ausblenden lassen.

    Edit
    Man kann die Steuerelemente ausblenden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fakiz“ ()

    Für Musik würde ich CSCore empfehlen. Damit kann man vieles anstellen und es ist leicht verständlich, allerdings ist die Dokumentation nicht komplett.
    CSCore - Highperformance Audiobibliothek
    Mit der Library wurde beispielsweise Hurricane geschrieben.
    Bei Filmen würde ich allerdings auf etwas fertiges zurückgreifen. Also bspw dem WMP-Control oder mit VLC, wobei ich nichts zu VLC sagen kann.
    Du benötigst aber auf alle Fälle ein ordentliches Datenmodell. Mit einem guten Datenmodell ist auch Zufallswiedergabe und so ein Zeug leicht umzusetzen.
    Ein gutes Datenmodell wäre bspw eine klassenbasierte Nachbildung der Situation, sprich eine Basisklasse für Medien von der du dann Musik, Hörbücher und Filme ableitest.
    Ein schlechtes Datenmodell wäre es wenn du bspw einen Ordner als String-Array einliest und dieses Array dann als Playlist behandelst.
    Du kannst dir ja auch ansehen wie das andere Player machen, also bspw Hurricane. Der Transfer von C# und VB.Net sollte auch kein Problem darstellen.

    LG
    Naja es sollte klar sein das du natürlich erst eine Playlist erstellen musst bevor du sie abspielen kannst.

    VB.NET-Quellcode

    1. Dim playlist As WMPLib.IWMPPlaylist = axWindowsMediaPlayer1.newPlaylist("MyPlayList", "")
    2. playlist.appendItem(axWindowsMediaPlayer1.newMedia("c:\pfad\song1.mp3"))
    3. playlist.appendItem(axWindowsMediaPlayer1.newMedia("c:\pfad\song2.mp3"))
    4. axWindowsMediaPlayer1.currentPlaylist = playlist
    5. axWindowsMediaPlayer1.Ctlcontrols.play()
    @Fakiz das hat super geklappt. Ist vielleicht nicht die beste Möglichkeit aber ne einfache :)
    Was muss ich eingeben, wenn der button play azeigen soll wenn die musik davon gespielt wird (das ist klar) aber was muss ich machen das das play weggeht wenn nicht mehr diese musik gehört wird
    Super Danke.
    Dann werde ich mich mal an die arbeit machen zig ordner einzeln einzufügen :D
    oder gibt es wie von dir (Fakiz) auch ne methode play Ordner c:\Musik\*.mp3 ? das würde die sache vereinfachen^^
    Dafür benötigst du den System.IO Namespace. Dieser beherbergt die Klasse DirectoryInfo, diese Klasse stellt dir die Mehtode .GetFiles() zur verfügung welche mehrfach überladen ist. Die .GetFiles() Methode gibt ein FileInfo -Array zurück. In einem FileInfo -Objekt findet man allerhand Informationen zu einer Datei unter anderem den Pfad zur Datei. An den Pfad kommst du mit der Eigenschaft FullName. Der simpelste Ansatz sieht so aus

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Erstellt eine WindowsMediaPlayer -Playlist mit den MP3 -Dateien des angegebenen Verzeichnisses und dessen Unterordner
    3. ''' </summary>
    4. ''' <param name="name">Name der Playlist</param>
    5. ''' <param name="path">Verzeichniss in dem sich die MP3 Dateien befinden</param>
    6. ''' <returns>WindowsMediaPlayer -Playlist</returns>
    7. Private Function CreatePlaylistFromDirectory(name As String, path As String) As WMPLib.IWMPPlaylist
    8. ' Prüft ob Verzeichniss existiert
    9. If Not System.IO.Directory.Exists(path) Then
    10. Throw New System.IO.DirectoryNotFoundException(String.Format("Verzeichniss {0}{1}{0} existiert nicht", CChar(34), path))
    11. End If
    12. ' Playlist deklarieren
    13. Dim playlist As WMPLib.IWMPPlaylist = axWindowsMediaPlayer1.newPlaylist(name, "")
    14. ' Alle Dateien mit der Dateiendung .mp3 ermitteln
    15. Dim allFiles As System.IO.FileInfo() = New System.IO.DirectoryInfo(path).GetFiles("*.mp3", System.IO.SearchOption.AllDirectories)
    16. ' Prüfen ob das Array allFiles Daten bebinhaltet, wenn dem so ist dann wird jede Datei zu der Playlist hinzugefügt
    17. If allFiles IsNot Nothing AndAlso allFiles.Length > 0 Then
    18. For Each file As System.IO.FileInfo In allFiles
    19. playlist.appendItem(axWindowsMediaPlayer1.newMedia(file.FullName))
    20. Next
    21. End If
    22. Return playlist
    23. End Function


    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Fakiz“ ()

    Hi nochmal
    mir ist gerade ein anderer gedanke gekommen. ich weiß aber nicht ob es einfacher bzw umsetzbar ist.
    ich könnte ja play listen erstellen zb wpl dateien das ich quasi eine playlist datei habe pro button wo dann drauf zugegriffen wird.
    geht sowas? nennen wir eine playlist einfach mal "test"

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „cyberworm83“ ()

    Ok das habe ich geschafft, ABER das hier klappt iwie nicht:

    VB.NET-Quellcode

    1. If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsPlaying Then
    2. Button1.Text = "PLAY"
    3. Else
    4. Button1.Text = ""
    5. End If

    cyberworm83 schrieb:

    ABER das hier klappt iwie nicht
    Wahrscheinlich ist die GUI gerade ausgebremst.
    Füge da mal diese Zeile ein: Button1.Update()
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Okay
    habs mal so getestet

    VB.NET-Quellcode

    1. If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsPlaying Then
    2. Button1.Text = "PLAY"
    3. Button1.Update()
    4. Else
    5. Button1.Text = ""
    6. Button1.Update()
    7. End If
    8. Button1.Update()

    hatte erst die variante im if und nach dem if getestet. also nicht alle zusammen :)
    aber tut sich leider immernoch nichts

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim playlist As WMPLib.IWMPPlaylist = AxWindowsMediaPlayer1.newPlaylist("MyPlayList", "D:\Musik\001.m3u")
    3. AxWindowsMediaPlayer1.currentPlaylist = playlist
    4. AxWindowsMediaPlayer1.settings.setMode("shuffle", True)
    5. AxWindowsMediaPlayer1.Ctlcontrols.play()
    6. If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsPlaying Then
    7. Button1.Text = "PLAY"
    8. Button1.Update()
    9. Else
    10. Button1.Text = ""
    11. Button1.Update()
    12. End If
    13. End Sub


    So sieht das bei mir aus :)