Получить информацию о аудиодорожках указанного видеофайла - VB
Формулировка задачи:
Получить информацию о аудио дорожках указанного видеофайла
На WSH
Решение задачи: «Получить информацию о аудиодорожках указанного видеофайла»
textual
Листинг программы
Option Explicit Private Const ACMDRIVERDETAILS_SHORTNAME_CHARS As Long = 32 Private Const ACMDRIVERDETAILS_LONGNAME_CHARS As Long = 128 Private Const ACMDRIVERDETAILS_COPYRIGHT_CHARS As Long = 80 Private Const ACMDRIVERDETAILS_LICENSING_CHARS As Long = 128 Private Const ACMDRIVERDETAILS_FEATURES_CHARS As Long = 512 Private Type RECT left As Long top As Long right As Long bottom As Long End Type Private Type AVI_STREAM_INFO fccType As Long fccHandler As Long dwFlags As Long dwCaps As Long wPriority As Integer wLanguage As Integer dwScale As Long dwRate As Long dwStart As Long dwLength As Long dwInitialFrames As Long dwSuggestedBufferSize As Long dwQuality As Long dwSampleSize As Long rcFrame As RECT dwEditCount As Long dwFormatChangeCount As Long szName As String * 64 End Type Private Type WAVEFORMATEX wFormatTag As Integer nChannels As Integer nSamplesPerSec As Long nAvgBytesPerSec As Long nBlockAlign As Integer wBitsPerSample As Integer cbSize As Integer End Type Private Type ACMDRIVERDETAILSA cbStruct As Long fccType As String * 4 fccComp As String * 4 wMid As Integer wPid As Integer vdwACM As Long vdwDriver As Long fdwSupport As Long cFormatTags As Long cFilterTags As Long hIcon As Long szShortName As String * ACMDRIVERDETAILS_SHORTNAME_CHARS szLongName As String * ACMDRIVERDETAILS_LONGNAME_CHARS szCopyright As String * ACMDRIVERDETAILS_COPYRIGHT_CHARS szLicensing As String * ACMDRIVERDETAILS_LICENSING_CHARS szFeatures As String * ACMDRIVERDETAILS_FEATURES_CHARS End Type Private Declare Function AVIStreamOpenFromFile Lib "avifil32.dll" Alias "AVIStreamOpenFromFileW" (ppavi As Long, ByVal szFile As Long, ByVal fccType As Long, ByVal lParam As Long, ByVal mode As Long, pclsidHandler As Any) As Long Private Declare Function AVIStreamRelease Lib "avifil32.dll" (ByVal pAVIStream As Long) As Long Private Declare Function AVIStreamInfo Lib "avifil32.dll" (ByVal pAVIStream As Long, pAVIStreamInfo As AVI_STREAM_INFO, ByVal lSize As Long) As Long Private Declare Function AVIStreamReadFormat Lib "avifil32.dll" (ByVal pAVIStream As Long, ByVal lPos As Long, lpFormat As Any, ByRef lpcbFormat As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Declare Function acmStreamOpen Lib "msacm32" (phas As Long, ByVal had As Long, pwfxSrc As Any, pwfxDst As Any, ByVal pwfltr As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal fdwOpen As Long) As Long Private Declare Function acmStreamClose Lib "msacm32" (ByVal has As Long, ByVal fdwClose As Long) As Long Private Declare Function acmDriverID Lib "msacm32.dll" (ByVal hao As Long, phadid As Long, ByVal fdwDriverID As Long) As Long Private Declare Function acmDriverDetails Lib "msacm32.dll" Alias "acmDriverDetailsA" (ByVal hadid As Long, padd As ACMDRIVERDETAILSA, ByVal fdwDetails As Long) As Long Private Declare Sub AVIFileInit Lib "avifil32.dll" () Private Declare Sub AVIFileExit Lib "avifil32.dll" () Private Const ACM_STREAMOPENF_NONREALTIME As Integer = &H4 Private Const streamtypeAUDIO As Long = 1935963489 Private Sub Form_Load() GetAudioStreamInfo "D:\Òîëèê\Ôèëüìû\total recall.avi" End Sub Private Function GetAudioStreamInfo(FileName As String) As Boolean Dim aud As Long, si As AVI_STREAM_INFO, buf() As Byte, wf As WAVEFORMATEX, l As Long Dim df As WAVEFORMATEX, has As Long, did As Long, dd As ACMDRIVERDETAILSA Dim comp As String, bitrate As Long, sr As Long, ch As Long, bps As Integer AVIFileInit If AVIStreamOpenFromFile(aud, StrPtr(FileName), streamtypeAUDIO, 0, 0, ByVal 0&) = 0 Then AVIStreamInfo aud, si, Len(si) AVIStreamReadFormat aud, 0, ByVal 0&, l ReDim buf(l - 1) AVIStreamReadFormat aud, 0, buf(0), l CopyMemory df, buf(0), IIf(Len(df) < l, Len(df), l) sr = df.nSamplesPerSec ch = df.nChannels If df.wFormatTag <> 1 Then bitrate = Fix(0.5 + df.nAvgBytesPerSec * (1# / 1000#)) * 8 df.cbSize = 0 df.wFormatTag = 1 df.wBitsPerSample = 16 df.nBlockAlign = df.nChannels * 2 df.nAvgBytesPerSec = df.nSamplesPerSec * df.nBlockAlign If acmStreamOpen(has, 0, buf(0), df, 0, 0, 0, ACM_STREAMOPENF_NONREALTIME) = 0 Then acmDriverID has, did, 0 dd.cbStruct = Len(dd) acmDriverDetails did, dd, 0 acmStreamClose has, 0 End If comp = RTrim(dd.szLongName) Debug.Print "Bitrate:", bitrate; "kb/s" Else Debug.Print "Bits:", df.wBitsPerSample comp = "WAVE PCM" End If Debug.Print "Channels:", ch Debug.Print "Compression:", comp Debug.Print "Sample rate:", sr; "Hz" Debug.Print "Duration:", HMS(si.dwLength * (si.dwScale / si.dwRate)) End If AVIStreamRelease aud AVIFileExit End Function Private Function HMS(sec As Single) As String HMS = Fix(sec) \ 3600 & ":" & _ (Fix(sec) Mod 3600) \ 60 & ":" & _ (Fix(sec) Mod 60) & "." & _ Format$((sec - Fix(sec)) * 100, "00") End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д