-
Simpel authored
Some windows (win7?) lacking vcruntime140_1.dll what bmxtranswrap is needing. It can't be checked if dll can be found at c:\windows\system32. So provide it anyway in %temp%. Signed-off-by:
Conrad Zelck <git@simpel.cc>
Simpel authoredSome windows (win7?) lacking vcruntime140_1.dll what bmxtranswrap is needing. It can't be checked if dll can be found at c:\windows\system32. So provide it anyway in %temp%. Signed-off-by:
Conrad Zelck <git@simpel.cc>
MXF-Track-Swap.au3 32.76 KiB
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=icon\swap.ico
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_Comment=Swaps audio tracks in mxf files.
#AutoIt3Wrapper_Res_Description=Swaps audio tracks in mxf files.
#AutoIt3Wrapper_Res_Fileversion=1.0.0.10
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=p
#AutoIt3Wrapper_Res_LegalCopyright=Conrad Zelck
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_Field=Copyright|Conrad Zelck
#AutoIt3Wrapper_Res_Field=Compile Date|%date% %time%
#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7
#AutoIt3Wrapper_Run_Au3Stripper=y
#Au3Stripper_Parameters=/mo
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <ColorConstants.au3>
#include <FileConstants.au3>
#include <AutoItConstants.au3>
#include <Date.au3>
#include <File.au3>
#include <TrayCox.au3>
; Known issues:
; - if the external stereo wav file is routed to only one channel (e.g. "[R]") it breaks: "Filter channelsplit:FL has an unconnected outut"
AutoItSetOption("GUICoordMode", 1)
Global $g_bMxfAvailable = False
Global $g_bWavAvailable = False
Global $g_hGUI
Global $g_sMXFFile, $g_sWAVFile
Global $g_aDropFiles[0]
; if parameter given via sendto or drag&drop onto AppIcon
ConsoleWrite("$CmdLineRaw: " & $CmdLineRaw & @CRLF)
If $CmdLine[0] > 0 Then
_CheckForInputFiles($CmdLine)
EndIf
; if no parameters are given open a drag and drop gui
$g_hGUI = GUICreate("MXF-Track-Swap", 400, 340, -1, -1, -1, $WS_EX_ACCEPTFILES)
GUICtrlCreateLabel(@CRLF & "Drag&&drop your files here." & @CRLF & @CRLF & "You must provide an MXF file." & @CRLF & "Additionally you can provide a stereo WAV file too." , 20, 20, 360, 100, BitOR($SS_CENTER, $SS_SUNKEN))
GUICtrlSetFont(-1, 10)
GUICtrlCreateLabel("MXF file:" , 20, 140, 360, 20)
GUICtrlSetFont(-1, 10)
Local $hLMXF = GUICtrlCreateLabel(_FileName($g_sMXFFile) , 20, 170, 360, 20)
GUICtrlSetFont(-1, 10)
GUICtrlCreateLabel("WAV file:" , 20, 210, 360, 20)
GUICtrlSetFont(-1, 10)
Local $hLWAV = GUICtrlCreateLabel(_FileName($g_sWAVFile) , 20, 240, 360, 20)
GUICtrlSetFont(-1, 10)
Local $hBNext = GUICtrlCreateButton("Next", 100, 290, 200, 30, $BS_DEFPUSHBUTTON)
GUICtrlSetFont(-1, 10)
If Not $g_bMxfAvailable Then GUICtrlSetState(-1, $GUI_DISABLE)
Local $FILES_DROPPED = GUICtrlCreateDummy()
GUIRegisterMsg($WM_DROPFILES, 'WM_DROPFILES_FUNC')
GUISetState()
Local $sFile
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $FILES_DROPPED
_CheckForInputFiles($g_aDropFiles)
If $g_bMxfAvailable Then
GUICtrlSetState($hBNext, $GUI_ENABLE)
GUICtrlSetData($hLMXF, _FileName($g_sMXFFile))
EndIf
If $g_bWavAvailable Then GUICtrlSetData($hLWAV, _FileName($g_sWAVFile))
Case $hBNext
ExitLoop
EndSwitch
WEnd
GUIDelete($g_hGUI)
#Region - GUI Routing
AutoItSetOption("GUICoordMode", 0)
$g_hGUI = GUICreate("MXF-Track-Swap Routing", 320, 450)
GUICtrlCreateLabel("Source", 20, 20, 200, 20)
GUICtrlCreateLabel("Mute", 10, 20, 30, 20)
GUICtrlCreateLabel("A1", 10, 30, 20, 20)
GUICtrlCreateLabel("A2", -1, 20, 20, 20)
GUICtrlCreateLabel("A3", -1, 30, 20, 20)
GUICtrlCreateLabel("A4", -1, 20, 20, 20)
GUICtrlCreateLabel("A5", -1, 30, 20, 20)
GUICtrlCreateLabel("A6", -1, 20, 20, 20)
GUICtrlCreateLabel("A7", -1, 30, 20, 20)
GUICtrlCreateLabel("A8", -1, 20, 20, 20)
Local $hLL = GUICtrlCreateLabel("wav L", -18, 30, 32, 20)
Local $hLR = GUICtrlCreateLabel("wav R", -1, 20, 32, 20)
If Not $g_bWavAvailable Then
GUICtrlSetColor($hLL, $COLOR_SILVER)
GUICtrlSetColor($hLR, $COLOR_SILVER)
EndIf
GUIStartGroup()
Global $g_hRm1 = GUICtrlCreateRadio("", 50, -253, 20, 20)
Global $g_hR11 = GUICtrlCreateRadio("", -1, 30, 20, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $g_hR21 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR31 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR41 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR51 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR61 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR71 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR81 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hRL1 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hRR1 = GUICtrlCreateRadio("", -1, 20, 20, 20)
If Not $g_bWavAvailable Then
GUICtrlSetState($g_hRL1, $GUI_DISABLE)
GUICtrlSetState($g_hRR1, $GUI_DISABLE)
EndIf
GUICtrlCreateLabel("A1", 1, 30, -1, -1)
GUIStartGroup()
Global $g_hRm2 = GUICtrlCreateRadio("", 20, -280, 20, 20)
Global $g_hR12 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR22 = GUICtrlCreateRadio("", -1, 20, 20, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $g_hR32 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR42 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR52 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR62 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR72 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR82 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hRL2 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hRR2 = GUICtrlCreateRadio("", -1, 20, 20, 20)
If Not $g_bWavAvailable Then
GUICtrlSetState($g_hRL2, $GUI_DISABLE)
GUICtrlSetState($g_hRR2, $GUI_DISABLE)
EndIf
GUICtrlCreateLabel("A2", 1, 30, -1, -1)
GUIStartGroup()
Global $g_hRm3 = GUICtrlCreateRadio("", 30, -280, 20, 20)
Global $g_hR13 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR23 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR33 = GUICtrlCreateRadio("", -1, 30, 20, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $g_hR43 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR53 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR63 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR73 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR83 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hRL3 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hRR3 = GUICtrlCreateRadio("", -1, 20, 20, 20)
If Not $g_bWavAvailable Then
GUICtrlSetState($g_hRL3, $GUI_DISABLE)
GUICtrlSetState($g_hRR3, $GUI_DISABLE)
EndIf
GUICtrlCreateLabel("A3", 1, 30, -1, -1)
GUIStartGroup()
Global $g_hRm4 = GUICtrlCreateRadio("", 20, -280, 20, 20)
Global $g_hR14 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR24 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR34 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR44 = GUICtrlCreateRadio("", -1, 20, 20, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $g_hR54 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR64 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR74 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR84 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hRL4 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hRR4 = GUICtrlCreateRadio("", -1, 20, 20, 20)
If Not $g_bWavAvailable Then
GUICtrlSetState($g_hRL4, $GUI_DISABLE)
GUICtrlSetState($g_hRR4, $GUI_DISABLE)
EndIf
GUICtrlCreateLabel("A4", 1, 30, -1, -1)
GUIStartGroup()
Global $g_hRm5 = GUICtrlCreateRadio("", 30, -280, 20, 20)
Global $g_hR15 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR25 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR35 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR45 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR55 = GUICtrlCreateRadio("", -1, 30, 20, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $g_hR65 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR75 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR85 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hRL5 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hRR5 = GUICtrlCreateRadio("", -1, 20, 20, 20)
If Not $g_bWavAvailable Then
GUICtrlSetState($g_hRL5, $GUI_DISABLE)
GUICtrlSetState($g_hRR5, $GUI_DISABLE)
EndIf
GUICtrlCreateLabel("A5", 1, 30, -1, -1)
GUIStartGroup()
Global $g_hRm6 = GUICtrlCreateRadio("", 20, -280, 20, 20)
Global $g_hR16 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR26 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR36 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR46 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR56 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR66 = GUICtrlCreateRadio("", -1, 20, 20, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $g_hR76 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR86 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hRL6 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hRR6 = GUICtrlCreateRadio("", -1, 20, 20, 20)
If Not $g_bWavAvailable Then
GUICtrlSetState($g_hRL6, $GUI_DISABLE)
GUICtrlSetState($g_hRR6, $GUI_DISABLE)
EndIf
GUICtrlCreateLabel("A6", 1, 30, -1, -1)
GUIStartGroup()
Global $g_hRm7 = GUICtrlCreateRadio("", 30, -280, 20, 20)
Global $g_hR17 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR27 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR37 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR47 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR57 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR67 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR77 = GUICtrlCreateRadio("", -1, 30, 20, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $g_hR87 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hRL7 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hRR7 = GUICtrlCreateRadio("", -1, 20, 20, 20)
If Not $g_bWavAvailable Then
GUICtrlSetState($g_hRL7, $GUI_DISABLE)
GUICtrlSetState($g_hRR7, $GUI_DISABLE)
EndIf
GUICtrlCreateLabel("A7", 1, 30, -1, -1)
GUIStartGroup()
Global $g_hRm8 = GUICtrlCreateRadio("", 20, -280, 20, 20)
Global $g_hR18 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR28 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR38 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR48 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR58 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR68 = GUICtrlCreateRadio("", -1, 20, 20, 20)
Global $g_hR78 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hR88 = GUICtrlCreateRadio("", -1, 20, 20, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
Global $g_hRL8 = GUICtrlCreateRadio("", -1, 30, 20, 20)
Global $g_hRR8 = GUICtrlCreateRadio("", -1, 20, 20, 20)
If Not $g_bWavAvailable Then
GUICtrlSetState($g_hRL8, $GUI_DISABLE)
GUICtrlSetState($g_hRR8, $GUI_DISABLE)
EndIf
GUICtrlCreateLabel("A8", 1, 30, -1, -1)
GUICtrlCreateLabel("Target", 20, -1, 200, 20)
Global $g_hButtonChangeAD = GUICtrlCreateButton("1+2 <--> 5+6", -250, 30, 80, 30)
Global $g_hButtonExtAD56 = GUICtrlCreateButton("ext. AD > 5+6", 100, -1, 80, 30)
Global $g_hButtonExtAD12 = GUICtrlCreateButton("ext. AD > 1+2", 100, -1, 80, 30)
If Not $g_bWavAvailable Then
GUICtrlSetState($g_hButtonExtAD56, $GUI_DISABLE)
GUICtrlSetState($g_hButtonExtAD12, $GUI_DISABLE)
EndIf
Global $g_hButtonOK = GUICtrlCreateButton("Swap", -200, 50, 280, 30)
GUISetState(@SW_SHOW)
AutoItSetOption("GUICoordMode", 1)
#EndRegion GUI Routing
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $g_hButtonChangeAD
GUICtrlSetState($g_hR15, $GUI_CHECKED)
GUICtrlSetState($g_hR26, $GUI_CHECKED)
GUICtrlSetState($g_hR33, $GUI_CHECKED)
GUICtrlSetState($g_hR44, $GUI_CHECKED)
GUICtrlSetState($g_hR51, $GUI_CHECKED)
GUICtrlSetState($g_hR62, $GUI_CHECKED)
GUICtrlSetState($g_hR77, $GUI_CHECKED)
GUICtrlSetState($g_hR88, $GUI_CHECKED)
Case $g_hButtonExtAD56
GUICtrlSetState($g_hR11, $GUI_CHECKED)
GUICtrlSetState($g_hR22, $GUI_CHECKED)
GUICtrlSetState($g_hR33, $GUI_CHECKED)
GUICtrlSetState($g_hR44, $GUI_CHECKED)
GUICtrlSetState($g_hRL5, $GUI_CHECKED)
GUICtrlSetState($g_hRR6, $GUI_CHECKED)
GUICtrlSetState($g_hR77, $GUI_CHECKED)
GUICtrlSetState($g_hR88, $GUI_CHECKED)
Case $g_hButtonExtAD12
GUICtrlSetState($g_hRL1, $GUI_CHECKED)
GUICtrlSetState($g_hRR2, $GUI_CHECKED)
GUICtrlSetState($g_hR33, $GUI_CHECKED)
GUICtrlSetState($g_hR44, $GUI_CHECKED)
GUICtrlSetState($g_hR15, $GUI_CHECKED)
GUICtrlSetState($g_hR26, $GUI_CHECKED)
GUICtrlSetState($g_hR77, $GUI_CHECKED)
GUICtrlSetState($g_hR88, $GUI_CHECKED)
Case $g_hButtonOK
If GUICtrlRead($g_hR11) = $GUI_CHECKED And GUICtrlRead($g_hR22) = $GUI_CHECKED And GUICtrlRead($g_hR33) = $GUI_CHECKED And GUICtrlRead($g_hR44) = $GUI_CHECKED And GUICtrlRead($g_hR55) = $GUI_CHECKED And GUICtrlRead($g_hR66) = $GUI_CHECKED And GUICtrlRead($g_hR77) = $GUI_CHECKED And GUICtrlRead($g_hR88) = $GUI_CHECKED Then
MsgBox($MB_TOPMOST, "Warning", "Track routing is unchanged - no swapping necessary.")
Else
ExitLoop
EndIf
EndSwitch
WEnd
#Region - track setting
; set audio tracks
Global $g_aRoutingFFmpeg[9]
Global $g_aRoutingBMX[9]
Global $g_bMuteRouted = False
Global $g_bExternalWavRouted = False
; track 1
Select
Case GUICtrlRead($g_hRm1) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = "1:0"
$g_aRoutingBMX[1] = "s1"
$g_bMuteRouted = True
Case GUICtrlRead($g_hR11) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = "0:1"
$g_aRoutingBMX[1] = "0"
Case GUICtrlRead($g_hR21) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = "0:2"
$g_aRoutingBMX[1] = "1"
Case GUICtrlRead($g_hR31) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = "0:3"
$g_aRoutingBMX[1] = "2"
Case GUICtrlRead($g_hR41) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = "0:4"
$g_aRoutingBMX[1] = "3"
Case GUICtrlRead($g_hR51) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = "0:5"
$g_aRoutingBMX[1] = "4"
Case GUICtrlRead($g_hR61) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = "0:6"
$g_aRoutingBMX[1] = "5"
Case GUICtrlRead($g_hR71) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = "0:7"
$g_aRoutingBMX[1] = "6"
Case GUICtrlRead($g_hR81) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = "0:8"
$g_aRoutingBMX[1] = "7"
Case GUICtrlRead($g_hRL1) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = '"[L]"'
$g_bExternalWavRouted = True
Case GUICtrlRead($g_hRR1) = $GUI_CHECKED
$g_aRoutingFFmpeg[1] = '"[R]"'
$g_bExternalWavRouted = True
EndSelect
; track 2
Select
Case GUICtrlRead($g_hRm2) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = "1:0"
$g_aRoutingBMX[2] = "s1"
$g_bMuteRouted = True
Case GUICtrlRead($g_hR12) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = "0:1"
$g_aRoutingBMX[2] = "0"
Case GUICtrlRead($g_hR22) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = "0:2"
$g_aRoutingBMX[2] = "1"
Case GUICtrlRead($g_hR32) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = "0:3"
$g_aRoutingBMX[2] = "2"
Case GUICtrlRead($g_hR42) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = "0:4"
$g_aRoutingBMX[2] = "3"
Case GUICtrlRead($g_hR52) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = "0:5"
$g_aRoutingBMX[2] = "4"
Case GUICtrlRead($g_hR62) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = "0:6"
$g_aRoutingBMX[2] = "5"
Case GUICtrlRead($g_hR72) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = "0:7"
$g_aRoutingBMX[2] = "6"
Case GUICtrlRead($g_hR82) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = "0:8"
$g_aRoutingBMX[2] = "7"
Case GUICtrlRead($g_hRL2) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = '"[L]"'
$g_bExternalWavRouted = True
Case GUICtrlRead($g_hRR2) = $GUI_CHECKED
$g_aRoutingFFmpeg[2] = '"[R]"'
$g_bExternalWavRouted = True
EndSelect
; track 3
Select
Case GUICtrlRead($g_hRm3) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = "1:0"
$g_aRoutingBMX[3] = "s1"
$g_bMuteRouted = True
Case GUICtrlRead($g_hR13) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = "0:1"
$g_aRoutingBMX[3] = "0"
Case GUICtrlRead($g_hR23) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = "0:2"
$g_aRoutingBMX[3] = "1"
Case GUICtrlRead($g_hR33) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = "0:3"
$g_aRoutingBMX[3] = "2"
Case GUICtrlRead($g_hR43) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = "0:4"
$g_aRoutingBMX[3] = "3"
Case GUICtrlRead($g_hR53) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = "0:5"
$g_aRoutingBMX[3] = "4"
Case GUICtrlRead($g_hR63) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = "0:6"
$g_aRoutingBMX[3] = "5"
Case GUICtrlRead($g_hR73) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = "0:7"
$g_aRoutingBMX[3] = "6"
Case GUICtrlRead($g_hR83) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = "0:8"
$g_aRoutingBMX[3] = "7"
Case GUICtrlRead($g_hRL3) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = '"[L]"'
$g_bExternalWavRouted = True
Case GUICtrlRead($g_hRR3) = $GUI_CHECKED
$g_aRoutingFFmpeg[3] = '"[R]"'
$g_bExternalWavRouted = True
EndSelect
; track 4
Select
Case GUICtrlRead($g_hRm4) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = "1:0"
$g_aRoutingBMX[4] = "s1"
$g_bMuteRouted = True
Case GUICtrlRead($g_hR14) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = "0:1"
$g_aRoutingBMX[4] = "0"
Case GUICtrlRead($g_hR24) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = "0:2"
$g_aRoutingBMX[4] = "1"
Case GUICtrlRead($g_hR34) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = "0:3"
$g_aRoutingBMX[4] = "2"
Case GUICtrlRead($g_hR44) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = "0:4"
$g_aRoutingBMX[4] = "3"
Case GUICtrlRead($g_hR54) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = "0:5"
$g_aRoutingBMX[4] = "4"
Case GUICtrlRead($g_hR64) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = "0:6"
$g_aRoutingBMX[4] = "5"
Case GUICtrlRead($g_hR74) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = "0:7"
$g_aRoutingBMX[4] = "6"
Case GUICtrlRead($g_hR84) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = "0:8"
$g_aRoutingBMX[4] = "7"
Case GUICtrlRead($g_hRL4) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = '"[L]"'
$g_bExternalWavRouted = True
Case GUICtrlRead($g_hRR4) = $GUI_CHECKED
$g_aRoutingFFmpeg[4] = '"[R]"'
$g_bExternalWavRouted = True
EndSelect
; track 5
Select
Case GUICtrlRead($g_hRm5) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = "1:0"
$g_aRoutingBMX[5] = "s1"
$g_bMuteRouted = True
Case GUICtrlRead($g_hR15) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = "0:1"
$g_aRoutingBMX[5] = "0"
Case GUICtrlRead($g_hR25) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = "0:2"
$g_aRoutingBMX[5] = "1"
Case GUICtrlRead($g_hR35) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = "0:3"
$g_aRoutingBMX[5] = "2"
Case GUICtrlRead($g_hR45) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = "0:4"
$g_aRoutingBMX[5] = "3"
Case GUICtrlRead($g_hR55) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = "0:5"
$g_aRoutingBMX[5] = "4"
Case GUICtrlRead($g_hR65) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = "0:6"
$g_aRoutingBMX[5] = "5"
Case GUICtrlRead($g_hR75) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = "0:7"
$g_aRoutingBMX[5] = "6"
Case GUICtrlRead($g_hR85) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = "0:8"
$g_aRoutingBMX[5] = "7"
Case GUICtrlRead($g_hRL5) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = '"[L]"'
$g_bExternalWavRouted = True
Case GUICtrlRead($g_hRR5) = $GUI_CHECKED
$g_aRoutingFFmpeg[5] = '"[R]"'
$g_bExternalWavRouted = True
EndSelect
; track 6
Select
Case GUICtrlRead($g_hRm6) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = "1:0"
$g_aRoutingBMX[6] = "s1"
$g_bMuteRouted = True
Case GUICtrlRead($g_hR16) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = "0:1"
$g_aRoutingBMX[6] = "0"
Case GUICtrlRead($g_hR26) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = "0:2"
$g_aRoutingBMX[6] = "1"
Case GUICtrlRead($g_hR36) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = "0:3"
$g_aRoutingBMX[6] = "2"
Case GUICtrlRead($g_hR46) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = "0:4"
$g_aRoutingBMX[6] = "3"
Case GUICtrlRead($g_hR56) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = "0:5"
$g_aRoutingBMX[6] = "4"
Case GUICtrlRead($g_hR66) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = "0:6"
$g_aRoutingBMX[6] = "5"
Case GUICtrlRead($g_hR76) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = "0:7"
$g_aRoutingBMX[6] = "6"
Case GUICtrlRead($g_hR86) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = "0:8"
$g_aRoutingBMX[6] = "7"
Case GUICtrlRead($g_hRL6) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = '"[L]"'
$g_bExternalWavRouted = True
Case GUICtrlRead($g_hRR6) = $GUI_CHECKED
$g_aRoutingFFmpeg[6] = '"[R]"'
$g_bExternalWavRouted = True
EndSelect
; track 7
Select
Case GUICtrlRead($g_hRm7) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = "1:0"
$g_aRoutingBMX[7] = "s1"
$g_bMuteRouted = True
Case GUICtrlRead($g_hR17) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = "0:1"
$g_aRoutingBMX[7] = "0"
Case GUICtrlRead($g_hR27) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = "0:2"
$g_aRoutingBMX[7] = "1"
Case GUICtrlRead($g_hR37) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = "0:3"
$g_aRoutingBMX[7] = "2"
Case GUICtrlRead($g_hR47) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = "0:4"
$g_aRoutingBMX[7] = "3"
Case GUICtrlRead($g_hR57) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = "0:5"
$g_aRoutingBMX[7] = "4"
Case GUICtrlRead($g_hR67) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = "0:6"
$g_aRoutingBMX[7] = "5"
Case GUICtrlRead($g_hR77) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = "0:7"
$g_aRoutingBMX[7] = "6"
Case GUICtrlRead($g_hR87) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = "0:8"
$g_aRoutingBMX[7] = "7"
Case GUICtrlRead($g_hRL7) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = '"[L]"'
$g_bExternalWavRouted = True
Case GUICtrlRead($g_hRR7) = $GUI_CHECKED
$g_aRoutingFFmpeg[7] = '"[R]"'
$g_bExternalWavRouted = True
EndSelect
; track 8
Select
Case GUICtrlRead($g_hRm8) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = "1:0"
$g_aRoutingBMX[8] = "s1"
$g_bMuteRouted = True
Case GUICtrlRead($g_hR18) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = "0:1"
$g_aRoutingBMX[8] = "0"
Case GUICtrlRead($g_hR28) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = "0:2"
$g_aRoutingBMX[8] = "1"
Case GUICtrlRead($g_hR38) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = "0:3"
$g_aRoutingBMX[8] = "2"
Case GUICtrlRead($g_hR48) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = "0:4"
$g_aRoutingBMX[8] = "3"
Case GUICtrlRead($g_hR58) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = "0:5"
$g_aRoutingBMX[8] = "4"
Case GUICtrlRead($g_hR68) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = "0:6"
$g_aRoutingBMX[8] = "5"
Case GUICtrlRead($g_hR78) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = "0:7"
$g_aRoutingBMX[8] = "6"
Case GUICtrlRead($g_hR88) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = "0:8"
$g_aRoutingBMX[8] = "7"
Case GUICtrlRead($g_hRL8) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = '"[L]"'
$g_bExternalWavRouted = True
Case GUICtrlRead($g_hRR8) = $GUI_CHECKED
$g_aRoutingFFmpeg[8] = '"[R]"'
$g_bExternalWavRouted = True
EndSelect
#EndRegion - track setting
;~ _ArrayDisplay($g_aRoutingFFmpeg)
For $i = 1 To UBound($g_aRoutingFFmpeg) -1
ConsoleWrite($g_aRoutingFFmpeg[$i] & @CRLF)
Next
ConsoleWrite("$g_bMuteRouted: " & $g_bMuteRouted & @CRLF)
ConsoleWrite("$g_bExternalWavRouted: " & $g_bExternalWavRouted & @CRLF)
SplashTextOn("Be patient", "MXF-Track-Swap will be prepared ...", 300, 50)
If Not FileExists(@TempDir & "\ffmpeg.exe") Then
FileInstall('K:\ffmpeg\bin\ffmpeg.exe', @TempDir & "\ffmpeg.exe", $FC_OVERWRITE)
EndIf
If Not FileExists(@TempDir & "\bmxtranswrap.exe") Then
FileInstall('K:\bmxtranswrap\bmxtranswrap.exe', @TempDir & "\bmxtranswrap.exe", $FC_OVERWRITE)
EndIf
If Not FileExists(@TempDir & "\vcruntime140_1.dll") Then ; this is needed by bmxtranswrap and normally located at "C:\Windows\System32\vcruntime140_1.dll"
FileInstall('K:\bmxtranswrap\vcruntime140_1.dll', @TempDir & "\vcruntime140_1.dll", $FC_OVERWRITE)
EndIf
SplashOff()
Local $sPathTempFolder = @TempDir & "\"
Global $g_hTimerStart
Global $g_sStdErrAll
_ReWrap()
ShellExecute(@TempDir)
Exit
;~ #cs
#Region Funcs
Func _CheckForInputFiles($aFiles)
;~ _ArrayDisplay($aFiles)
Local $bFoundMXF = False, $bFoundWAV = False
Local $sDrive, $sDir, $sFileName, $sExtension
For $i = 1 To $aFiles[0]
_PathSplit($aFiles[$i], $sDrive, $sDir, $sFileName, $sExtension)
; ignore folder
If $sExtension = "" Then ContinueLoop
; only look for mxf or wav
Switch StringLower($sExtension)
Case ".mxf"
If Not $bFoundMXF Then
If FileExists($aFiles[$i]) Then
$g_sMXFFile = $aFiles[$i]
$g_bMxfAvailable = True
$bFoundMXF = True
EndIf
EndIf
Case ".wav"
If Not $bFoundWAV Then
If FileExists($aFiles[$i]) Then
$g_sWAVFile = $aFiles[$i]
$g_bWavAvailable = True
$bFoundWAV = True
EndIf
EndIf
EndSwitch
If $bFoundMXF = True And $bFoundWAV = True Then ExitLoop
Next
EndFunc
Func _ReWrap()
$g_hTimerStart = TimerInit()
GUIDelete($g_hGUI)
$g_hGUI = GUICreate("MXF-Track-Swap Muxing", 600, 240)
GUICtrlCreateLabel("MXF-File: " & _FileName($g_sMXFFile), 10, 10, 580, 30)
GUICtrlSetFont(-1, 14, 400, 0, "Courier New")
Global $g_hLabelInsert = GUICtrlCreateLabel("Insert Audio:", 10, 50, 580, 30)
GUICtrlSetFont(-1, 12, 400, 0, "Courier New")
Global $Progress1 = GUICtrlCreateProgress(10, 80, 580, 20)
GUICtrlCreateLabel("Rewrapping:", 10, 120, 580, 30)
GUICtrlSetFont(-1, 12, 400, 0, "Courier New")
Global $Progress2 = GUICtrlCreateProgress(10, 150, 580, 20)
Global $Edit = GUICtrlCreateLabel("", 10, 200, 260, 60)
GUICtrlSetFont(-1, 14, 400, 0, "Courier New")
Global $g_hLabelRunningTime = GUICtrlCreateLabel("", 440, 200, 150, 30, $SS_CENTER)
GUICtrlSetFont(-1, 14, 400, 0, "Courier New")
GUISetState(@SW_SHOW)
; do everything with bmxwrap at the end, as only this creates valid v1.3 mxf files
; bmxwrap can't insert external audio, so if that should be done, run ffmpeg first
Local $sFFmpegCommand, $sBMXCommand, $sSuffix, $sSuffixTemp
For $i = 1 To UBound($g_aRoutingFFmpeg) -1
$sSuffix &= '_' & $i & '-' & StringRegExpReplace(StringRegExpReplace($g_aRoutingFFmpeg[$i], "\d:", ""), '[\[\]"]', "")
Next
$sSuffixTemp = $sSuffix & '_ffmpegTemp.mxf"'
$sSuffix &= '.mxf"'
; this is the default bmxtranswrap command line
; set TC 10:00:00:00
$sBMXCommand = '-y 10:00:00:00'
; type RDD09
$sBMXCommand &= ' -t rdd9'
; Active Format Descriptor 4-bit code from table 1 in SMPTE ST 2016-1 - full frame 16:9
$sBMXCommand &= ' --afd 8'
; the ARD ZDF HDF profile for op1a/rdd9
$sBMXCommand &= ' --ard-zdf-hdf'
; print progress percentage to stdout
$sBMXCommand &= ' -p'
; set the wave essence descriptor channel assignment label which identifies the audio layout mode in operation
$sBMXCommand &= ' --audio-layout as11-mode-0'
If $g_bExternalWavRouted Then
; ffmpeg first
;~ Code zum Remuxen: Video erhalten, Audio: 1>5, 2>6, 3>3, 4>4, 5 mute, 6 mute, 7>L, 8>R
;~ ffmpeg -i Video.mxf -f lavfi -i anullsrc=r=48000:cl=mono -i Stereo.wav -ar 48000 -filter_complex "[2:a]apad,channelsplit=channel_layout=stereo[L][R]" -map 0:0 -map 0:5 -map 0:6 -map 0:3 -map 0:4 -map 1:0 -map 1:0 -map "[L]" -map "[R]" -c:v copy -c:a pcm_s24le -shortest -y Video_swapped.mxf
; video file
$sFFmpegCommand = '-i "' & $g_sMXFFile & '"'
; muted source
If $g_bMuteRouted Then
$sFFmpegCommand &= ' -f lavfi -i anullsrc=r=48000:cl=mono'
EndIf
; external wav file
$sFFmpegCommand &= ' -i "' & $g_sWAVFile & '" -ar 48000 -filter_complex "['
If Not $g_bMuteRouted Then
$sFFmpegCommand &= '1'
Else
$sFFmpegCommand &= '2'
EndIf
$sFFmpegCommand &= ':a]apad,channelsplit=channel_layout=stereo[L][R]"'
; video mapping
$sFFmpegCommand &= ' -map 0:0'
; audio mapping
For $i = 1 To UBound($g_aRoutingFFmpeg) -1
$sFFmpegCommand &= ' -map ' & $g_aRoutingFFmpeg[$i]
Next
; copy video, set audio to 24 bit, use shortest file (always the mxf file) as length, overwrite existing file
$sFFmpegCommand &= ' -c:v copy -c:a pcm_s24le -shortest -y'
; set encoding date as ffmpeg otherwise wouldn't create a valid op1a v1.3 file
Local $sDate
$sDate = _NowCalc()
$sDate = StringReplace($sDate, "/", "-") & ".000" ; including ms
$sFFmpegCommand &= ' -metadata creation_time="' & $sDate & '"'
; output file
$sFFmpegCommand &= ' "' & @TempDir & '\' & _StripFileExtension(_FileName($g_sMXFFile)) & $sSuffixTemp
ConsoleWrite("$sFFmpegcommand: " & $sFFmpegCommand & @CRLF)
_runFFmpeg('ffmpeg ' & $sFFmpegCommand, $sPathTempFolder)
; bmxtranswrap second
_runBMXwrap('bmxtranswrap ' & $sBMXCommand & ' -o "' & @TempDir & '\' & _StripFileExtension(_FileName($g_sMXFFile)) & $sSuffix & ' "' & @TempDir & '\' & _StripFileExtension(_FileName($g_sMXFFile)) & $sSuffixTemp, $sPathTempFolder)
Else
GUICtrlSetState($Progress1, $GUI_DISABLE) ; no external audio inserted
GUICtrlSetState($g_hLabelInsert, $GUI_DISABLE) ; no external audio inserted
; add audio mapping to bmx command
; '--track-map "4;5;0;1;2;3;s1;s1"'
; audio mapping
$sBMXCommand &= ' --track-map "'
For $i = 1 To UBound($g_aRoutingBMX) -1
$sBMXCommand &= $g_aRoutingBMX[$i] & ';'
Next
$sBMXCommand = StringTrimRight($sBMXCommand, 1) ; remove the last semicolon
$sBMXCommand &= '"'
_runBMXwrap('bmxtranswrap ' & $sBMXCommand & ' -o "' & @TempDir & '\' & _StripFileExtension(_FileName($g_sMXFFile)) & $sSuffix & ' "' & $g_sMXFFile & '"', $sPathTempFolder)
EndIf
GUICtrlSetData($Edit, "Ready")
WinSetOnTop($g_hGUI, "", $WINDOWS_ONTOP)
EndFunc
Func _runFFmpeg($command, $wd)
Local $hPid = Run('"' & @ComSpec & '" /c ' & $command, $wd, @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD)
Local $sStdErr, $sTimer
Local $iTicksDuration = 0, $iTicksTime = 0, $iTimer
While 1
Sleep(500)
$sStdErr = StderrRead($hPid)
If @error Then ExitLoop
$g_sStdErrAll &= $sStdErr
If StringLen($sStdErr) > 0 Then
If Not $iTicksDuration Then $iTicksDuration = _GetDuration($sStdErr)
$iTicksTime = _GetTime($sStdErr)
If Not @error Then $sStdErr = ""
GUICtrlSetData($Progress1, $iTicksTime * 100 / $iTicksDuration)
EndIf
$iTimer = TimerDiff($g_hTimerStart)
$sTimer = _Zeit($iTimer)
If GUICtrlRead($g_hLabelRunningTime) <> $sTimer Then
GUICtrlSetData($g_hLabelRunningTime, $sTimer)
EndIf
WEnd
EndFunc
Func _runBMXwrap($command, $wd)
ConsoleWrite("$sBMXcommand: " & $command & @CRLF)
Local $hPid = Run('"' & @ComSpec & '" /c ' & $command, $wd, @SW_HIDE, $STDOUT_CHILD + $STDERR_CHILD)
Local $sStdErr, $sTimer
Local $iPercent = 0, $iTimer
While 1
Sleep(500)
$sStdErr = StdoutRead($hPid)
If @error Then ExitLoop
$g_sStdErrAll &= $sStdErr
If StringLen($sStdErr) > 0 Then
;~ ConsoleWrite("StdOut: " & $sStdErr & @CRLF)
$iPercent = _GetPercent($sStdErr)
If Not @error Then $sStdErr = ""
GUICtrlSetData($Progress2, $iPercent)
EndIf
$iTimer = TimerDiff($g_hTimerStart)
$sTimer = _Zeit($iTimer)
If GUICtrlRead($g_hLabelRunningTime) <> $sTimer Then
GUICtrlSetData($g_hLabelRunningTime, $sTimer)
EndIf
WEnd
EndFunc
Func _GetDuration($sStdErr)
If Not StringInStr($sStdErr, "Duration:") Then Return SetError(1, 0, 0)
Local $aRegExp = StringRegExp($sStdErr, "(?i)Duration.+?([0-9:]+)", 3)
If @error Or Not IsArray($aRegExp) Then Return SetError(2, 0, 0)
Local $sTime = $aRegExp[0]
Local $aTime = StringSplit($sTime, ":", 2)
If @error Or Not IsArray($aTime) Then Return SetError(3, 0, 0)
Return _TimeToTicks($aTime[0], $aTime[1], $aTime[2])
EndFunc ;==>_GetDuration
Func _GetTime($sStdErr)
If Not StringInStr($sStdErr, "time=") Then Return SetError(1, 0, 0)
Local $aRegExp = StringRegExp($sStdErr, "(?i)time.+?([0-9:]+)", 3)
If @error Or Not IsArray($aRegExp) Then Return SetError(2, 0, 0)
Local $sTime = $aRegExp[UBound($aRegExp) - 1]
Local $aTime = StringSplit($sTime, ":", 2)
If @error Or Not IsArray($aTime) Then Return SetError(3, 0, 0)
Return _TimeToTicks($aTime[0], $aTime[1], $aTime[2])
EndFunc ;==>_GetTime
Func _GetPercent($sStdErr)
If Not StringInStr($sStdErr, "%") Then Return SetError(1, 0, 0)
Local $aRegExp = StringRegExp($sStdErr, "(?i)\d{1,2}\.\d%", 3)
If @error Or Not IsArray($aRegExp) Then Return SetError(2, 0, 0)
Local $sPercent = $aRegExp[0]
$sPercent = StringTrimRight($sPercent, 1) ; remove %
ConsoleWrite("Percent: " & $sPercent & @CRLF)
Return $sPercent
EndFunc
Func _FileName($sFullPath)
Local $iDelimiter = StringInStr($sFullPath, "\", 0, -1)
Return StringTrimLeft($sFullPath, $iDelimiter)
EndFunc
Func _StripFileExtension($sFile)
Local $iDelimiter = StringInStr($sFile, ".", 0, -1)
Return StringLeft($sFile, $iDelimiter - 1)
EndFunc
Func _Zeit($iMs, $bComfortView = True) ; from ms to a format: "12h 36m 56s 13f" (with special space between - ChrW(8239))
Local $sReturn
$iMs = Int($iMs)
Local $iFrames, $iMSec, $iSec, $iMin, $iHour, $sSign
If $iMs < 0 Then
$iMs = Abs($iMs)
$sSign = '-'
EndIf
$iMSec = StringRight($iMs, 3)
$iFrames = $iMSec / 40
$iSec = $iMs / 1000
$iMin = $iSec / 60
$iHour = $iMin / 60
$iMin -= Int($iHour) * 60
$iSec -= Int($iMin) * 60
If $bComfortView Then ; no hours if not present and no frames
If Not Int($iHour) = 0 Then $sReturn &= StringRight('0' & Int($iHour), 2) & 'h' & ChrW(8239)
$sReturn &= StringRight('0' & Int($iMin), 2) & 'm' & ChrW(8239)
If Int($iHour) = 0 Then $sReturn &= StringRight('0' & Int($iSec), 2) & 's' ; zum DEBUGGING auskommentieren
Else
$sReturn = $sSign & StringRight('0' & Int($iHour), 2) & 'h' & ChrW(8239) & StringRight('0' & Int($iMin), 2) & 'm' & ChrW(8239) & StringRight('0' & Int($iSec), 2) & 's' & ChrW(8239) & StringRight('0' & Int($iFrames), 2) & 'f'
EndIf
Return $sReturn
EndFunc ;==>_Zeit
Func WM_DROPFILES_FUNC($hWnd, $msgID, $wParam, $lParam)
If $bPaused Then Return
#forceref $hWnd, $msgID, $wParam, $lParam
Local $nSize, $pFileName
Local $nAmt = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', 0xFFFFFFFF, 'ptr', 0, 'int', 0)
ReDim $g_aDropFiles[$nAmt[0]]
For $i = 0 To $nAmt[0] - 1
$nSize = DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', 0, 'int', 0)
$nSize = $nSize[0] + 1
$pFileName = DllStructCreate('wchar[' & $nSize & ']')
DllCall('shell32.dll', 'int', 'DragQueryFileW', 'hwnd', $wParam, 'int', $i, 'ptr', DllStructGetPtr($pFileName), 'int', $nSize)
$g_aDropFiles[$i] = DllStructGetData($pFileName, 1)
$pFileName = 0
Next
_ArrayInsert($g_aDropFiles, 0, UBound($g_aDropFiles))
GUICtrlSendToDummy($FILES_DROPPED, $nAmt[0])
EndFunc ;==>WM_DROPFILES_FUNC
#EndRegion