infer-vst / back /utils /synth.py
Yann
push backend
86694c3
raw
history blame
3.08 kB
#!/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()