' BlissEnc front end for the Fraunhofer fastenc layer-3 encoder. ' © 2002 Bliss Products DEF d1:Dialog DEF bitrate,brRef,vbrVal,dsVal,task,useDefaultOutDir,result,pos,newpos,startpos,endpos:INT DEF item,total,handle:INT DEF inifile,batfile:FILE DEF startPath$,inifile$,batfile$,ini$,manual$,helpfile$,encoderPath$,defaultInDir$,defaultOutDir$:STRING DEF Job$,multiJob$,inPath$,outPath$,newInPath$,Switches$,wspace$,mp3$,vbrVal$,dsVal$:STRING DEF inPathTruncated$.outPathTruncated$:STRING DEF filenames[32766],filenamestemp[32766]:ISTRING DECLARE "kernel32",SetCurrentDirectoryA(defaultDir:STRING),INT bitrate = 128000 vbrVal = 1 wspace$ = " " mp3$ = ".mp3" DIALOG d1,0,0,624,308,0x80C80080,0,"BlissEnc",Handler CONTROL d1,"B,Input,15,15,80,25,0x50000000,1" CONTROL d1,"B,Clear,211,15,80,25,0x50000000,2" CONTROL d1,"B,Process,113,15,80,25,0x50000000,3" CONTROL d1,"C,,2,0,300,48,0x50000007,4" CONTROL d1,"C,,2,44,300,243,0x50000007,5" 'Visible CONTROL d1,"L,,306,6,316,280,0x50300940,6" 'Hidden CONTROL d1,"RE,,12,48,40,20,0x40880004,8" CONTROL d1,"RE,,12,48,40,20,0x40880004,48" CONTROL d1,"C,Total Bitrate,22,59,78,20,0x50000003,10" CONTROL d1,"C,Variable Bitrate,22,89,92,20,0x50000003,11" CONTROL d1,"C,Downsample (Hz),22,119,104,20,0x50000003,12" CONTROL d1,"C,Force Mono Output (Downmix),22,149,164,20,0x50000003,13" CONTROL d1,"C,Medium Quality,22,169,95,20,0x50000003,14" CONTROL d1,"C,High Quality,22,189,80,20,0x50000003,15" CONTROL d1,"C,Enable MPEG1/2 CRC Check,22,209,164,20,0x50000003,16" CONTROL d1,"C,Don't Write VBRI Header,22,229,142,20,0x50000003,17" CONTROL d1,"B,,22,262,13,14,0x50000000,19" CONTROL d1,"T,Copy Settings to Clipboard,40,262,130,20,0x5000010B,25" CONTROL d1,"B,,178,262,13,14,0x50000000,18" CONTROL d1,"T,Save Settings Now,196,262,98,20,0x5000010B,26" CONTROL d1,"M,ComboBox1,112,58,156,132,0x50A00603,20" 'CONTROL d1,"E,,166,143,26,20,0x50802000,21" CONTROL d1,"E,,140,118,42,20,0x50802000,22" 'VBR Scrollbar: CONTROL d1,"S,,126,88,124,20,0,23": 'VBR Scrollbar position label: CONTROL d1,"T,,256,90,24,20,0x5000010B,24" CONTROL d1,"T,Output Directory,200,184,80,20,0x5000010B,30" CONTROL d1,"R,Input,220,202,48,20,0x50020009,31" CONTROL d1,"R,User,220,222,45,20,0x50000009,32" DoModal d1 'SHOWDIALOG d1 END '--------- Handler --------- SUB Handler SELECT @CLASS CASE @IDINITDIALOG 'Define Menus MENU d1,"T,File,0,0","I,Input,0,1","I,Set Output Directory,0,3","I,Exit,0,4" INSERTMENU d1,1,"T,Task,0,0","I,Process,0,5","I,Copy Settings,0,6" INSERTMENU d1,2,"T,Help,0,0","I,BlissEnc Help,0,10","I,fastenc Manual,0,11" 'Set Controls SETCONTROLCOLOR d1,3,RGB(0,0,140),RGB(0,255,255) SETCONTROLCOLOR d1,18,RGB(0,0,140),RGB(0,255,255) SETCONTROLCOLOR d1,19,RGB(0,0,140),RGB(0,255,255) SETHORIZEXTENT d1,6,1240 'Bitrate Selection Combobox entries ADDSTRING d1,20,"8 kbps mono only" ADDSTRING d1,20,"12 kbps mono only" ADDSTRING d1,20,"16 kbps mono only" ADDSTRING d1,20,"18 kbps mono only" ADDSTRING d1,20,"20 kbps mono/stereo" ADDSTRING d1,20,"24 kbps mono/stereo" ADDSTRING d1,20,"32 kbps mono/stereo" ADDSTRING d1,20,"40 kbps mono/stereo" ADDSTRING d1,20,"48 kbps mono/stereo" ADDSTRING d1,20,"56 kbps mono/stereo" ADDSTRING d1,20,"64 kbps mono/stereo" ADDSTRING d1,20,"80 kbps mono/stereo" ADDSTRING d1,20,"96 kbps mono/stereo" ADDSTRING d1,20,"112 kbps mono/stereo" ADDSTRING d1,20,"128 kbps mono/stereo" ADDSTRING d1,20,"144 kbps mono/stereo" ADDSTRING d1,20,"160 kbps mono/stereo" ADDSTRING d1,20,"192 kbps mono/stereo" ADDSTRING d1,20,"224 kbps mono/stereo" ADDSTRING d1,20,"256 kbps mono/stereo" ADDSTRING d1,20,"320 kbps mono/stereo" 'Set VBR Scrollbar params SETSCROLLRANGE d1,23,1,100 SETSCROLLPOS d1,23,0 SETCONTROLTEXT d1,24,(STR$(1))+" ") SETCONTROLCOLOR d1,6,RGB(0,0,0),RGB(255,255,255) 'Define Paths startPath$ = GETSTARTPATH inifile$ = startPath$ + "BlissEnc.ini" batfile$ = startPath$ + "job.bat" manual$ = startPath$ + "Manual.txt" helpfile$ = startPath$ + "BlissEnc.txt" encoderPath$ = startPath$ + "fastencc.exe " defaultInDir$ = startPath$ defaultOutDir$ = startPath$ GOSUB iniRead CASE @IDMENUPICK SELECT @MENUNUM CASE 1:'Input GOSUB doInput CASE 2:'Clear GOSUB clearSelected CASE 3:'Set Output Directory GOSUB setOutDir CASE 4:'Exit CLOSEDIALOG d1,@IDOK CASE 5:'Process task = 5 GOSUB defineJob CASE 6:'Copy Settings task = 6 GOSUB defineJob CASE 10:'BlissEnc Help SYSTEM "notepad.exe",helpfile$ CASE 11:'fastenc Manual SYSTEM "notepad.exe",manual$ ENDSELECT CASE @IDCONTROL SELECT @CONTROLID CASE 1:'Input GOSUB doInput CASE 2:'Clear GOSUB clearSelected CASE 3:'Process task = 5 GOSUB defineJob CASE 14 mqState = GETSTATE (d1,14) IF mqState SETSTATE d1,15,0 ENDIF CASE 15 hqState = GETSTATE (d1,15) IF hqState SETSTATE d1,14,0 ENDIF CASE 31 useDefaultOutDir = GETSTATE (d1,32) CASE 32 useDefaultOutDir = GETSTATE (d1,32) CASE 18:'Save Settings GOSUB iniWrite CASE 19:'Copy Settings task = 6 GOSUB defineJob ENDSELECT 'Call scroll bar control subroutine: CASE @IDHSCROLL SELECT @CONTROLID CASE 23 GOSUB VBR Scrollbar Handler ENDSELECT 'CASE @IDCLOSEWINDOW 'GOSUB iniWrite ENDSELECT RETURN '--------- doInput --------- SUB doInput filter = "Wave Audio (*.wav)|*.wav|All Files (*.*)|*.*||" newInPath$ = "" result = SetCurrentDirectoryA(defaultInDir$) filenamestemp = filerequest("Select Input",d1,1,filter,0,@MULTISELECT) IF filenamestemp <> "" filenames = filenamestemp SETCONTROLTEXT d1,8,filenames pos = 1 GOSUB extractFileNames ENDIF RETURN '--------- extractFileNames --------- SUB extractFileNames newpos = CONTROLCMD (d1,8,@RTFINDTEXT,"|",newpos+1,1) IF newpos <> -1 GOSUB addItem ENDIF IF newpos = -1 'stop ENDIF 'GOSUB setOutputs RETURN SUB addItem newInPath$ = mid$(filenames,pos,newpos-pos+1) ADDSTRING d1,6,newInPath$ pos = newpos+2 GOSUB extractFileNames RETURN '--------- defineJob --------- 'compiles parameters for batch file SUB defineJob CONTROLCMD d1,8,@RTSETSELECTION,0,-1 CONTROLCMD d1,8,@RTDELETESEL total = GETSTRINGCOUNT (d1,6) item = 0 brState =  GETSTATE (d1,10) vbrState =  GETSTATE (d1,11) dsState =  GETSTATE (d1,12) dmState =  GETSTATE (d1,13) mqState =  GETSTATE (d1,14) hqState =  GETSTATE (d1,15) crcState =  GETSTATE (d1,16) dvhState =  GETSTATE (d1,17) brRef = GETSELECTED (d1,20) if brRef = 0 then bitrate = 8000 if brRef = 1 then bitrate = 12000 if brRef = 2 then bitrate = 16000 if brRef = 3 then bitrate = 18000 if brRef = 4 then bitrate = 20000 if brRef = 5 then bitrate = 24000 if brRef = 6 then bitrate = 32000 if brRef = 7 then bitrate = 40000 if brRef = 8 then bitrate = 48000 if brRef = 9 then bitrate = 56000 if brRef = 10 then bitrate = 64000 if brRef = 11 then bitrate = 80000 if brRef = 12 then bitrate = 96000 if brRef = 13 then bitrate = 112000 if brRef = 14 then bitrate = 128000 if brRef = 15 then bitrate = 144000 if brRef = 16 then bitrate = 160000 if brRef = 17 then bitrate = 192000 if brRef = 18 then bitrate = 224000 if brRef = 19 then bitrate = 256000 if brRef = 20 then bitrate = 320000 if brState then br$=" -br" + STR$(bitrate) else br$="" if vbrState then vbr$=" -vbr" + STR$(vbrVal) else vbr$="" if dsState then ds$=" -ds" + STR$(dsVal) else ds$="" if dmState then dm$=" -dm" else dm$="" if mqState then mq$=" -mq" else mq$="" if hqState then hq$=" -hq" else hq$="" if crcState then crc$=" -crc" else crc$="" if dvhState then dvh$=" -dvh" else dvh$="" Switches$ = APPEND$ (br$,vbr$,ds$,dm$,mq$,hq$,crc$,dvh$) IF(OPENFILE (batfile,batfile$,"W") = 0) DO inPath$ = GETSTRING (d1,6,item) inPathLength = LEN (inPath$) newpos = 1 WHILE newpos <> 0 pos = newpos newpos = INSTR(pos+1,inPath$,"\") ENDWHILE inPathTruncated$ = LEFT$ (inPath$,pos) defaultInDir$ = inPathTruncated$ 'set output file name for user directory IF useDefaultOutDir = 1 handle = FINDOPEN(defaultOutDir$) IF handle = 0 defaultOutDir$ = defaultInDir$ ENDIF outFileName$ = MID$ (inPath$,pos,inPathLength-4) outPath$ = defaultOutDir$ + outFileName$ + mp3$ ENDIF 'set output file name for input directory IF useDefaultOutDir = 0 inPathTruncated$ = LEFT$ (inPath$,inPathLength-4) outPath$ = inPathTruncated$ + mp3$ ENDIF Job$ = APPEND$ (encoderPath$,inPath$,wspace$,outPath$,wspace$,Switches$) 'prepare for Process IF task = 5 WRITE (batfile,Job$) 'prepare for Copy ELSE CONTROLCMD d1,48,@RTSETSELECTION,0,-1 CONTROLCMD d1,48,@RTDELETESEL SETCONTROLTEXT d1,48,Job$ CONTROLCMD d1,48,@RTSETSELECTION,0,-1 CONTROLCMD d1,48,@RTCUT CONTROLCMD d1,8,@RTPASTE ENDIF item = item+1 UNTIL item = total CLOSEFILE batfile ENDIF IF task = 5 GOSUB Process ELSE GOSUB Copy ENDIF RETURN '--------- Process --------- SUB Process SYSTEM batfile$,"" RETURN '--------- Copy --------- SUB Copy 'Copy$ = encoderPath$ + multiJob$ CONTROLCMD d1,8,@RTSETSELECTION,0,-1 CONTROLCMD d1,8,@RTCOPY RETURN '--------- VBR Scrollbar Handler --------- SUB VBR Scrollbar Handler SELECT @CODE CASE @SBTHUMBPOS:CASE @SBTHUMBTRACK SETSCROLLPOS d1,23,@QUAL CASE @SBLINELEFT SETSCROLLPOS d1,23,(GETSCROLLPOS(d1,23)-1) CASE @SBLINERIGHT SETSCROLLPOS d1,23,(GETSCROLLPOS(d1,23)+1) 'CASE @SBPAGELEFT 'SETSCROLLPOS d1,23,(GETSCROLLPOS(d1,23)-10) 'CASE @SBPAGERIGHT 'SETSCROLLPOS d1,23,(GETSCROLLPOS(d1,23)+10) ENDSELECT 'Display scrollbar position value: vbrVal =  GETSCROLLPOS (d1,23) SETCONTROLTEXT d1,24,(STR$(vbrVal))+" ") RETURN '--------- clearSelected --------- SUB clearSelected item = GETSTRINGCOUNT (d1,6) DO remove = ISSELECTED (d1,6,item) if remove = 1 DELETESTRING d1,6,item endif item = item-1 UNTIL item = -1 RETURN '--------- iniRead --------- SUB iniRead IF(OPENFILE (inifile,inifile$,"R") = 0) READ inifile,ini$ defaultInDir$ = ini$ handle = FINDOPEN(defaultInDir$) IF handle = 0 defaultInDir$ = startPath$ ENDIF READ inifile,ini$ defaultOutDir$ = ini$ READ inifile,ini$ brState =  VAL(ini$) READ inifile,ini$ vbrState =  VAL(ini$) READ inifile,ini$ dsState =  VAL(ini$) READ inifile,ini$ dmState =  VAL(ini$) READ inifile,ini$ mqState =  VAL(ini$) READ inifile,ini$ hqState =  VAL(ini$) READ inifile,ini$ crcState =  VAL(ini$) READ inifile,ini$ dvhState =  VAL(ini$) READ inifile,ini$ useDefaultOutDir =  VAL(ini$) READ inifile,ini$ brRef =  VAL(ini$) READ inifile,ini$ vbrVal =  VAL(ini$) READ inifile,ini$ dsVal =  VAL(ini$) CLOSEFILE inifile SETSTATE d1,10,brState SETSTATE d1,11,vbrState SETSTATE d1,12,dsState SETSTATE d1,13,dmState SETSTATE d1,14,mqState SETSTATE d1,15,hqState SETSTATE d1,16,crcState SETSTATE d1,17,dvhState IF useDefaultOutDir SETSTATE d1,31,0 SETSTATE d1,32,1 ELSE SETSTATE d1,31,1 SETSTATE d1,32,0 ENDIF SETSELECTED d1,20,brRef SETCONTROLTEXT d1,22,STR$(dsVal) IF vbrVal = 0 vbrVal = 1 ENDIF SETSCROLLPOS d1,23,vbrVal SETCONTROLTEXT d1,24,STR$(vbrVal) ENDIF RETURN '--------- iniWrite --------- SUB iniWrite IF(OPENFILE (inifile,inifile$,"W") = 0) WRITE inifile,defaultInDir$ WRITE inifile,defaultOutDir$ brState =  GETSTATE (d1,10) WRITE inifile,STR$(brState) vbrState =  GETSTATE (d1,11) WRITE inifile,STR$(vbrState) dsState =  GETSTATE (d1,12) WRITE inifile,STR$(dsState) dmState =  GETSTATE (d1,13) WRITE inifile,STR$(dmState) mqState =  GETSTATE (d1,14) WRITE inifile,STR$(mqState) hqState =  GETSTATE (d1,15) WRITE inifile,STR$(hqState) crcState =  GETSTATE (d1,16) WRITE inifile,STR$(crcState) dvhState =  GETSTATE (d1,17) WRITE inifile,STR$(dvhState) useDefaultOutDir = GETSTATE (d1,32) WRITE inifile,STR$(useDefaultOutDir) brRef = GETSELECTED (d1,20) WRITE inifile,STR$(brRef) vbrVal$ = GETCONTROLTEXT (d1,24) WRITE inifile,vbrVal$ dsVal$ = GETCONTROLTEXT (d1,22) WRITE inifile,dsVal$ CLOSEFILE inifile ENDIF RETURN '--------- setOutDir (courtesy of Lucifer - modified for use) --------- SUB setOutDir TYPE BrowseInfo DEF hWndOwner:INT DEF pIDLRoot:INT DEF pszDisplayName:INT DEF lpszTitle:INT DEF ulFlags:INT DEF lpfnCallback:INT DEF lParam:INT DEF iImage:INT DEF sTitle:STRING ENDTYPE DEF W:WINDOW DEF iNull,lpIDList,lResult,slash:INT DEF sPath:STRING DEF uOutput:BrowseInfo DEF BIF_RETURNONLYFSDIRS:INT DEF MAX_PATH:INT DECLARE "User32",MessageBoxA(wnd:WINDOW, text:STRING, title:STRING, flags:INT),INT DECLARE "ole32.dll",CoTaskMemFree(hMem:INT) DECLARE "kernel32",lstrcatA(lpString1:STRING, lpString2:STRING),INT DECLARE "shell32",SHBrowseForFolder(lpbi:BrowseInfo),INT DECLARE "shell32",SHGetPathFromIDList(pidList:INT, lpBuffer:STRING),INT BIF_RETURNONLYFSDIRS = 1 MAX_PATH = 260 'Set the owner window uOutput.hWndOwner = 0 'lstrcat appends the two strings and returns the memory address uOutput.lpszTitle = lstrcatA("C:\","") 'Return only if the user selected a directory uOutput.ulFlags = BIF_RETURNONLYFSDIRS 'Show the 'Browse for folder' dialog lpIDList = SHBrowseForFolder(uOutput) IF lpIDList sPath = STRING$(MAX_PATH," ") 'Get the path from the IDList SHGetPathFromIDList(lpIDList,sPath) 'free the block of memory CoTaskMemFree(lpIDList) 'iNull = INSTR(sPath,STR$(0)) 'IF iNull ' sPath = LEFT$(sPath,iNull-1) 'ENDIF 'truncate string sPath Length = LEN (sPath) slash = INSTR(Length,sPath,"\") IF slash sPath = LEFT$(sPath,Length-1) ENDIF defaultOutDir$ = sPath ENDIF RETURN