# jm 2014-04-25 # Konvertiert WAV-Dateien in einem Verzeichnis auf der Festplatte # modifiziert werden können die Abtastrate, die Amplitude und die Kanalanzahl (nach Wahl) # Usage: # - Verzeichnis auswählen # - Skript starten # - gewünschte Modifikationen auswählen directoryName$ = chooseDirectory$ ("Verzeichnis mit wav-Dateien auswählen") if directoryName$ = "" exit Kein Verzeichnis ausgewählt. endif fileListID = do ("Create Strings as file list...", "fileList", directoryName$ + "/*.wav") nOfFiles = do ("Get number of strings") if nOfFiles = 0 exit Keine WAV-Dateien gefunden. endif beginPause ("WAV-Dateien konvertieren") comment ("Im gewählten Arbeitsverzeichnis") comment ("'directoryName$'") comment ("wurden 'nOfFiles' wav-Dateien gefunden.") comment (" ") comment ("Originaldateien in ein Backup-Verzeichnis kopieren?") comment ("(Im Arbeitsverzeichnis werden die Originale überschrieben") comment ("bzw. gelöscht!)") boolean ("Backup anlegen", 1) comment ("Abtastrate") boolean ("Abtastrate verändern", 0) optionMenu ("Neue Abtastrate", 6) option ("8000") option ("10000") option ("11000") option ("16000") option ("22050") option ("44100") option ("48000") comment ("Lautstärke") boolean ("Lautstärke verändern", 0) optionMenu ("Methode", 1) option ("Signal multiplizieren (Faktor)") option ("Amplitude skalieren (Absoluter Peak)") option ("Intensität skalieren (Durchnittliche Intensität)") real ("Faktor", 2.0) positive ("Absoluter Peak", 0.99) positive ("Durchnittliche Intensität (dB SPL)", 70) comment ("Kanäle") boolean ("Stereosignale verändern", 0) optionMenu ("Stereo", 1) option ("zu Mono konvertieren (a|b → ab)") option ("beide Kanäle extrahieren (a|b → a, b)") option ("Kanal 1 extrahieren (a|b → a)") option ("Kanal 2 extrahieren (a|b → b)") boolean ("Monosignale verändern", 0) optionMenu ("Mono", 1) option ("zu Stereo konvertieren (a → a|a)") option ("zu Stereo, rechts Stille (a → a|0)") option ("zu Stereo, links Stille (a → 0|a)") clicked = endPause ("Abbrechen", "Konvertieren", 2, 1) if clicked = 1 goto FINISH endif # blank info window writeInfo() # create unique backup directory if backup_anlegen = 1 subDirListID = do ("Create Strings as directory list...", "subDirList", directoryName$) nOfDirs = do ("Get number of strings") nc = 0 for i to nOfDirs selectObject (subDirListID) dirName$ = do$ ("Get string...", i) c = index (dirName$, "Backup") if c <> 0 nc = nc + 1 endif endfor if nc > 0 bkpDir$ = "Backup-'nc'" else bkpDir$ = "Backup" endif appendInfoLine ("Backup -Verzeichnis erstellen: ", directoryName$, "/", bkpDir$) createDirectory (directoryName$ + "/" + bkpDir$) removeObject (subDirListID) appendInfoLine () endif # loop through the files: load - convert - save - remove for i to nOfFiles # load file selectObject (fileListID) fileName$ = do$ ("Get string...", i) appendInfoLine ("Lade ", fileName$) fileID = do ("Read from file...", directoryName$ + "/" + fileName$) # save backup if backup_anlegen = 1 appendInfoLine ("Erstelle Backup: ", bkpDir$, "/", fileName$) do ("Save as WAV file...", directoryName$ + "/" + bkpDir$ + "/" + fileName$) endif # resampling this_sf = do ("Get sampling frequency") if abtastrate_verändern = 1 new_sf = number (neue_Abtastrate$) if this_sf <> new_sf appendInfoLine ("Neue Abtastrate: ", new_sf, "Hz (war ", this_sf, "Hz)") fooID = noprogress do ("Resample...", new_sf, 50) removeObject (fileID) fileID = fooID this_sf = new_sf endif endif # modify amplitude/intensity if lautstärke_verändern = 1 if methode = 1 appendInfoLine ("Multipliziere Amplitude mit ", faktor) do ("Multiply...", faktor) elsif methode = 2 appendInfoLine ("Skaliere Amplitudenpeak zu ", absoluter_Peak) do ("Scale peak...", absoluter_Peak) elsif methode = 3 appendInfoLine ("Skaliere Intensität zu ", durchnittliche_Intensität, " dB SPL") do ("Scale intensity...", durchnittliche_Intensität) endif endif # convert mono/stereo selectObject (fileID) nOfCh = do ("Get number of channels") if stereosignale_verändern = 1 && nOfCh = 2 if stereo = 1 appendInfoLine ("Konvertiere zu Mono") fooID = do ("Convert to mono") removeObject (fileID) fileID = fooID elsif stereo = 2 appendInfoLine ("Extrahiere beide Kanäle") ch1ID = do ("Extract one channel...", 1) selectObject (fileID) ch2ID = do ("Extract one channel...", 2) elsif stereo = 3 appendInfoLine ("Extrahiere Kanal 1") fooID = do ("Extract one channel...", 1) removeObject (fileID) fileID = fooID elsif stereo = 4 appendInfoLine ("Extrahiere Kanal 2") fooID = do ("Extract one channel...", 2) removeObject (fileID) fileID = fooID endif elsif monosignale_verändern = 1 && nOfCh = 1 if mono = 1 appendInfoLine ("Konvertiere zu Stereo") fooID = do ("Convert to stereo") removeObject (fileID) fileID = fooID elsif mono = 2 appendInfoLine ("Konvertiere zu Stereo, Stille rechts") dur = do ("Get total duration") silID = do ("Create Sound from formula...", "silence", 1, 0, dur, this_sf, "0") plusObject (fileID) fooID = do ("Combine to stereo") removeObject (fileID, silID) fileID = fooID elsif mono = 3 appendInfoLine ("Konvertiere zu Stereo, Stille links") dur = do ("Get total duration") silID = do ("Create Sound from formula...", "silence", 1, 0, dur, this_sf, "0") selectObject (fileID) copyID = do ("Copy...", "copy") plusObject (silID) fooID = do ("Combine to stereo") removeObject (fileID, silID, copyID) fileID = fooID endif endif # save results if stereosignale_verändern = 1 && nOfCh = 2 && stereo = 2 selectObject (ch1ID) newname$ = replace$ (fileName$, ".wav", "-ch1.wav", 1) appendInfoLine ("Speichere ", newname$) nowarn do ("Save as WAV file...", directoryName$ + "/" + newname$) selectObject (ch2ID) newname$ = replace$ (fileName$, ".wav", "-ch2.wav", 1) appendInfoLine ("Speichere ", newname$) nowarn do ("Save as WAV file...", directoryName$ + "/" + newname$) appendInfoLine ("Lösche ", fileName$) deleteFile (directoryName$ + "/" + fileName$) removeObject (ch1ID, ch2ID) else selectObject (fileID) appendInfoLine ("Speichere ", fileName$) nowarn do ("Save as WAV file...", directoryName$ + "/" + fileName$) endif removeObject (fileID) appendInfoLine () endfor appendInfoLine ("Fertig") label FINISH removeObject (fileListID)