Audio/Video mit DirectX!

    • VB.NET

    Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von musikant.

      Audio/Video mit DirectX!

      Hallo Community,
      da ich schon viele posts gelesen habe in denen gefragt wird wie man Musik oder Videos Ohne das WMP Control abspielt, mach ich mal dieses Tutorial!

      1. Also ihr müsst euch als erstes das DirectX SDK herunterladen!
      Das DirectX SDK benötigt ihr bloß auf dem Entwickler Computer! Der Benutzer muss bloß DirectX9 installiert haben! Ihr solltet es vielleicht in euren Programmen mitgeben falls das Programm auf einem OS unter XP laufen soll ;) unter Vista/7 ist das schon vorinstalliert!

      2. Ihr müsst über Projekt->Verweis hinzufügen einen Verweis auf Microsoft.DirectX.AudioVideoPlayback und Microsoft.DirectX hinzufügen!

      3. Solltet ihr die Namensräume importieren:

      VB.NET-Quellcode

      1. Imports Microsoft.DirectX
      2. Imports Microsoft.DirectX.AudioVideoPlayback


      Ihr solltet nun eine Globale Variable Audio/Video anlegen!
      Für Audio:

      VB.NET-Quellcode

      1. Private WithEvents AudioDatei As Audio

      Für Video:

      VB.NET-Quellcode

      1. Private WithEvents VideoDatei As Video


      Zum Abspielen müsst ihr AudioDatei oder VideoDatei definieren:
      Für Audio:

      VB.NET-Quellcode

      1. AudioDatei = New Audio("Pfad")

      Für Video:

      VB.NET-Quellcode

      1. VideoDatei = New Video("Pfad")


      Pfad ist hier ebenhalt der Pfad zur Datei des Videos/Audios

      dann müsst ihr es noch abspielen:
      Für Audio:

      VB.NET-Quellcode

      1. AudioDatei.Play()

      Für Video:

      VB.NET-Quellcode

      1. VideoDatei.Play()


      Wenn ihr bei Video keinen Owner festgelegt habt öffnet sich ein Extra Fenster mit der Größe des Videos! Den Owner festlegen könnt ihr damit:

      VB.NET-Quellcode

      1. VideoDatei.Owner = Panel1

      ihr solltet das Panel1 in noch ein Panel stecken damit sich das Panel1 nicht immer mitvergrößert! Wenn ihr dies nicht tut Wird sich die Größe des Panels der Größe des Videos anpassen!

      Nun könnt ihr natürlich noch Pausieren und Stoppen!
      Für Audio:

      VB.NET-Quellcode

      1. AudioDatei.Pause() 'Pausieren
      2. AudioDatei.Stop() 'Stoppen

      Für Video:

      VB.NET-Quellcode

      1. VideoDatei.Pause() 'Pausieren
      2. VideoDatei.Stop() 'Stoppen


      und um die Aktuelle Position/ Länge des Liedes/Videos auszurechnen könnt ihr diesen Code verwenden:
      Für Audio:

      VB.NET-Quellcode

      1. Dim Länge As String = TimeSpan.FromSeconds(AudioDatei.Duration).Minutes.ToString("00") & ":" & CStr(TimeSpan.FromSeconds(AudioDatei.Duration).Seconds)
      2. Dim CurrentPos As String = TimeSpan.FromSeconds(AudioDatei.CurrentPosition).Minutes.ToString("00") & ":" & CStr(TimeSpan.FromSeconds(AudioDatei.CurrentPosition).Seconds)

      Für Video:

      VB.NET-Quellcode

      1. Dim Länge As String = TimeSpan.FromSeconds(VideoDatei.Duration).Minutes.ToString("00") & ":" & CStr(TimeSpan.FromSeconds(VideoDatei.Duration).Seconds)
      2. Dim CurrentPos As String = TimeSpan.FromSeconds(VideoDatei.CurrentPosition).Minutes.ToString("00") & ":" & CStr(TimeSpan.FromSeconds(VideoDatei.CurrentPosition).Seconds)

      die Beiden liefern eine Ausgabe im Format 00:00 aus!
      CurrentPosition und Duration geben die Totalen Sekunden zurück!

      Ihr könnt natürlich auch die Lautstärke angeben:
      Für Audio:

      VB.NET-Quellcode

      1. AudioDatei.Volume = 0

      Für Video:

      VB.NET-Quellcode

      1. VideoDatei.Audio.Volume = 0

      0 ist hier das Lauteste! Alles über 0 schlägt Fehler!
      das Minimum ist hier -10000 aber -10000 ist wirklich völlig kein Ton mehr!
      eigentlich ist -5000 auch so leise das man es fast garnicht hört! nur wenn man sehr genau hinhört!

      Beim Video muss man hier auf das Audio Element des Videos zugreifen!
      Man kann so zB auch die Musik des Videos stoppen wobei die Bilder weiterlaufen!

      VB.NET-Quellcode

      1. VideoDatei.Audio
      liefert nähmlich ein Audio Element!

      Es gibt auch verschiedene Events:
      Stopping - Wenn die Methode .Stop() aufgerufen wird
      Ending - Wenn die CurrentPosition = Duration ist ACHTUNG: Stopping ist nicht Ending!
      Pausing - Wenn die Methode .Pause() aufgerufen wurde
      Starting - Wenn die Methode .Play() aufgerufen wurde
      Disposing - Wenn die Methode .Dispose() aufgerufen wurde(Zerstört das Element!)

      Es gibt auch verschiedene Propertrys:
      Playing - True wenn die das Audio/Video gerade abspielt
      Paused - True wenn das Audio/Video pausiert ist
      Stopped - True wenn das Audio/Video gestoppt ist

      Ich werde hier jetzt keinen vollständigen Code mit hereinstellen da ihr denke ich mal den Code selber zusammstellt ;)
      so ich hoffe ich konnte hier jemanden helfen!
      wenn es Fehler gibt bitte hier Posten ;)
      auch bei fragen etc. hier Posten ;)

      progglord

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

      Welche Formate kann das den eigentlich abspielen? Und ich muss das als Admin starten damit es funktioniert
      „Ex-ter-mi-nate all knock-knock jokes! They are an enemy of the daleks “ A Dalek
      Mein Blog zum Thema Klarträumen

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

      @pasi2009: Es kann meines Erachtens alle gängigen Formate abspiele. Also wav, mp3 und wma kann es aufjedenfall :P.

      @F.A Development: Du kannst CurrentPosition auch setzen nicht nur lesen ;). Entweder du machst das auf die trackbar mit Prozentrechnung oder du setzt Maximum entsprechend.

      Du benötigst keinen Pfad ;). Wenn du das SDK richtig (!) installiert hast musst du bei Verweise hinzufügen den Reiter .Net auswählen und dort gibt es dann Microsoft.DirectX.AudioVideoPlayback etc.
      Nein nicht direkt. Außer du machst es so das du dir einen Stream zum Server aufbaut immer ausließt (nat. mit hohem Buffer :D) das dann als Datei speicherst und diese Datei abspielst ;). Ich habe das mal gemacht, hat soweit auch funktioniert, aber es hat manchmal ausetzer gehabt, das müsste man nat. noch durch gegeben caches machen ;).
      Alles gemacht aber weil ich dumm bin denke ich jetzt erst daran das es an VS 2010 Beta 2 liegen kann. Aber Trotzdem Danke.

      @ All: Man kann es nicht ihn Visual Studio 2010 Beta 1 oder Beta 2 verwenden. Auch nicht das WMP-Control!
      Also ich habe das Problem das bei machnen mp3 songs die .Duration also das ende in (sec) falsch angezeigt wird.

      Bei dem Lied von Lena steht: 4 min igrendwas. obwohl das lied nur 2 min 56 sec hat.

      Und am ende des liedes springt es auf den falschen wert!

      Könnte mir dabei jemand helfen um das Porblem zu beheben?

      MFG
      @gitarero: Ein wenig nachdenken und du wirst rausbekommen das du es mit Play fortfahren kannst.

      @mcandy007: Das ist mir auch aufgefallen, aber daran lässt sich nichts ändern. Du könntest die Länge nat. auch über mciSendString herrausbekommen.
      Hallo zusammen,

      folgenden Code habe ich simple in meiner Form angelegt...
      leider öffnet sich beim ausführen die Form nicht...
      wo liegt der Fehler?

      Imports Microsoft.DirectX
      Imports Microsoft.DirectX.AudioVideoPlayback

      VB.NET-Quellcode

      1. Public Class Player
      2. Private WithEvents VideoDatei As Video
      3. Private Sub Player_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      4. VideoDatei = New Video("C:\Users\asetzer\Downloads\TCP\Male\50.mpg")
      5. VideoDatei.Play()
      6. VideoDatei.Owner = Panel1
      7. End Sub
      8. End Class


      Vielen Dank vorab
      Hallo progglord,

      ich habe unter VB Studio 2008 (Win 10) einmal dieses Grundgerüst versucht.
      DirectX ist installiert, ebenso Framework.
      Eingestellt in den Projekteigenschaften ist "AnyCPU"
      Beim Laden des Videos bekomme ich die Fehlermeldung "ist keine zulässige Win32-Anwendung. (Ausnahme von HRESULT: 0x800700C1)"
      Bisher habe ich für meine Videowiedergabe den Mediaplayer benutzt per mci-Funktionen.

      Eine Idee, wo der Fehler liegt?

      Gruß Jürgen