woot
The Last Letter Game
Collapse
This topic is closed.
X
X
-
-
-
-
-
-
Public Shared Function GetAttributes( _
ByVal filename As String) As MusicFileInfo
Dim mfi As New MusicFileInfo()
Dim editor As IWMMetadataEditor
Dim headerInfo As IWMHeaderInfo3
Dim uHR As UInt32
Dim hr As Int32
uHR = WMFSDKFunctions.WMCreateEditor(editor)
hr = Convert.ToInt32(uHR)
If hr = 0 Then
uHR = editor.Open(filename)
hr = Convert.ToInt32(uHR)
If hr = 0 Then
headerInfo = DirectCast(editor, IWMHeaderInfo3)
Dim value As Byte()
Dim pType As WMT_ATTR_DATATYPE
value = GetAttributeByName(headerInfo, _
"bitrate", pType)
If pType = WMT_ATTR_DATATYPE.WMT_TYPE_DWORD Then
mfi.Bitrate = Convert.ToInt64( _
BitConverter.ToUInt32(value, 0))
End If
value = GetAttributeByName(headerInfo, _
"WM/AlbumTitle", pType)
If pType = WMT_ATTR_DATATYPE.WMT_TYPE_STRING Then
'ConvertToString is a function to convert
'from byte array to String, taking
'unicode encoding into account
mfi.AlbumTitle = ConvertToString(value)
End If
value = GetAttributeByName(headerInfo, _
"WM/Genre", pType)
If pType = WMT_ATTR_DATATYPE.WMT_TYPE_STRING Then
mfi.Genre = ConvertToString(value)
End If
value = GetAttributeByName(headerInfo, _
"Author", pType)
If pType = WMT_ATTR_DATATYPE.WMT_TYPE_STRING Then
mfi.Authors = ConvertToString(value)
End If
value = GetAttributeByName(headerInfo, _
"WM/Track", pType)
If pType = WMT_ATTR_DATATYPE.WMT_TYPE_STRING Then
mfi.Track = CInt(ConvertToString(value))
End If
value = GetAttributeByName(headerInfo, _
"Title", pType)
If pType = WMT_ATTR_DATATYPE.WMT_TYPE_STRING Then
mfi.Title = ConvertToString(value)
End If
value = GetAttributeByName(headerInfo, _
"WM/Year", pType)
If pType = WMT_ATTR_DATATYPE.WMT_TYPE_STRING Then
mfi.Year = CInt(ConvertToString(value))
End If
value = GetAttributeByName(headerInfo, _
"WM/Composer", pType)
If pType = WMT_ATTR_DATATYPE.WMT_TYPE_STRING Then
mfi.Composers = ConvertToString(value)
End If
value = GetAttributeByName(headerInfo, _
"Duration", pType)
If pType = WMT_ATTR_DATATYPE.WMT_TYPE_QWORD Then
mfi.Duration = Convert.ToDecimal( _
BitConverter.ToUInt64(value, 0))
End If
value = GetAttributeByName(headerInfo, _
"WM/MCDI", pType)
If pType = WMT_ATTR_DATATYPE.WMT_TYPE_BINARY Then
mfi.TOC = BitConverter.ToString(value, 0)
End If
End If
End If
Return mfi
End Function
Private Shared Function GetAttributeByName( _
ByVal headerInfo As IWMHeaderInfo3, _
ByVal name As String, _
ByRef pType As WMT_ATTR_DATATYPE) As Byte()
Dim streamNum As UInt16 = Convert.ToUInt16(0)
Dim uHR As UInt32
Dim valueLength As UInt16
Dim arrLength As Int32
Dim hr As Int32
uHR = headerInfo.GetAttributeByName( _
streamNum, name, pType, Nothing, valueLength)
hr = Convert.ToInt32(uHR)
If hr = 0 Then
arrLength = Convert.ToInt32(valueLength)
Dim value(arrLength) As Byte
uHR = headerInfo.GetAttributeByName( _
streamNum, name, pType, value, valueLength)
hr = Convert.ToInt32(uHR)
If hr = 0 Then
Return value
End If
End If
End Function
Comment

Comment