#!/usr/bin/env python # coding: utf-8 import contextlib import glob import io import json import logging import multiprocessing import os import random import time import traceback import sys from pydub import AudioSegment, silence from anyio import Path import dawdreamer as daw import numpy as np from scipy.io import wavfile from pydub import AudioSegment from pydub.silence import split_on_silence import tqdm import csv SAMPLE_RATE = 44100 # Parameters will undergo automation at this buffer/block size. BUFFER_SIZE = 128 PPQN = 960 # Pulses per quarter note. SYNTH_PLUGIN = "libTAL-NoiseMaker.so" # SYNTH_PLUGIN = "C:/Program Files/Common Files/VST3/Surge Synth Team/Surge XT.vst3/Contents/x86_64-win/Surge XT.vst3" def make_sine(freq: float, duration: float, sr=SAMPLE_RATE): """Return sine wave based on freq in Hz and duration in seconds""" N = int(duration * sr) # Number of samples return np.sin(np.pi*2.*freq*np.arange(N)/sr) def gen(): # print(f'Current gen: {self.current_num}') engine = daw.RenderEngine(SAMPLE_RATE, BUFFER_SIZE) output_dir = Path("yay") # Make a processor and give it the unique name "my_synth", which we use later. synth = engine.make_plugin_processor("my_synth", SYNTH_PLUGIN) assert synth.get_name() == "my_synth" #Outputs the properties names and dumps them in a json params = {} for param in range(1,86): params[param] = (synth.get_parameter_name(param)) with open(str(f'params_.json'), 'w') as f: json.dump(params, f) #synth.load_preset("C:/Users/yderre/AppData/Roaming/ToguAudioLine/TAL-NoiseMaker/presets/Factory Presets/DRUM/DR 8bit Kick II FN.noisemakerpreset") # Get the parameters description from the plugin parameters = synth.get_parameters_description() array = [] # Create a dictionary with parameter names as keys and their indices as values synth.add_midi_note(40, 127, 0, 0.2) # for i in range(0,120): # print(f"{parameters[i]['name']}") # return with open('InverSynth_01998.wav.csv', 'r') as csvfile: reader = csv.reader(csvfile) # Skip the header row next(reader) i=0 # Loop through the rows for row in reader: # Get the floating-point number from the third column value = float(row[2]) params = {} # (MIDI note, velocity, start, duration) print(f"{parameters[i]['name']} changed from {parameters[i]['defaultValue']} to {value} ") synth.set_parameter(i, value) i+=1 # don't do reverb graph = [ # synth takes no inputs, so we give an empty list. (synth, []), ] engine.load_graph(graph) engine.render(1) output = engine.get_audio() wavfile.write( str(output_dir/f'test_.wav'), SAMPLE_RATE, output.transpose()) synth.open_editor() # Open the editor, make changes, and clos if __name__ == "__main__": gen()