77
88### Color settings
99
10- scolor = "violetred3 "
11- scolor2 = "DeepPink4 "
12- bgcolor = "snow4 "
13- windowcolor = "grey18 "
10+ scolor = "#4f565e "
11+ scolor2 = "#6c7684 "
12+ bgcolor = "#4d545e "
13+ windowcolor = "#2e3238 "
1414
1515## PyInstaller Path Converter
1616
@@ -33,7 +33,8 @@ def resource_path(relative_path):
3333 sg .FolderBrowse (button_color = scolor ),
3434 sg .Checkbox ('Iterate down folder tree? (Recursive)' , key = "-REC-" , enable_events = True , background_color = scolor ),
3535 sg .Checkbox ('Show paths?' , key = "-SHOWPATHS-" , enable_events = True , background_color = scolor ),
36- sg .Button ("Refresh" , button_color = scolor )
36+ sg .Button ("Refresh" , button_color = scolor ),
37+ sg .Button ("Create Sample Folders" , button_color = scolor ),
3738 ]]
3839
3940filelist = [sg .Listbox ([], size = (0 ,16 ), key = '-LIST-' , background_color = bgcolor , text_color = "white" , expand_x = True , expand_y = True , sbar_background_color = scolor , select_mode = sg .LISTBOX_SELECT_MODE_MULTIPLE , highlight_background_color = "DarkGreen" , highlight_text_color = "white" )]
@@ -82,20 +83,29 @@ def resource_path(relative_path):
8283
8384### Helpers
8485
85- def getfilenames (paths ):
86+ def make_safedir (path ):
87+ if not os .path .exists (path ):
88+ os .makedirs (path )
89+
90+ def get_filenames (paths ):
8691 fnames = []
8792 for path in paths :
8893 fnames .append (os .path .basename (path ))
8994 return fnames
9095
91- def updatefilelist (showpaths , paths ):
96+ def get_full_foldernames (directory , filenames ):
97+ folnames = []
98+ for file in filenames :
99+ folnames .append (directory + "/" + file )
100+ return folnames
101+
102+ def update_filelist (showpaths , paths ):
92103 if showpaths :
93104 window .Element ('-LIST-' ).update (values = paths )
94105 else :
95- window .Element ('-LIST-' ).update (values = getfilenames (paths ))
106+ window .Element ('-LIST-' ).update (values = get_filenames (paths ))
96107
97- def getfiles (directory , recursive ):
98- filelog (f"Checking for wavs in { directory } " )
108+ def get_files (directory , recursive ):
99109 files = []
100110 for file in glob .glob (f"{ directory } /*.wav" , recursive = recursive ):
101111 files .append (file )
@@ -111,9 +121,160 @@ def detect_leading_silence(sound, silence_threshold=-50.0, chunk_size=1):
111121
112122 return trim_ms
113123
124+ def spawn_popup_samples ():
125+ smpfolderset = False
126+ samplepack_folderlist = [sg .Column ([
127+ [sg .Text ("Drums" , background_color = bgcolor )],
128+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Drum_Loops" , background_color = bgcolor , key = "SMP_DRUM_LOOPS" ), sg .Text ("/" , background_color = windowcolor ), sg .Checkbox ("Cymbal_Loops" , background_color = "darkslateblue" , key = "SMP_CYMBAL_LOOPS" ), sg .Checkbox ("Hat_Loops" , background_color = "darkslateblue" , key = "SMP_HAT_LOOPS" ), sg .Checkbox ("Kick_Loops" , background_color = "darkslateblue" , key = "SMP_KICK_LOOPS" ), sg .Checkbox ("Snare_Loops" , background_color = "darkslateblue" , key = "SMP_SNARE_LOOPS" )],
129+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Drum_Hits" , background_color = bgcolor , key = "SMP_DRUM_HITS" ), sg .Text ("/" , background_color = windowcolor ), sg .Checkbox ("Cymbals" , background_color = "darkslateblue" , key = "SMP_CYMBALS" ), sg .Checkbox ("Hats" , background_color = "darkslateblue" , key = "SMP_HATS" ), sg .Checkbox ("Kicks" , background_color = "darkslateblue" , key = "SMP_KICKS" ), sg .Checkbox ("Snares" , background_color = "darkslateblue" , key = "SMP_SNARES" )],
130+ [sg .Text ("Percussion" , background_color = bgcolor )],
131+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Percussion_Loops" , background_color = bgcolor , key = "SMP_PERCUSSION_LOOPS" )],
132+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Percussion_Hits" , background_color = bgcolor , key = "SMP_PERCUSSION_HITS" )],
133+ [sg .Text ("Bass" , background_color = bgcolor )],
134+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Bass Loops" , background_color = bgcolor , key = "SMP_BASS_LOOPS" )],
135+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Bass Shots" , background_color = bgcolor , key = "SMP_BASS_SHOTS" )],
136+ [sg .Text ("Synth" , background_color = bgcolor )],
137+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Synth_Loops" , background_color = bgcolor , key = "SMP_SYNTH_LOOPS" )],
138+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Synth_Shots" , background_color = bgcolor , key = "SMP_SYNTH_SHOTS" )],
139+ [sg .Text ("FX" , background_color = bgcolor )],
140+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Loops" , background_color = bgcolor , key = "SMP_FX_LOOPS" )],
141+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Shots" , background_color = bgcolor , key = "SMP_FX_SHOTS" )],
142+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Downlifters" , background_color = bgcolor , key = "SMP_FX_DOWNLIFTERS" )],
143+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Uplifters" , background_color = bgcolor , key = "SMP_FX_UPLIFTERS" )],
144+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Impacts" , background_color = bgcolor , key = "SMP_FX_IMPACTS" )],
145+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Ambience" , background_color = bgcolor , key = "SMP_FX_AMBIENCE" )],
146+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Ambience_Loops" , background_color = bgcolor , key = "SMP_FX_AMBIENCE_LOOPS" )],
147+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Glitch" , background_color = bgcolor , key = "SMP_FX_GLITCH" )],
148+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Glitch_Loops" , background_color = bgcolor , key = "SMP_FX_GLITCH_LOOPS" )],
149+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Textures" , background_color = bgcolor , key = "SMP_FX_TEXTURES" )],
150+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("FX_Texture_Loops" , background_color = bgcolor , key = "SMP_FX_TEXTURE_LOOPS" )],
151+ [sg .Text ("Vocals" , background_color = bgcolor )],
152+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Vocal_Loops" , background_color = bgcolor , key = "SMP_VOCAL_LOOPS" )],
153+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Vocal_Shots" , background_color = bgcolor , key = "SMP_VOCAL_SHOTS" )],
154+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Vocal_Chops" , background_color = bgcolor , key = "SMP_VOCAL_CHOPS" )],
155+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Vocal_Chop_Loops" , background_color = bgcolor , key = "SMP_VOCAL_CHOP_LOOPS" )],
156+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Vocal_Ambience" , background_color = bgcolor , key = "SMP_VOCAL_AMBIENCE" )],
157+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Vocal_Ambience_Loops" , background_color = bgcolor , key = "SMP_VOCAL_AMBIENCE_LOOPS" )],
158+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Vocal_Glitch" , background_color = bgcolor , key = "SMP_VOCAL_GLITCH" )],
159+ [sg .Sizer (h_pixels = 20 ), sg .Checkbox ("Vocal_Glitch_Loops" , background_color = bgcolor , key = "SMP_VOCAL_GLITCH_LOOPS" )],
160+
161+ ], background_color = windowcolor , scrollable = True , vertical_scroll_only = True , sbar_background_color = bgcolor , expand_x = True , expand_y = True )]
162+ layout = [samplepack_folderlist ,
163+ [sg .Text ('Folder' , background_color = bgcolor ),
164+ sg .In (size = (25 ,1 ), enable_events = True ,key = '-SMPFOLDER-' , readonly = True ),
165+ sg .FolderBrowse (button_color = scolor )],
166+ [sg .Button (button_text = "Create" , s = 10 , button_color = bgcolor ), sg .Button (button_text = "Cancel" , s = 10 , button_color = bgcolor )]
167+ ]
168+ popup = sg .Window ('Sample Pack Generator' , layout , background_color = windowcolor , icon = resource_path ("data/dtico.ico" ), font = ("Calibri" , 11 ), resizable = True , size = (750 ,1000 ))
169+ while True :
170+ popevent , v = popup .read ()
171+ if popevent in (sg .WIN_CLOSED , 'Exit' ):
172+ break
173+ if popevent == '-SMPFOLDER-' :
174+ smpfolder = v ['-SMPFOLDER-' ]
175+ smpfolderset = True
176+ print (smpfolder )
177+ if popevent == "Create" :
178+ if smpfolderset :
179+ #### DRUMS
180+ os_drumfolder = smpfolder + "/One_Shots/Drums"
181+ lp_drumfolder = smpfolder + "/Loops/Drum_Loops"
182+ if v ["SMP_DRUM_LOOPS" ]:
183+ make_safedir (lp_drumfolder )
184+ if v ["SMP_CYMBAL_LOOPS" ]:
185+ make_safedir (lp_drumfolder + "/Cymbal_Loops" )
186+ if v ["SMP_HAT_LOOPS" ]:
187+ make_safedir (lp_drumfolder + "/Hat_Loops" )
188+ if v ["SMP_KICK_LOOPS" ]:
189+ make_safedir (lp_drumfolder + "/Kick_Loops" )
190+ if v ["SMP_SNARE_LOOPS" ]:
191+ make_safedir (lp_drumfolder + "/Snare_Loops" )
192+ if v ["SMP_DRUM_HITS" ]:
193+ make_safedir (os_drumfolder )
194+ if v ["SMP_CYMBALS" ]:
195+ make_safedir (os_drumfolder + "/Cymbals" )
196+ if v ["SMP_HATS" ]:
197+ make_safedir (os_drumfolder + "/Hats" )
198+ if v ["SMP_KICKS" ]:
199+ make_safedir (os_drumfolder + "/Kicks" )
200+ if v ["SMP_SNARES" ]:
201+ make_safedir (os_drumfolder + "/Snares" )
202+
203+ ##### PERC
204+ if v ["SMP_PERCUSSION_LOOPS" ]:
205+ make_safedir (smpfolder + "/Loops/Percussion_Loops" )
206+ if v ["SMP_PERCUSSION_HITS" ]:
207+ make_safedir (smpfolder + "/One_Shots/Percussion" )
208+
209+ #### BASS
210+ if v ["SMP_BASS_LOOPS" ]:
211+ make_safedir (smpfolder + "/Loops/Bass_Loops" )
212+ if v ["SMP_BASS_SHOTS" ]:
213+ make_safedir (smpfolder + "/One_Shots/Bass_Shots" )
214+
215+ #### SYNTHS
216+ if v ["SMP_SYNTH_LOOPS" ]:
217+ make_safedir (smpfolder + "/Loops/Synth_Loops" )
218+ if v ["SMP_SYNTH_SHOTS" ]:
219+ make_safedir (smpfolder + "/One_Shots/Synth_Shots" )
220+
221+
222+ ### FX
223+ os_fxfolder = smpfolder + "/One_Shots/FX"
224+ lp_fxfolder = smpfolder + "/Loops/FX_Loops"
225+ if v ["SMP_FX_LOOPS" ]:
226+ make_safedir (lp_fxfolder + "/SFX_Loops" )
227+ if v ["SMP_FX_SHOTS" ]:
228+ make_safedir (os_fxfolder + "/SFX_Shots" )
229+ if v ["SMP_FX_DOWNLIFTERS" ]:
230+ make_safedir (os_fxfolder + "/FX_Downlifters" )
231+ if v ["SMP_FX_UPLIFTERS" ]:
232+ make_safedir (os_fxfolder + "/FX_Uplifters" )
233+ if v ["SMP_FX_IMPACTS" ]:
234+ make_safedir (os_fxfolder + "/FX_Impacts" )
235+ if v ["SMP_FX_AMBIENCE" ]:
236+ make_safedir (os_fxfolder + "/FX_Ambience" )
237+ if v ["SMP_FX_AMBIENCE_LOOPS" ]:
238+ make_safedir (lp_fxfolder + "/FX_Ambience_Loops" )
239+ if v ["SMP_FX_GLITCH" ]:
240+ make_safedir (os_fxfolder + "/FX_Glitch" )
241+ if v ["SMP_FX_GLITCH_LOOPS" ]:
242+ make_safedir (lp_fxfolder + "/FX_Glitch_Loops" )
243+ if v ["SMP_FX_TEXTURES" ]:
244+ make_safedir (lp_fxfolder + "/FX_Textures" )
245+ if v ["SMP_FX_TEXTURE_LOOPS" ]:
246+ make_safedir (lp_fxfolder + "/FX_Texture_Loops" )
247+
248+ ### VOCAL
249+ os_vocfolder = smpfolder + "/One_Shots/Vocals"
250+ lp_vocfolder = smpfolder + "/Loops/Vocal_Loops"
251+ if v ["SMP_VOCAL_LOOPS" ]:
252+ make_safedir (lp_vocfolder )
253+ if v ["SMP_VOCAL_SHOTS" ]:
254+ make_safedir (os_vocfolder + "/Vocal_Shots" )
255+ if v ["SMP_VOCAL_CHOPS" ]:
256+ make_safedir (os_vocfolder + "/Vocal_Chops" )
257+ if v ["SMP_VOCAL_CHOP_LOOPS" ]:
258+ make_safedir (lp_vocfolder + "/Vocal_Chop Loops" )
259+ if v ["SMP_VOCAL_AMBIENCE" ]:
260+ make_safedir (os_vocfolder + "/Vocal_Ambience" )
261+ if v ["SMP_VOCAL_AMBIENCE_LOOPS" ]:
262+ make_safedir (lp_vocfolder + "/Vocal_Ambience_Loops" )
263+ if v ["SMP_VOCAL_GLITCH" ]:
264+ make_safedir (os_vocfolder + "/Vocal_Glitch" )
265+ if v ["SMP_VOCAL_GLITCH_LOOPS" ]:
266+ make_safedir (lp_vocfolder + "/Vocal_Glitch_Loops" )
267+
268+
269+
270+ #####
271+ popup .close ()
272+ if popevent == "Cancel" :
273+ popup .close ()
274+
114275### Modules
115276
116- def trimsilence (files ):
277+ def trim_silence (files ):
117278 for file in files :
118279 fname = os .path .basename (file )
119280 sound = AudioSegment .from_file (file )
@@ -124,15 +285,15 @@ def trimsilence(files):
124285 trimmed_sound .export (file , format = "wav" )
125286 filelog ("Trimmed " + fname )
126287
127- def convertbitrate (files ):
288+ def convert_bitrate (files ):
128289 bitrate = str (values ['-BITRATE-' ])
129290 for file in files :
130291 fname = os .path .basename (file )
131292 data , samplerate = soundfile .read (file )
132293 soundfile .write (file , data , samplerate , subtype = 'PCM_' + bitrate )
133294 filelog ("Converting " + fname + " to " + bitrate + " - bit" )
134295
135- def convertsamplerate (files ):
296+ def convert_samplerate (files ):
136297 samplerate = int (values ['-SAMPLERATE-' ])
137298 for file in files :
138299 fname = os .path .basename (file )
@@ -172,27 +333,29 @@ def rmempty(files, FLStudio):
172333 filelog ("Removing " + fname )
173334 os .remove (file )
174335
175- def setprefix (files , prefix ):
336+ def set_prefix (files , prefix ):
176337 curproc = 0
338+ newfiles = []
177339 for file in files :
178340 fname = os .path .basename (file )
179341 d = os .path .dirname (file )
180342 os .rename (file , d + "/" + prefix + fname )
181343 filelog ("Renamed to " + prefix + fname )
182344 curproc += 1
183- if curproc == len ( files ):
184- updatefilelist ( values [ "-SHOWPATHS-" ], getfiles ( d , values [ '-REC-' ]))
345+ newfiles . append ( d + "/" + prefix + fname )
346+ return newfiles
185347
186- def setsuffix (files , suffix ):
348+ def set_suffix (files , suffix ):
187349 curproc = 0
350+ newfiles = []
188351 for file in files :
189352 fname = os .path .basename (file ).split ("." )[0 ]
190353 d = os .path .dirname (file )
191354 os .rename (file , d + "/" + fname + suffix + ".wav" )
192355 filelog ("Renamed to " + fname + suffix + ".wav" )
193356 curproc += 1
194- if curproc == len ( files ):
195- updatefilelist ( values [ "-SHOWPATHS-" ], getfiles ( d , values [ '-REC-' ]))
357+ newfiles . append ( d + "/" + fname + suffix + ".wav" )
358+ return newfiles
196359
197360def findrepl (files , rplfrom , rplto ):
198361 curproc = 0
@@ -204,7 +367,7 @@ def findrepl(files, rplfrom, rplto):
204367 os .rename (file , d + "/" + newfname )
205368 curproc += 1
206369 if curproc == len (files ):
207- updatefilelist (values ["-SHOWPATHS-" ], getfiles (d , values ['-REC-' ]))
370+ update_filelist (values ["-SHOWPATHS-" ], get_files (d , values ['-REC-' ]))
208371
209372
210373### GUI Logic
@@ -223,54 +386,55 @@ def filelog(logmsg):
223386 break
224387 if event == '-FOLDER-' :
225388 folder = values ['-FOLDER-' ]
226- currentfiles = getfiles (folder , values ['-REC-' ])
227- updatefilelist (values ["-SHOWPATHS-" ], currentfiles )
389+ currentfiles = get_files (folder , values ['-REC-' ])
390+ update_filelist (values ["-SHOWPATHS-" ], currentfiles )
228391 folderset = True
229392 filelog ("Folder Set" )
230393 if event == 'Refresh' :
231394 if folderset == True :
232- currentfiles = getfiles (folder , values ['-REC-' ])
233- updatefilelist (values ["-SHOWPATHS-" ], currentfiles )
395+ currentfiles = get_files (folder , values ['-REC-' ])
396+ update_filelist (values ["-SHOWPATHS-" ], currentfiles )
234397
235398 if event == '-REC-' :
236399 if folderset == True :
237- currentfiles = getfiles (folder , values ['-REC-' ])
238- updatefilelist (values ["-SHOWPATHS-" ], currentfiles )
400+ currentfiles = get_files (folder , values ['-REC-' ])
401+ update_filelist (values ["-SHOWPATHS-" ], currentfiles )
239402
240403 if event == '-SHOWPATHS-' :
241404 if folderset == True :
242- currentfiles = getfiles (folder , values ['-REC-' ])
243- updatefilelist (values ["-SHOWPATHS-" ], currentfiles )
405+ currentfiles = get_files (folder , values ['-REC-' ])
406+ update_filelist (values ["-SHOWPATHS-" ], currentfiles )
407+ if event == 'Create Sample Folders' :
408+ spawn_popup_samples ()
244409
245410
246411 if event == 'Process' :
247412 if folderset == True :
248- currentfiles = getfiles (folder , values ['-REC-' ])
413+ if values ['-LIST-' ] != []:
414+ currentfiles = get_full_foldernames (folder , values ['-LIST-' ])
415+ else :
416+ currentfiles = get_files (folder , values ['-REC-' ])
249417 try :
250418 if values ['-TRIM-' ] == True :
251- trimsilence (currentfiles )
419+ trim_silence (currentfiles )
252420 if values ['-NORM-' ] == True :
253421 normalize (currentfiles )
254422 if values ['-BIT-' ] == True :
255- convertbitrate (currentfiles )
423+ convert_bitrate (currentfiles )
256424 if values ['-SMPRATE-' ] == True :
257- convertsamplerate (currentfiles )
425+ convert_samplerate (currentfiles )
258426 if values ['-PREFIXBOOL-' ] == True :
259- setprefix (currentfiles , values ["-PREFIXSTR-" ])
260- currentfiles = getfiles (folder , values ['-REC-' ])
427+ currentfiles = set_prefix (currentfiles , values ["-PREFIXSTR-" ])
261428 if values ['-SUFFIXBOOL-' ] == True :
262- setsuffix (currentfiles , values ["-SUFFIXSTR-" ])
263- currentfiles = getfiles (folder , values ['-REC-' ])
429+ currentfiles = set_suffix (currentfiles , values ["-SUFFIXSTR-" ])
264430 if values ['-REPL-' ] == True :
265- try :
266- findrepl (currentfiles , values ["-RPLFROM-" ], values ["-RPLTO-" ])
267- except FileNotFoundError :
268- findrepl (getfiles (folder , values ['-REC-' ]), values ["-RPLFROM-" ], values ["-RPLTO-" ])
431+ findrepl (currentfiles , values ["-RPLFROM-" ], values ["-RPLTO-" ])
269432
270433
271434##### Destructive, should be last!
272435 if values ['-EMPTY-' ] == True :
273436 rmempty (currentfiles , values ['-EMPTYFL-' ])
437+ update_filelist (values ["-SHOWPATHS-" ], get_files (folder , values ['-REC-' ]))
274438
275439
276440 except NameError as error :
0 commit comments