Spieldauer MP3/MP4 Datei ermitteln

  • VB.NET

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von -Franky-.

    DTF schrieb:

    Also via IPropertyStore geht es doch
    Aber sowas von und ist kaum aufwendiger als die MF-Variante. :D

    WinRT-Variante (war nur ein Testprojekt, daher ist da ein bissel mehr drin, mit Verweis auf die Windows.winmd, zusätzlich das Nuget-Paket: System.Runtime.WindowsRuntime.dll, kann man natürlich auch ohne Verweis und NuGet ausschließlich mit WinRT COM-Interfaces und APIs machen)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports Windows.Storage
    2. Imports Windows.Storage.FileProperties
    3. Public Class Form1
    4. Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim FOP As New Pickers.FileOpenPicker With {
    6. .SuggestedStartLocation = Pickers.PickerLocationId.ComputerFolder,
    7. .ViewMode = Pickers.PickerViewMode.List
    8. }
    9. Dim FTF As IList(Of String) = FOP.FileTypeFilter
    10. FTF.Add("*")
    11. If FOP.InitializeWithWindow(Me) Then
    12. Dim StorFile As StorageFile = Await FOP.PickSingleFileAsync
    13. If StorFile IsNot Nothing Then
    14. GetFileProperties(StorFile.Path)
    15. End If
    16. End If
    17. End Sub
    18. Private Async Sub GetFileProperties(File As String)
    19. Dim StorFile As StorageFile = Await StorageFile.GetFileFromPathAsync(File)
    20. If StorFile IsNot Nothing Then
    21. Dim FileProperties As IDictionary(Of String, Object) = Await StorFile.Properties.RetrievePropertiesAsync(Nothing)
    22. If FileProperties IsNot Nothing Then
    23. Debug.Print("PropertyCount: " & FileProperties.Count.ToString)
    24. If FileProperties.Count > 0 Then
    25. Try
    26. For Each ValuePair As KeyValuePair(Of String, Object) In FileProperties
    27. Debug.Print(ValuePair.Key & ": " & GetValuePairValueAsString(ValuePair))
    28. Next
    29. Catch ex As Exception
    30. ' do nothing
    31. End Try
    32. End If
    33. End If
    34. Dim ExtraProperties As New List(Of String)
    35. 'ExtraProperties.Add("{b725f130-47ef-101a-a5f1-02608c9eebac} 18")
    36. ExtraProperties.Add("System.FileAllocationSize")
    37. Dim ExtraFileProperties As IDictionary(Of String, Object) = Await StorFile.Properties.RetrievePropertiesAsync(ExtraProperties)
    38. If ExtraFileProperties IsNot Nothing Then
    39. If ExtraFileProperties.Count > 0 Then
    40. Try
    41. For Each ValuePair As KeyValuePair(Of String, Object) In ExtraFileProperties
    42. Debug.Print(ValuePair.Key & ": " & GetValuePairValueAsString(ValuePair))
    43. Next
    44. Catch ex As Exception
    45. ' do nothing
    46. End Try
    47. End If
    48. End If
    49. Debug.Print("Name: " & StorFile.Name)
    50. Debug.Print("Path: " & StorFile.Path)
    51. Debug.Print("DateCreated: " & StorFile.DateCreated.DateTime.ToString)
    52. Debug.Print("ContentType: " & StorFile.ContentType)
    53. Debug.Print("DisplayName: " & StorFile.DisplayName)
    54. Debug.Print("DisplayType: " & StorFile.DisplayType)
    55. Debug.Print("FileType: " & StorFile.FileType)
    56. Debug.Print("FolderRelativeId: " & StorFile.FolderRelativeId)
    57. Debug.Print("Attributes: " & StorFile.Attributes.ToString)
    58. Debug.Print("ProviderId: " & StorFile.Provider.Id)
    59. Debug.Print("ProviderDisplayName: " & StorFile.Provider.DisplayName)
    60. Dim StdProperties As BasicProperties = Await StorFile.GetBasicPropertiesAsync
    61. If StdProperties IsNot Nothing Then
    62. Debug.Print("ItemDate: " & StdProperties.ItemDate.DateTime.ToString)
    63. Debug.Print("DateModified: " & StdProperties.DateModified.DateTime.ToString)
    64. Debug.Print("Size: " & StdProperties.Size.ToString)
    65. End If
    66. Dim ContentType As String = StorFile.ContentType
    67. If ContentType.Contains("image") Then
    68. Dim ImgProperties As ImageProperties = Await StorFile.Properties.GetImagePropertiesAsync
    69. If ImgProperties IsNot Nothing Then
    70. Debug.Print("Orientation: " & ImgProperties.Orientation.ToString)
    71. Debug.Print("CameraManufacturer: " & ImgProperties.CameraManufacturer)
    72. Debug.Print("CameraModel: " & ImgProperties.CameraModel)
    73. Debug.Print("Width: " & ImgProperties.Width.ToString)
    74. Debug.Print("Height: " & ImgProperties.Height.ToString)
    75. Debug.Print("Longitude: " & ImgProperties.Longitude.ToString)
    76. Debug.Print("Latitude: " & ImgProperties.Latitude.ToString)
    77. Debug.Print("Rating: " & ImgProperties.Rating.ToString)
    78. Debug.Print("DateTaken: " & ImgProperties.DateTaken.DateTime.ToString)
    79. Debug.Print("Title: " & ImgProperties.Title)
    80. Debug.Print("Keywords: " & String.Join(",", ImgProperties.Keywords))
    81. Debug.Print("PeopleNames: " & String.Join(",", ImgProperties.PeopleNames))
    82. End If
    83. ElseIf ContentType.Contains("audio") Then
    84. Dim MusProperties As MusicProperties = Await StorFile.Properties.GetMusicPropertiesAsync
    85. If MusProperties IsNot Nothing Then
    86. Debug.Print("Artist: " & MusProperties.Artist)
    87. Debug.Print("Album: " & MusProperties.Album)
    88. Debug.Print("Subtitle: " & MusProperties.Subtitle)
    89. Debug.Print("Writers: " & String.Join(",", MusProperties.Writers))
    90. Debug.Print("Producers: " & String.Join(",", MusProperties.Producers))
    91. Debug.Print("AlbumArtist: " & MusProperties.AlbumArtist)
    92. Debug.Print("Bitrate: " & MusProperties.Bitrate.ToString)
    93. Debug.Print("Composers: " & String.Join(",", MusProperties.Composers))
    94. Debug.Print("Conductors: " & String.Join(",", MusProperties.Conductors))
    95. Debug.Print("Duration: " & MusProperties.Duration.ToString)
    96. Debug.Print("Genre: " & String.Join(",", MusProperties.Genre))
    97. Debug.Print("Publisher: " & MusProperties.Publisher)
    98. Debug.Print("Rating: " & MusProperties.Rating.ToString)
    99. Debug.Print("Subtitle: " & MusProperties.Subtitle)
    100. Debug.Print("Title: " & MusProperties.Title)
    101. Debug.Print("TrackNumber: " & MusProperties.TrackNumber.ToString)
    102. Debug.Print("Year: " & MusProperties.Year.ToString)
    103. End If
    104. ElseIf ContentType.Contains("video") Then
    105. Dim VidProperties As VideoProperties = Await StorFile.Properties.GetVideoPropertiesAsync
    106. If VidProperties IsNot Nothing Then
    107. Debug.Print("Subtitle: " & VidProperties.Subtitle)
    108. Debug.Print("Writers: " & String.Join(",", VidProperties.Writers))
    109. Debug.Print("Latitude: " & VidProperties.Latitude.ToString)
    110. Debug.Print("Longitude: " & VidProperties.Longitude.ToString)
    111. Debug.Print("Producers: " & String.Join(",", VidProperties.Producers))
    112. Debug.Print("Orientation: " & VidProperties.Orientation.ToString)
    113. Debug.Print("Bitrate: " & VidProperties.Bitrate.ToString)
    114. Debug.Print("Directors: " & String.Join(",", VidProperties.Directors))
    115. Debug.Print("Duration: " & VidProperties.Duration.ToString)
    116. Debug.Print("Height: " & VidProperties.Height.ToString)
    117. Debug.Print("Width: " & VidProperties.Width.ToString)
    118. Debug.Print("Orientation: " & VidProperties.Orientation.ToString)
    119. Debug.Print("Publisher: " & VidProperties.Publisher)
    120. Debug.Print("Rating: " & VidProperties.Rating.ToString)
    121. Debug.Print("Title: " & VidProperties.Title)
    122. Debug.Print("Year: " & VidProperties.Year.ToString)
    123. End If
    124. Else
    125. Dim DocProperties As DocumentProperties = Await StorFile.Properties.GetDocumentPropertiesAsync
    126. If DocProperties IsNot Nothing Then
    127. Debug.Print("Author: " & String.Join(",", DocProperties.Author))
    128. Debug.Print("Keywords: " & String.Join(",", DocProperties.Keywords))
    129. Debug.Print("Comment: " & DocProperties.Comment)
    130. Debug.Print("Title: " & DocProperties.Title)
    131. End If
    132. End If
    133. End If
    134. End Sub
    135. Private Function GetValuePairValueAsString(ValuePair As KeyValuePair(Of String, Object)) As String
    136. Dim strRet As String = String.Empty
    137. If ValuePair.Value IsNot Nothing Then
    138. Select Case ValuePair.Value.GetType
    139. Case GetType(String)
    140. strRet = CType(ValuePair.Value, String)
    141. Case GetType(String())
    142. strRet = String.Join(",", CType(ValuePair.Value, String()))
    143. Case GetType(Boolean)
    144. strRet = CType(ValuePair.Value, Boolean).ToString
    145. Case GetType(Short)
    146. strRet = CType(ValuePair.Value, Short).ToString
    147. Case GetType(UShort)
    148. strRet = CType(ValuePair.Value, UShort).ToString
    149. Case GetType(Integer)
    150. strRet = CType(ValuePair.Value, Integer).ToString
    151. Case GetType(UInteger)
    152. strRet = CType(ValuePair.Value, UInteger).ToString
    153. Case GetType(Long)
    154. strRet = CType(ValuePair.Value, Long).ToString
    155. Case GetType(ULong)
    156. strRet = CType(ValuePair.Value, ULong).ToString
    157. Case GetType(Single)
    158. strRet = CType(ValuePair.Value, Single).ToString
    159. Case GetType(Double)
    160. strRet = CType(ValuePair.Value, Double).ToString
    161. Case GetType(DateTimeOffset)
    162. strRet = CType(ValuePair.Value, DateTimeOffset).DateTime.ToString
    163. Case GetType(Guid)
    164. strRet = CType(ValuePair.Value, Guid).ToString
    165. Case GetType(Object())
    166. For Each Obj In CType(ValuePair.Value, Object())
    167. Select Case Obj.GetType
    168. Case GetType(String)
    169. strRet = CType(Obj, String)
    170. Case GetType(String())
    171. strRet = String.Join(",", CType(Obj, String()))
    172. Case GetType(Boolean)
    173. strRet = CType(Obj, Boolean).ToString
    174. Case GetType(Short)
    175. strRet = CType(Obj, Short).ToString
    176. Case GetType(UShort)
    177. strRet = CType(Obj, UShort).ToString
    178. Case GetType(Integer)
    179. strRet = CType(Obj, Integer).ToString
    180. Case GetType(UInteger)
    181. strRet = CType(Obj, UInteger).ToString
    182. Case GetType(Long)
    183. strRet = CType(Obj, Long).ToString
    184. Case GetType(ULong)
    185. strRet = CType(Obj, ULong).ToString
    186. Case GetType(Single)
    187. strRet = CType(Obj, Single).ToString
    188. Case GetType(Double)
    189. strRet = CType(Obj, Double).ToString
    190. Case GetType(DateTimeOffset)
    191. strRet = CType(Obj, DateTimeOffset).DateTime.ToString
    192. Case GetType(Guid)
    193. strRet = CType(Obj, Guid).ToString
    194. Case Else
    195. strRet = "Unknown ObjectArrayType: " & Obj.GetType.ToString
    196. End Select
    197. Next
    198. Case Else
    199. strRet = "Unknown ValuePairType: " & ValuePair.Value.GetType.ToString
    200. End Select
    201. End If
    202. Return strRet
    203. End Function
    204. End Class


    Das reicht für diese Jahr. :D
    Mfg -Franky-
    Die WinRT Interfaces wären für mich interessant. Hab zwar mit den BluetoothAPIs code gemacht, aber hab noch unerklärliche Bugs drin. Mache viel mit BLE und das CSWinRT Project von Nuget zickt auch hin und wieder rum. Die windows.winmd lässt sich ja nicht mit aktuellen NET verwenden, so muss ich dann alte Sachen nutzen. Das wird im nächsten Jahr auf jeden Fall ein Projekt sein das ich machen muss.

    So jetzt zurück zur UnrealEngine, hab VS endlich für die Unreal Engine vorbereitet. Die Blueprints sind ja ganz "Epic", schon irgendwie toll sich die Logik so zurechtklicken zu können, aber ich schreibe lieber Code, finde ich übersichtlicher als wie Blueprints die man auf keine Kuhhaut drucken könnte.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    DTF schrieb:

    Die WinRT Interfaces wären für mich interessant.
    Wenn Du das Windows SDK installiert hast, dann findest Du auch in einem Unterordner auch alle WinRT-Klassen (H- und IDL-Dateien) die ja die COM-Interfaces beinhalten. Zur Not findet man auch alles auf GitHub.
    Mfg -Franky-
    Vielen Dank für eure Ratschläge.

    Ich kam erst jetzt dazu, die Sache zu testen: tatsächlich ist es so wie @Franky gechrieben hat - wenn man die Leerzeichen aus dem Pfad entfernt, dann läuft die Sache !

    Ich habe keine Ahnung woher die Blanks kommen - das Programm habe ich längere Zeit nicht angefasst und erst jetzt neu kompiliert. Also wissentlich habe ich diese Blanks nicht einfügt - vielleicht wurden die früher toleriert ... Jedenfalls erhalte ich jetzt wieder die korrekte Laufzeit. Mein Tag ist gerettet. Problem gelöst!

    LG
    Peter
    @Peter329 Wie geschrieben gab es mal Probleme per mciSendString. Von daher teste das ausgiebig mit MP3s mit Bitraten größer 128kbit\s und mit VBR-MP3s. Nicht das Dich wunderst das da plötzlich falsche Zeiten per mciSendString zurück geliefert werden falls die Probleme noch bestehen.
    Mfg -Franky-

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