| import os |
| import sys |
| import soundfile as sf |
| from pedalboard import Pedalboard, Reverb, Compressor, HighShelfFilter, LowShelfFilter, Chorus, Distortion |
| from pedalboard.io import AudioFile |
| import numpy as np |
| from pathlib import Path |
|
|
| def apply_transformations_gpu(input_folder, output_folder): |
| print(f"\n[STAGE 3] Applying Multi-Layer Transformations...") |
| print(f"Reading from: {input_folder}") |
| os.makedirs(output_folder, exist_ok=True) |
|
|
| vocal_board = Pedalboard([Compressor(threshold_db=-20, ratio=4), Reverb(room_size=0.1, wet_level=0.1), HighShelfFilter(cutoff_frequency_hz=3000, gain_db=2)]) |
| drum_board = Pedalboard([Distortion(drive_db=2), LowShelfFilter(cutoff_frequency_hz=150, gain_db=3)]) |
| music_board = Pedalboard([Chorus(depth=0.2, rate_hz=1.0), Reverb(room_size=0.2, wet_level=0.15)]) |
|
|
| files_processed = 0 |
| |
| for root, dirs, files in os.walk(input_folder): |
| for file in files: |
| if file.endswith(('.wav', '.mp3', '.flac')): |
| input_path = os.path.join(root, file) |
| output_path = os.path.join(output_folder, f"transformed_{file}") |
| |
| print(f" Processing: {file}") |
| with AudioFile(input_path) as f: |
| audio = f.read(f.frames) |
| samplerate = f.samplerate |
| board = vocal_board if "vocals" in file.lower() else (drum_board if "drums" in file.lower() else music_board) |
| effected = board(audio, samplerate) |
| with AudioFile(output_path, 'w', samplerate, effected.shape[0]) as o: |
| o.write(effected) |
| files_processed += 1 |
|
|
| print(f"[SUCCESS] {files_processed} stems transformed and saved to: {output_folder}") |
|
|
| if __name__ == "__main__": |
| stems_in = os.path.join(os.getcwd(), "Outputs", "Stems") |
| fx_out = os.path.join(os.getcwd(), "Outputs", "Transformed") |
| apply_transformations_gpu(stems_in, fx_out) |
|
|