Offline processing of multiple audio files in batch¶
This program demonstrates how to use pyo to do offline batch processing given a folder of sounds.
import os from pyo import * # Initialize the Server in offline mode. s = Server(audio="offline") # Path to your sound folder (SNDS_PATH is a folder containing a few sounds installed with pyo, # you can change this path to try with your own sounds). folder_path = SNDS_PATH # Path to the processed sounds folder (user's home directory/pyo_batch_fx/). output_folder = os.path.join(os.path.expanduser("~"), "pyo_batch_fx") # create the folder if it does not exist. if not os.path.isdir(output_folder): os.mkdir(output_folder) # Get the list of audio files to process. sounds = [f for f in os.listdir(folder_path) if sndinfo(os.path.join(folder_path, f)) is not None] # Enter the batch processing loop. for sound in sounds: # Retrieve info about the sound from its header. path = os.path.join(folder_path, sound) info = sndinfo(path) dur, sr, chnls = info, info, info fformat = ["WAVE", "AIFF", "AU", "RAW", "SD2", "FLAC", "CAF", "OGG"].index(info) samptype = [ "16 bit int", "24 bit int", "32 bit int", "32 bit float", "64 bits float", "U-Law encoded", "A-Law encoded", ].index(info) # Set server parameters according to the current sound info. s.setSamplingRate(sr) s.setNchnls(chnls) s.boot() s.recordOptions( dur=dur + 1, # give some room for the reverb trail! filename=os.path.join(output_folder, sound), fileformat=fformat, sampletype=samptype, ) # Simple processing applied to the sound. source = SfPlayer(path) bandpass = ButBP(source, 1000, 5) disto = Disto(bandpass, drive=0.9, slope=0.8) output = WGVerb(source + disto, feedback=0.8, cutoff=5000, bal=0.25, mul=0.5).out() # Start the rendering. s.start() # Cleanup for the next pass. s.shutdown()