Forum in repository mode. No new members allowed.
QuoteThe Drakes are a big disappointment imo.
' ========================================================================================
' Converts a string into a 16-byte (128-bit) Globally Unique Identifier (GUID)
' To be valid, the string must contain exactly 32 hexadecimal digits, delimited by hyphens
' and enclosed by curly braces. For example: {B09DE715-87C1-11D1-8BE3-0000F8754DA1}
' If pwszGuidText is omited, AfxGuid generates a new unique guid.
' Remarks: I have need to call the UuidCreate function dynamically because, at the time of
' writing, the library for the RPCRT4.DLL seems broken and the linker fails.
' ========================================================================================
PRIVATE FUNCTION AfxGuid (BYVAL pwszGuidText AS WSTRING PTR = NULL) AS GUID
DIM rguid AS GUID
IF pwszGuidText = NULL THEN
' // Generate a new guid
DIM AS ANY PTR pLib = DyLibLoad("RPCRT4.DLL")
IF pLib THEN
DIM pProc AS FUNCTION (BYVAL Uuid AS UUID PTR) AS RPC_STATUS
pProc = DyLibSymbol(pLib, "UuidCreate")
IF pProc THEN pProc(@rguid)
DyLibFree(pLib)
END IF
ELSE
CLSIDFromString(pwszGuidText, @rGuid)
END IF
RETURN rguid
END FUNCTION
' ========================================================================================
#COMPILE EXE
#DIM ALL
'#utility roca3 'use José Roca includes
#Include "win32api.inc"
#Include "shobjidl.inc"
#Include "propkey.inc"
FUNCTION duration(file AS WSTRINGZ) AS LONG
'***********************************************************************************************
' return duration of an audio file in ms, -1 for fail
'***********************************************************************************************
LOCAL d AS QUAD
LOCAL propVar AS PropVariant
LOCAL hr AS LONG
LOCAL pPropStore AS IPropertyStore
hr = SHGetPropertyStoreFromParsingName(BYVAL VARPTR(file), NOTHING, %GPS_DEFAULT, $IID_IPropertyStore, pPropStore)
IF hr = %S_OK THEN
hr = pPropStore.GetValue(PKEY_Media_Duration, propVar)
IF hr = %S_OK THEN
d = propVar.uhVal 'time in 100ns
ELSE
FUNCTION = -1
EXIT FUNCTION
END IF
pPropStore = NOTHING
ELSE
FUNCTION = -1
EXIT FUNCTION
END IF
FUNCTION = d/10000 'time in ms
END FUNCTION
FUNCTION PBMAIN () AS LONG
'***********************************************************************************************
' -> change paths ... (must be a full path)
'***********************************************************************************************
? STR$(duration("C:\PBwin10\IDE\Projects\mp3\blues.mp3"))
? STR$(duration("C:\PBwin10\IDE\Projects\mp3\cher.mid"))
? STR$(duration("C:\PBwin10\IDE\Projects\mp3\ring05.wav"))
END FUNCTION
'#COMPILER FREEBASIC
'#COMPILE CONSOLE 32 '64
#INCLUDE ONCE "windows.bi"
#INCLUDE ONCE "win\shobjidl.bi"
FUNCTION duration (file AS WSTRING) AS LONG
'***********************************************************************************************
' return duration of an audio file in ms, -1 for fail
'***********************************************************************************************
DIM d AS ULONGINT
DIM propVar AS PropVariant
DIM hr AS HRESULT
DIM pPropStore AS IPropertyStore PTR
DIM PKEY_Media_Duration AS PROPERTYKEY
'***********************************************************************************************
' MACRO PKEY_Media_Duration = GUID$("{64440490-4C8B-11D1-8B70-080036B11A03}") & MKDWD$(3)
' would be nice to have something like GUID$ for FB too !
'***********************************************************************************************
PKEY_Media_Duration.fmtid.data1 = &H64440490
PKEY_Media_Duration.fmtid.data2 = &H4C8B
PKEY_Media_Duration.fmtid.data3 = &H11D1
PKEY_Media_Duration.fmtid.data4(0) = &H8B
PKEY_Media_Duration.fmtid.data4(1) = &H70
PKEY_Media_Duration.fmtid.data4(2) = &H08
PKEY_Media_Duration.fmtid.data4(3) = &H00
PKEY_Media_Duration.fmtid.data4(4) = &H36
PKEY_Media_Duration.fmtid.data4(5) = &HB1
PKEY_Media_Duration.fmtid.data4(6) = &H1A
PKEY_Media_Duration.fmtid.data4(7) = &H03
PKEY_Media_Duration.pid = 3
coinitialize(0) 'a must in FB
hr = SHGetPropertyStoreFromParsingName(varptr(file), 0, GPS_DEFAULT, @IID_IPropertyStore, @pPropStore)
IF hr = S_OK THEN
hr = IPropertyStore_GetValue(pPropStore, @PKEY_Media_Duration, @propVar)
IF hr = S_OK THEN
d = propVar.uhVal.QuadPart 'time in 100ns
ELSE
couninitialize
RETURN -1
END IF
IPropertyStore_Release(pPropStore)
ELSE
couninitialize
RETURN -1
END IF
couninitialize
RETURN d/10000 'time in ms
END FUNCTION
'***********************************************************************************************
' -> change paths ... (must be a full path)
'***********************************************************************************************
PRINT duration("C:\PBwin10\IDE\Projects\mp3\blues.mp3")
PRINT duration("C:\PBwin10\IDE\Projects\mp3\cher.mid")
PRINT duration("C:\PBwin10\IDE\Projects\mp3\ring05.wav")
SLEEP
Page created in 0.136 seconds with 13 queries.