From 656a23899788bf81f8cc2d1d7d95d287f0f55ed9 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Thu, 3 Oct 2024 20:58:51 +0200 Subject: [PATCH 01/67] bugfix + synth optimization --- audio_stuff/midi/stream_file.py | 28 ++++ main.py | 13 +- scr/music.py | 236 +++++++++----------------------- tests/fourier_nn_audio_test.py | 4 +- 4 files changed, 106 insertions(+), 175 deletions(-) create mode 100644 audio_stuff/midi/stream_file.py diff --git a/audio_stuff/midi/stream_file.py b/audio_stuff/midi/stream_file.py new file mode 100644 index 0000000..e25247e --- /dev/null +++ b/audio_stuff/midi/stream_file.py @@ -0,0 +1,28 @@ +import time +import mido +from mido import MidiFile, MidiTrack, Message + + +def play_channel(midi_file_path, channel_to_play): + midi_file = MidiFile(midi_file_path) + output = mido.open_output('LoopBe Internal MIDI 1') + + start_time = time.time() + for track in midi_file.tracks: + current_time = start_time + for msg in track: + if not msg.is_meta and not msg.type == 'sysex': + if msg.channel == channel_to_play: + # Convert time from milliseconds to seconds + time.sleep(msg.time / 1000.0) + print(msg) + mido.Message(msg.type, note=msg.note, + velocity=msg.velocity, channel=0) + output.send(msg) + current_time += msg.time / 1000.0 + + +if __name__ == "__main__": + midi_file_path = str(input("input filename: ")).strip() + channel_to_play = int(input("Enter the channel number to play (0-15): ")) + play_channel(midi_file_path, channel_to_play) diff --git a/main.py b/main.py index 12c51f0..78dac5c 100644 --- a/main.py +++ b/main.py @@ -7,7 +7,7 @@ import numpy as np from scr import music from scr import utils -from scr.music import Synth3, musik_from_file +from scr.music import Synth2, musik_from_file from scr.simple_input_dialog import askStringAndSelectionDialog from scr.std_redirect import RedirectedOutputFrame from scr.utils import DIE, tk_after_errorless @@ -113,7 +113,7 @@ def __init__(self, *args, manager: SyncManager = None, **kwargs): self.block_training = False self.queue = Queue(-1) self.fourier_nn = None - self.synth: Synth3 = None + self.synth: Synth2 = None self.init_terminal_frame() self.create_menu() self.create_row_one() @@ -308,7 +308,7 @@ def train_update(self): # f"Layer: {name} | Size: {param.size()} | Values:\n{param[:2]}\n------------------------------") self.graph.plot_function( self.fourier_nn.predict, x_range=(0, 2*np.pi, 44100//2)) - self.synth = Synth3(self.fourier_nn, self.std_queue) + self.synth = Synth2(self.fourier_nn, self.std_queue) DIE(self.trainings_process) self.trainings_process = None self.training_started = False @@ -340,6 +340,9 @@ def start_training(self): if self.trainings_process or self.block_training: print('already training') return + if self.synth: + if self.synth.live_synth: + self.synth.run_live_synth() self.block_training = True print("STARTING TRAINING") t = Thread(target=self.init_or_update_nn, args=(self.std_queue,)) @@ -416,7 +419,7 @@ def load_neural_net(self): self.graph.draw_extern_graph_from_func( self.fourier_nn.predict, name) print(name) - self.synth = Synth3(self.fourier_nn, self.std_queue) + self.synth = Synth2(self.fourier_nn, self.std_queue) # self.fourier_nn.update_data( # data=self.graph.get_graph(name=name)[0]) @@ -442,7 +445,7 @@ def update_frourier_params(self, key, value): return True return False - +# for "invalid command" in the tk.TK().after() function when programm gets closed # def start_server(): # global window # with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: diff --git a/scr/music.py b/scr/music.py index 9686c21..90ed61d 100644 --- a/scr/music.py +++ b/scr/music.py @@ -285,10 +285,10 @@ def apply_reverb(audio, decay=0.5, delay=0.02, fs=44100): def apply_echo(audio, delay=0.2, decay=0.5, fs=44100): delay_samples = int(delay * fs) - echo_audio = np.zeros((len(audio) + delay_samples, audio.shape[1])) - echo_audio[:len(audio), :] = audio - echo_audio[delay_samples:, :] += decay * audio - echo_audio = echo_audio[:len(audio), :] + echo_audio = np.zeros((len(audio) + delay_samples)) + echo_audio[:len(audio)] = audio + echo_audio[delay_samples:] += decay * audio + echo_audio = echo_audio[:len(audio)] return echo_audio @@ -314,7 +314,6 @@ def apply_distortion(audio, gain=2.0, threshold=0.5): class Synth2(): - # MIDI_NOTE_OF_FREQ_ONE = midi.frequency_to_midi(1) def __init__(self, fourier_nn, stdout: Queue = None): self.stdout = stdout self.live_synth: Process = None @@ -322,143 +321,6 @@ def __init__(self, fourier_nn, stdout: Queue = None): self.fourier_nn: FourierNN = fourier_nn self.fs = 44100 # Sample rate self.max_parralel_notes = 3 - self.current_notes: set = set() - self.effects: list[Callable] = [ - # apply_reverb, - # apply_echo, - # apply_chorus, - # apply_distortion, - ] - self.current_frame = 0 - t = np.array([2 * np.pi * midi.midi_to_frequency(f) * - np.linspace(0, 1, self.fs) for f in range(128)]) - self.t_buffer = torch.tensor(t, dtype=torch.float32) - - def play_init_sound(self): - f1 = 440 # Frequency of the "duuu" sound (in Hz) - f2 = 880 # Frequency of the "dib" sound (in Hz) - t1 = 0.8 # Duration of the "duuu" sound (in seconds) - t2 = 0.2 # Duration of the "dib" sound (in seconds) - t = np.arange(int(t1 * self.fs)) / self.fs - sound1 = 0.5 * np.sin(2 * np.pi * f1 * t) - - # Generate the "dib" sound - t = np.arange(int(t2 * self.fs)) / self.fs - sound2 = 0.5 * np.sin(2 * np.pi * f2 * t) - - # Concatenate the two sounds - audio = np.concatenate([sound1, sound2]) - output = np.array( - audio * 32767 / np.max(np.abs(audio)) / 2).astype(np.int16) - # stereo_sine_wave = np.repeat(output.reshape(-1, 1), 2, axis=1) - sd.play(output, blocking=True) - print("Ready") - - def audio_callback(self, outdata, frames, time, status): - current_notes = set(self.current_notes) - # print(current_notes, self.current_notes) - if status: - print(status) - with torch.no_grad(): - for j, note in enumerate(current_notes): - # pass - if j >= self.max_parralel_notes: - break - self.pre_audio_buffer[j, :] = self.fourier_nn.current_model( - utils.wrap_concat(self.t_buffer[note], self.current_frame, self.current_frame+frames)) - y = torch.clamp(torch.sum(self.pre_audio_buffer, dim=0), - min=-1, max=1).cpu().numpy() - # print(y.shape) - outdata[:] = y.reshape(-1, 1) - self.current_frame = (self.current_frame + frames) % self.fs - - def apply_effects(self, sound): - for effect in self.effects: - print(effect.__name__) - sound[:] = effect(sound) - sound = sound-np.mean(sound) - sound[:] = rescale_audio(sound) - return sound - - def live_synth_loop(self): - print("Live Synth is running") - self.fourier_nn.current_model.to(self.fourier_nn.device) - self.t_buffer = self.t_buffer.to(self.fourier_nn.device) - stream = sd.OutputStream( - callback=lambda *args, **kwargs: utils.messure_time_taken('audio_callback', self.audio_callback, *args, **kwargs, wait=False), samplerate=self.fs, channels=1, blocksize=512) - self.play_init_sound() - midi_thread = threading.Thread(target=self.midi_thread, daemon=True) - midi_thread.start() - - self.pre_audio_buffer = torch.zeros((self.max_parralel_notes, 512), - device=self.fourier_nn.device) - with stream: - while midi_thread.is_alive(): - time.sleep(0.1) - if hasattr(utils.messure_time_taken, 'time_taken'): - print(*utils.messure_time_taken.time_taken.items(), sep="\n") - - def midi_thread(self): - midi.init() - input_id = midi.get_default_input_id() - # print(input_id) - if input_id == -1: - print("No MIDI input device found.") - return - midi_input = midi.Input(input_id) - while True: - if midi_input.poll(): - midi_events = midi_input.read(10) - for midi_event, timestamp in midi_events: - if midi_event[0] == 144: - print("Note on", - midi_event[1], - midi.midi_to_frequency(midi_event[1])) - self.current_notes.add(midi_event[1]) - elif midi_event[0] == 128: - print("Note off", - midi_event[1], - midi.midi_to_frequency(midi_event[1])) - self.current_notes.discard(midi_event[1]) - - def run_live_synth(self): - if not self.live_synth: - print("spawning live synth") - self.live_synth = Process(target=self.live_synth_loop) - self.live_synth.start() - else: - print("killing live synth") - self.live_synth.terminate() - self.live_synth.join() - self.live_synth = None - print("live synth killed") - atexit.register(utils.DIE, self.live_synth, 0, 0) - - def __getstate__(self) -> object: - live_synth = self.live_synth - del self.live_synth - Synth_dict = self.__dict__.copy() - self.live_synth = live_synth - return Synth_dict - - def __setstate__(self, state): - # Load the model from a file after deserialization - self.__dict__.update(state) - if self.stdout is not None: - if current_process().name != 'MainProcess': - sys.stdout = utils.QueueSTD_OUT(queue=self.stdout) - - -class Synth3(): - def __init__(self, fourier_nn, stdout: Queue = None): - self.stdout = stdout - self.live_synth: Process = None - self.notes_ready = False - self.fourier_nn: FourierNN = fourier_nn - self.fs = 44100 # Sample rate - self.max_parralel_notes = 3 - self.effects: list[Callable] = [ - ] self.current_frame = 0 t = np.array([ midi.midi_to_frequency(f) * @@ -488,14 +350,6 @@ def play_init_sound(self): sd.play(output, blocking=True) print("Ready") - def apply_effects(self, sound): - for effect in self.effects: - print(effect.__name__) - sound[:] = effect(sound) - sound = sound-np.mean(sound) - sound[:] = rescale_audio(sound) - return sound - def live_synth_loop(self): print("Live Synth is running") self.play_init_sound() @@ -522,7 +376,6 @@ def live_synth_loop(self): # print(available_buffer, end=" |\t") if available_buffer == 0: continue - y = torch.zeros(available_buffer, device=self.fourier_nn.device) if midi_input.poll(): midi_event, timestamp = midi_input.read( 1)[0] # Read and process one event @@ -539,23 +392,23 @@ def live_synth_loop(self): notes.discard(midi_event[1]) - for note in notes: - with torch.no_grad(): - x = utils.wrap_concat( - self.t_buffer[note], current_frame, current_frame + available_buffer) - # x = self.t_buffer[note] - # print(x.shape) - # y += torch.sin(x).flatten() - y += self.fourier_nn.current_model(x.unsqueeze(1)) - audio_data = y.cpu().numpy().astype(np.float32) - audio_data = audio_data/(len(notes)) - audio_data = audio_data - np.mean(audio_data) - - # audio_data *= 0.5 - audio_data = np.clip(audio_data, -1, 1) - stream.write(audio_data, - available_buffer, - exception_on_underflow=True) + if len(notes) > 0: + y = np.zeros((len(notes), available_buffer)) + for i, note in enumerate(notes): + with torch.no_grad(): + x = utils.wrap_concat( + self.t_buffer[note], current_frame, current_frame + available_buffer) + + y[i, :] = self.fourier_nn.current_model(x.unsqueeze(1))\ + .cpu().numpy().astype(np.float32) + + audio_data = sum_signals(y) + audio_data = audio_data - np.mean(audio_data) + audio_data = np.clip(audio_data, -1, 1) + audio_data *= 0.7 + stream.write(audio_data, + available_buffer, + exception_on_underflow=True) current_frame = (current_frame + available_buffer) % self.fs def run_live_synth(self): @@ -584,3 +437,50 @@ def __getstate__(self) -> object: # if self.stdout is not None: # if current_process().name != 'MainProcess': # sys.stdout = utils.QueueSTD_OUT(queue=self.stdout) + + +def normalize(signal): + return signal / np.max(np.abs(signal)) + + +def rms(signal): + return np.sqrt(np.mean(signal**2)) + + +def mix_signals(signal1, signal2): + # Normalize both signals + signal1 = normalize(signal1) + signal2 = normalize(signal2) + + # Calculate RMS levels + rms1 = rms(signal1) + rms2 = rms(signal2) + + # Adjust gain + gain1 = 1 / rms1 + gain2 = 1 / rms2 + + # Apply gain + signal1 *= gain1 + signal2 *= gain2 + + # Mix signals + mixed_signal = signal1 + signal2 + + # Normalize mixed signal to prevent clipping + mixed_signal = normalize(mixed_signal) + + return mixed_signal + + +def sum_signals(signals): + # Normalize each signal + normalized_signals = np.array([normalize(signal) for signal in signals]) + + # Sum the signals along dimension 0 + summed_signal = np.sum(normalized_signals, axis=0) + + # Normalize the combined signal to prevent clipping + summed_signal = normalize(summed_signal) + + return summed_signal diff --git a/tests/fourier_nn_audio_test.py b/tests/fourier_nn_audio_test.py index 59b724b..522bd8e 100644 --- a/tests/fourier_nn_audio_test.py +++ b/tests/fourier_nn_audio_test.py @@ -11,7 +11,7 @@ from context import scr from scr import predefined_functions, utils from scr.fourier_neural_network import FourierNN -from scr.music import Synth2, Synth3 +from scr.music import Synth2, Synth2 # autopep8: on @@ -66,7 +66,7 @@ def main(): def stupid_thread(fourier_nn): - synth = Synth3(fourier_nn) + synth = Synth2(fourier_nn) # synth.current_notes.add(45) synth.run_live_synth() while True: From 0f1e19f416fa6303be8ba8cc83b67a677e9b0fb7 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Thu, 3 Oct 2024 22:06:26 +0200 Subject: [PATCH 02/67] suff --- scr/music.py | 36 +++++++++++++++++++++++------------- scr/utils.py | 6 ++++-- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/scr/music.py b/scr/music.py index 90ed61d..ce181b0 100644 --- a/scr/music.py +++ b/scr/music.py @@ -331,22 +331,35 @@ def __init__(self, fourier_nn, stdout: Queue = None): print(self.t_buffer.shape) def play_init_sound(self): - f1 = 440 # Frequency of the "duuu" sound (in Hz) - f2 = 880 # Frequency of the "dib" sound (in Hz) - t1 = 0.8 # Duration of the "duuu" sound (in seconds) - t2 = 0.2 # Duration of the "dib" sound (in seconds) + f1 = 440 # Frequency of the "du" sound (in Hz) + f2 = 660 # Frequency of the "dl" sound (in Hz) + f3 = 880 # Frequency of the "de" sound (in Hz) + f4 = 1320 # Frequency of the "dii" sound (in Hz) + t1 = 0.25 # Duration of the "du" sound (in seconds) + t2 = 0.25 # Duration of the "dl" sound (in seconds) + t3 = 0.25 # Duration of the "de" sound (in seconds) + t4 = 0.4 # Duration of the "dii" sound (in seconds) + + # Generate the "duuu" sound t = np.arange(int(t1 * self.fs)) / self.fs sound1 = 0.5 * np.sin(2 * np.pi * f1 * t) - # Generate the "dib" sound + # Generate the "dl" sound t = np.arange(int(t2 * self.fs)) / self.fs sound2 = 0.5 * np.sin(2 * np.pi * f2 * t) - # Concatenate the two sounds - audio = np.concatenate([sound1, sound2]) + # Generate the "diii" sound + t = np.arange(int(t3 * self.fs)) / self.fs + sound3 = 0.5 * np.sin(2 * np.pi * f3 * t) + + # Generate the "dub" sound + t = np.arange(int(t4 * self.fs)) / self.fs + sound4 = 0.5 * np.sin(2 * np.pi * f4 * t) + + # Concatenate the sounds to form "duuudldiiidub" + audio = np.concatenate([sound1, sound2, sound3, sound4]) output = np.array( audio * 32767 / np.max(np.abs(audio)) / 2).astype(np.int16) - # stereo_sine_wave = np.repeat(output.reshape(-1, 1), 2, axis=1) sd.play(output, blocking=True) print("Ready") @@ -368,10 +381,8 @@ def live_synth_loop(self): output=True) current_frame = 0 notes = set() - audio_min = np.inf - audio_max = -np.inf - # for _ in utils.timed_loop(True): - while True: + for _ in utils.timed_loop(True): + # while True: available_buffer = stream.get_write_available() # print(available_buffer, end=" |\t") if available_buffer == 0: @@ -404,7 +415,6 @@ def live_synth_loop(self): audio_data = sum_signals(y) audio_data = audio_data - np.mean(audio_data) - audio_data = np.clip(audio_data, -1, 1) audio_data *= 0.7 stream.write(audio_data, available_buffer, diff --git a/scr/utils.py b/scr/utils.py index 2c96391..0262394 100644 --- a/scr/utils.py +++ b/scr/utils.py @@ -378,9 +378,11 @@ def timed_generator(iterable): def timed_loop(condition): + max_val = 0 while condition: start_time = time.perf_counter_ns() yield - end_time = time.perf_counter_ns() + current_time = time.perf_counter_ns() - start_time + max_val = max(current_time, max_val) print( - f"Time taken for this iteration: {((end_time - start_time)/1_000_000_000):10.9f}ms") + f"Time taken for this iteration: {(current_time/1_000_000_000):10.9f}ms, max_val: {max_val/1_000_000_000:10.3}") From bd77c6fe587cb0850e04249b8b678bc3b2c485eb Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Thu, 3 Oct 2024 22:21:36 +0200 Subject: [PATCH 03/67] Update music.py --- scr/music.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/scr/music.py b/scr/music.py index ce181b0..81b29d9 100644 --- a/scr/music.py +++ b/scr/music.py @@ -381,8 +381,8 @@ def live_synth_loop(self): output=True) current_frame = 0 notes = set() - for _ in utils.timed_loop(True): - # while True: + # for _ in utils.timed_loop(True): + while True: available_buffer = stream.get_write_available() # print(available_buffer, end=" |\t") if available_buffer == 0: @@ -404,17 +404,18 @@ def live_synth_loop(self): notes.discard(midi_event[1]) if len(notes) > 0: - y = np.zeros((len(notes), available_buffer)) + y = np.zeros((len(notes), available_buffer), dtype=np.float32) for i, note in enumerate(notes): with torch.no_grad(): x = utils.wrap_concat( self.t_buffer[note], current_frame, current_frame + available_buffer) - y[i, :] = self.fourier_nn.current_model(x.unsqueeze(1))\ - .cpu().numpy().astype(np.float32) + y[i, :] = self.fourier_nn.current_model( + x.unsqueeze(1)).cpu().numpy().astype(np.float32) audio_data = sum_signals(y) - audio_data = audio_data - np.mean(audio_data) + print(np.max(np.abs(audio_data))) + audio_data = np.clip(audio_data, -1, 1) audio_data *= 0.7 stream.write(audio_data, available_buffer, From 60c2f443842bbc650f04475720134822bfe2b7ab Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Thu, 3 Oct 2024 22:23:59 +0200 Subject: [PATCH 04/67] Update _version.py --- _version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_version.py b/_version.py index 5918abd..4554c22 100644 --- a/_version.py +++ b/_version.py @@ -1 +1 @@ -version = '3.0.0' +version = '3.0.1' From 2d8e62a5b91bee1c1b119916e8bcbd6f9af19f11 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Thu, 3 Oct 2024 22:32:47 +0200 Subject: [PATCH 05/67] Delete main.yml --- .github/workflows/main.yml | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 51cf72b..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Build with Nuitka - -on: - push: - branches: - - main - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - - name: Set up Python - uses: actions/setup-python@v2 - with: - python-version: '3.x' - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install nuitka - pip install -r requirements.txt - - - name: Compile Python script with Nuitka - run: | - python -m nuitka --follow-imports main.py From 7590e3b922452f1ecc8cf6ef4e0f7bdf3fb1a37c Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Thu, 3 Oct 2024 22:46:43 +0200 Subject: [PATCH 06/67] Create dayly_build.yml --- .github/workflows/dayly_build.yml | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/dayly_build.yml diff --git a/.github/workflows/dayly_build.yml b/.github/workflows/dayly_build.yml new file mode 100644 index 0000000..b96aa13 --- /dev/null +++ b/.github/workflows/dayly_build.yml @@ -0,0 +1,35 @@ +name: Python Package using Conda + +on: + push: + branches: + - dev + +jobs: + build-linux: + runs-on: ubuntu-latest + strategy: + max-parallel: 5 + + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.10 + uses: actions/setup-python@v3 + with: + python-version: "3.10" + - name: Add conda to system path + run: | + # $CONDA is an environment variable pointing to the root of the miniconda directory + echo $CONDA/bin >> $GITHUB_PATH + - name: Install dependencies + run: | + conda env update --file environment.yml --name base + - name: Build wheel + run: | + conda install wheel + python setup.py bdist_wheel + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: python-package-distributions + path: dist/ From 027c3fd0ea616738885a3aa73bcf65a844550c87 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Thu, 3 Oct 2024 22:53:45 +0200 Subject: [PATCH 07/67] Update dayly_build.yml --- .github/workflows/dayly_build.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dayly_build.yml b/.github/workflows/dayly_build.yml index b96aa13..4486596 100644 --- a/.github/workflows/dayly_build.yml +++ b/.github/workflows/dayly_build.yml @@ -1,4 +1,4 @@ -name: Python Package using Conda +name: Dayly Build on: push: @@ -13,14 +13,18 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Python 3.10 + - name: Set up Python 3.11 uses: actions/setup-python@v3 with: - python-version: "3.10" + python-version: "3.11" - name: Add conda to system path run: | # $CONDA is an environment variable pointing to the root of the miniconda directory echo $CONDA/bin >> $GITHUB_PATH + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y portaudio19-dev - name: Install dependencies run: | conda env update --file environment.yml --name base From 7b5c3bd6747e7c4d62857c76123f6d127fc2e2ef Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Fri, 4 Oct 2024 13:10:42 +0200 Subject: [PATCH 08/67] Update music.py added class for ADSR envelope --- scr/music.py | 72 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/scr/music.py b/scr/music.py index 81b29d9..0b4a593 100644 --- a/scr/music.py +++ b/scr/music.py @@ -313,6 +313,45 @@ def apply_distortion(audio, gain=2.0, threshold=0.5): return distorted_audio +class ADSR(): + def __init__(self, attack_time, decay_time, sustain_level, release_time, sample_rate): + self.attack_samples = int(attack_time * sample_rate) + self.decay_samples = int(decay_time * sample_rate) + self.sustain_level = sustain_level + self.release_samples = int(release_time * sample_rate) + self.sample_rate = sample_rate + + def get_ads_envelope(self, frame): + envelope = np.zeros(frame) + # Attack phase + if frame < self.attack_samples: + envelope[:frame] = np.linspace(0, 1, frame) + else: + envelope[:self.attack_samples] = np.linspace( + 0, 1, self.attack_samples) + # Decay phase + if frame < self.attack_samples + self.decay_samples: + envelope[self.attack_samples:frame] = np.linspace( + 1, self.sustain_level, frame - self.attack_samples) + else: + envelope[self.attack_samples:self.attack_samples + + self.decay_samples] = np.linspace(1, self.sustain_level, self.decay_samples) + # Sustain phase + envelope[self.attack_samples + + self.decay_samples:frame] = self.sustain_level + return envelope + + def get_r_envelope(self, frame): + envelope = np.zeros(frame) + # Release phase + if frame < self.release_samples: + envelope[:frame] = np.linspace(self.sustain_level, 0, frame) + else: + envelope[:self.release_samples] = np.linspace( + self.sustain_level, 0, self.release_samples) + return envelope + + class Synth2(): def __init__(self, fourier_nn, stdout: Queue = None): self.stdout = stdout @@ -380,8 +419,9 @@ def live_synth_loop(self): rate=self.fs, output=True) current_frame = 0 + cycle_frame = 0 + notes = set() - # for _ in utils.timed_loop(True): while True: available_buffer = stream.get_write_available() # print(available_buffer, end=" |\t") @@ -390,37 +430,39 @@ def live_synth_loop(self): if midi_input.poll(): midi_event, timestamp = midi_input.read( 1)[0] # Read and process one event + # print(midi_event) if midi_event[0] == 144: # Note on print("Note on", midi_event[1], midi.midi_to_frequency(midi_event[1])) - notes.add(midi_event[1]) + notes.add((midi_event[1], midi_event[2])) elif midi_event[0] == 128: # Note off print("Note off", midi_event[1], midi.midi_to_frequency(midi_event[1])) - notes.discard(midi_event[1]) + notes.discard((midi_event[1], midi_event[2])) if len(notes) > 0: y = np.zeros((len(notes), available_buffer), dtype=np.float32) - for i, note in enumerate(notes): + for i, (note, amplitude) in enumerate(notes): with torch.no_grad(): x = utils.wrap_concat( - self.t_buffer[note], current_frame, current_frame + available_buffer) + self.t_buffer[note], cycle_frame, cycle_frame + available_buffer) - y[i, :] = self.fourier_nn.current_model( - x.unsqueeze(1)).cpu().numpy().astype(np.float32) + y[i, :] = (self.fourier_nn.current_model( + x.unsqueeze(1)).cpu().numpy().astype(np.float32) * (amplitude/127)) audio_data = sum_signals(y) - print(np.max(np.abs(audio_data))) + # print(np.max(np.abs(audio_data))) audio_data = np.clip(audio_data, -1, 1) audio_data *= 0.7 stream.write(audio_data, available_buffer, exception_on_underflow=True) - current_frame = (current_frame + available_buffer) % self.fs + current_frame = (current_frame + available_buffer) + cycle_frame = (cycle_frame + available_buffer) % self.fs def run_live_synth(self): if not self.live_synth: @@ -442,12 +484,12 @@ def __getstate__(self) -> object: self.live_synth = live_synth return Synth_dict - # def __setstate__(self, state): - # # Load the model from a file after deserialization - # self.__dict__.update(state) - # if self.stdout is not None: - # if current_process().name != 'MainProcess': - # sys.stdout = utils.QueueSTD_OUT(queue=self.stdout) + def __setstate__(self, state): + # Load the model from a file after deserialization + self.__dict__.update(state) + if self.stdout is not None: + if current_process().name != 'MainProcess': + sys.stdout = utils.QueueSTD_OUT(queue=self.stdout) def normalize(signal): From ab4493cda840c324733f8131fe5ec48cebaf7cf7 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Fri, 4 Oct 2024 14:02:33 +0200 Subject: [PATCH 09/67] =?UTF-8?q?adsr=20and=20f=C3=BCr=20eliese?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit improved code for adsr envelope, not yet used added code to play parts from für eliese --- audio_stuff/midi/fuer_elise.py | 37 ++++++++++++++++ scr/music.py | 77 +++++++++++++++++++++++----------- 2 files changed, 90 insertions(+), 24 deletions(-) create mode 100644 audio_stuff/midi/fuer_elise.py diff --git a/audio_stuff/midi/fuer_elise.py b/audio_stuff/midi/fuer_elise.py new file mode 100644 index 0000000..ad788a3 --- /dev/null +++ b/audio_stuff/midi/fuer_elise.py @@ -0,0 +1,37 @@ +import mido +import time + +# Define the MIDI output port +output = mido.open_output('LoopBe Internal MIDI 1') + +# Define the notes for "Für Elise" +fur_elise = [ + ('E5', 0.5), ('D#5', 0.5), ('E5', 0.5), ('D#5', 0.5), ('E5', + 0.5), ('B4', 0.5), ('D5', 0.5), ('C5', 0.5), ('A4', 1.5), + ('C4', 0.5), ('E4', 0.5), ('A4', 0.5), ('B4', 1.5), ('E4', + 0.5), ('G#4', 0.5), ('B4', 0.5), ('C5', 1.5), + ('E4', 0.5), ('C4', 0.5), ('E4', 0.5), ('A4', 0.5), ('B4', + 1.5), ('E4', 0.5), ('G#4', 0.5), ('B4', 0.5), ('C5', 1.5) +] + +# Define a function to convert note names to MIDI note numbers + + +def note_to_midi(note): + note_map = {'C': 0, 'C#': 1, 'D': 2, 'D#': 3, 'E': 4, 'F': 5, + 'F#': 6, 'G': 7, 'G#': 8, 'A': 9, 'A#': 10, 'B': 11} + octave = int(note[-1]) + key = note[:-1] + return 12 * (octave + 1) + note_map[key] + + +# Stream the notes over MIDI in a loop +while True: + for note, duration in fur_elise: + midi_note = note_to_midi(note) + output.send(mido.Message('note_on', note=midi_note, velocity=64)) + time.sleep(duration/2) + output.send(mido.Message('note_off', note=midi_note, velocity=64)) + +# Close the MIDI output port (this line will never be reached due to the infinite loop) +# output.close() diff --git a/scr/music.py b/scr/music.py index 0b4a593..f5763f9 100644 --- a/scr/music.py +++ b/scr/music.py @@ -321,37 +321,66 @@ def __init__(self, attack_time, decay_time, sustain_level, release_time, sample_ self.release_samples = int(release_time * sample_rate) self.sample_rate = sample_rate - def get_ads_envelope(self, frame): - envelope = np.zeros(frame) + def get_ads_envelope(self, start_frame, num_frames): + envelope = np.zeros(num_frames) + end_frame = start_frame + num_frames + # Attack phase - if frame < self.attack_samples: - envelope[:frame] = np.linspace(0, 1, frame) - else: - envelope[:self.attack_samples] = np.linspace( - 0, 1, self.attack_samples) - # Decay phase - if frame < self.attack_samples + self.decay_samples: - envelope[self.attack_samples:frame] = np.linspace( - 1, self.sustain_level, frame - self.attack_samples) - else: - envelope[self.attack_samples:self.attack_samples + - self.decay_samples] = np.linspace(1, self.sustain_level, self.decay_samples) - # Sustain phase - envelope[self.attack_samples + - self.decay_samples:frame] = self.sustain_level + if start_frame < self.attack_samples: + attack_end = min(end_frame, self.attack_samples) + envelope[:attack_end - + start_frame] = np.linspace(0, 1, attack_end - start_frame) + start_frame = attack_end + + # Decay phase + if start_frame < self.attack_samples + self.decay_samples: + decay_end = min(end_frame, self.attack_samples + + self.decay_samples) + envelope[start_frame - self.attack_samples:decay_end - + self.attack_samples] = np.linspace(1, self.sustain_level, decay_end - start_frame)[start_frame - self.attack_samples:decay_end - + self.attack_samples] + start_frame = decay_end + + # Sustain phase + if start_frame >= self.attack_samples + self.decay_samples: + sustain_start = max( + start_frame, self.attack_samples + self.decay_samples) + envelope[sustain_start - start_frame:] = self.sustain_level + return envelope - def get_r_envelope(self, frame): - envelope = np.zeros(frame) + def get_r_envelope(self, start_frame, num_frames): + envelope = np.zeros(num_frames) + end_frame = start_frame + num_frames + # Release phase - if frame < self.release_samples: - envelope[:frame] = np.linspace(self.sustain_level, 0, frame) - else: - envelope[:self.release_samples] = np.linspace( - self.sustain_level, 0, self.release_samples) + if start_frame < self.release_samples: + release_end = min(end_frame, self.release_samples) + envelope[:release_end - start_frame] = np.linspace( + self.sustain_level, 0, release_end - start_frame) + return envelope +class Note: + def __init__(self, amplitude): + self.amplitude = amplitude + self.on = True + self.adsr_state = 'attack' + self.adsr_position = 0 + + def __str__(self): + return f"Note({self.amplitude}, {self.on}, {self.adsr_position}, {self.adsr_state})" + + +def get_on_notes(notes): + return {note: note_data for note, note_data in notes.items() if note_data.on} + + +def get_off_notes(notes): + return {note: note_data for note, note_data in notes.items() if not note_data.on} + + class Synth2(): def __init__(self, fourier_nn, stdout: Queue = None): self.stdout = stdout From 4e0abb978fe0c5e05a210bb4a312ec47ba35509b Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Fri, 4 Oct 2024 14:08:34 +0200 Subject: [PATCH 10/67] Update _version.py --- _version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_version.py b/_version.py index 4554c22..e8b7360 100644 --- a/_version.py +++ b/_version.py @@ -1 +1 @@ -version = '3.0.1' +version = '3.0.2' From 80c6bee28c961f77f97fb9d23419311431a7961a Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Fri, 4 Oct 2024 20:56:03 +0200 Subject: [PATCH 11/67] adapt for real piano --- audio_stuff/midi/mido_test_in.py | 2 +- audio_stuff/midi/pygame_find_channel.py | 26 +++++++++++++++++++++++++ scr/music.py | 18 +++++++++++++++-- 3 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 audio_stuff/midi/pygame_find_channel.py diff --git a/audio_stuff/midi/mido_test_in.py b/audio_stuff/midi/mido_test_in.py index 48a2861..e7080cc 100644 --- a/audio_stuff/midi/mido_test_in.py +++ b/audio_stuff/midi/mido_test_in.py @@ -3,7 +3,7 @@ def listen_midi(): # Open a virtual port for input - midiin = mido.open_input('TEST', virtual=True) + midiin = mido.open_input('Digital Piano 2') while True: # Wait for a message and print it diff --git a/audio_stuff/midi/pygame_find_channel.py b/audio_stuff/midi/pygame_find_channel.py new file mode 100644 index 0000000..2e8d405 --- /dev/null +++ b/audio_stuff/midi/pygame_find_channel.py @@ -0,0 +1,26 @@ +import pygame.midi + +pygame.midi.init() + + +for i in range(pygame.midi.get_count()): + info = pygame.midi.get_device_info(i) + print( + f"Device ID: {i}, Name: {info[1].decode()}, Input: {info[2]}, Output: {info[3]}") + + +desired_name = "Your MIDI Device Name" +device_id = None + +for i in range(pygame.midi.get_count()): + info = pygame.midi.get_device_info(i) + print(info) + if info[1].decode() == desired_name: + device_id = i + break + +if device_id is not None: + midi_output = pygame.midi.Output(device_id) + print(f"Selected device ID: {device_id}") +else: + print("Device not found") diff --git a/scr/music.py b/scr/music.py index f5763f9..d2f51c3 100644 --- a/scr/music.py +++ b/scr/music.py @@ -381,6 +381,18 @@ def get_off_notes(notes): return {note: note_data for note, note_data in notes.items() if not note_data.on} +def piano_id(): + desired_name = "Digital Piano" + device_id = None + + for i in range(pygame.midi.get_count()): + info = pygame.midi.get_device_info(i) + if info[1].decode() == desired_name: + device_id = i + break + return device_id + + class Synth2(): def __init__(self, fourier_nn, stdout: Queue = None): self.stdout = stdout @@ -436,11 +448,12 @@ def live_synth_loop(self): self.play_init_sound() midi.init() - input_id = midi.get_default_input_id() + input_id = piano_id() if input_id == -1: print("No MIDI input device found.") return midi_input = midi.Input(input_id) + p = pyaudio.PyAudio() CHUNK = 2048 # Increased chunk size stream = p.open(format=pyaudio.paFloat32, @@ -451,7 +464,8 @@ def live_synth_loop(self): cycle_frame = 0 notes = set() - while True: + # while True: + for _ in utils.timed_loop(True): available_buffer = stream.get_write_available() # print(available_buffer, end=" |\t") if available_buffer == 0: From 123bcda6660218957bf10152724cfccfb68c872c Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 5 Oct 2024 13:50:49 +0200 Subject: [PATCH 12/67] changed midi library --- audio_stuff/midi/fuer_elise.py | 18 +++--- audio_stuff/midi/midi_piano.py | 3 + audio_stuff/midi/mido_test_in.py | 14 +++-- scr/music.py | 103 ++++++++++++++++--------------- 4 files changed, 75 insertions(+), 63 deletions(-) diff --git a/audio_stuff/midi/fuer_elise.py b/audio_stuff/midi/fuer_elise.py index ad788a3..6ec1ceb 100644 --- a/audio_stuff/midi/fuer_elise.py +++ b/audio_stuff/midi/fuer_elise.py @@ -25,13 +25,15 @@ def note_to_midi(note): return 12 * (octave + 1) + note_map[key] -# Stream the notes over MIDI in a loop -while True: - for note, duration in fur_elise: - midi_note = note_to_midi(note) - output.send(mido.Message('note_on', note=midi_note, velocity=64)) - time.sleep(duration/2) - output.send(mido.Message('note_off', note=midi_note, velocity=64)) - +try: + # Stream the notes over MIDI in a loop + while True: + for note, duration in fur_elise: + midi_note = note_to_midi(note) + output.send(mido.Message('note_on', note=midi_note, velocity=64)) + time.sleep(duration/2) + output.send(mido.Message('note_off', note=midi_note, velocity=64)) +except: + output.panic() # Close the MIDI output port (this line will never be reached due to the infinite loop) # output.close() diff --git a/audio_stuff/midi/midi_piano.py b/audio_stuff/midi/midi_piano.py index 9652811..27bbae4 100644 --- a/audio_stuff/midi/midi_piano.py +++ b/audio_stuff/midi/midi_piano.py @@ -16,6 +16,7 @@ def changePort(event): global port + port.panic() port.close() port = mido.open_output(selected_port.get()) @@ -136,3 +137,5 @@ def release(event, i=i, a=a): return send_midi_note( # Run the Tkinter event loop window.mainloop() + +port.panic() diff --git a/audio_stuff/midi/mido_test_in.py b/audio_stuff/midi/mido_test_in.py index e7080cc..50ac97b 100644 --- a/audio_stuff/midi/mido_test_in.py +++ b/audio_stuff/midi/mido_test_in.py @@ -3,12 +3,14 @@ def listen_midi(): # Open a virtual port for input - midiin = mido.open_input('Digital Piano 2') - - while True: - # Wait for a message and print it - msg = midiin.receive() - print(msg) + default_name = mido.get_input_names()[0] + with mido.open_input(default_name) as midi_in: # 'Digital Piano 2') + i = 0 + while True: + for msg in midi_in.iter_pending(): + print() + # print(i) + # i += 1 if __name__ == "__main__": diff --git a/scr/music.py b/scr/music.py index d2f51c3..5c3ab0a 100644 --- a/scr/music.py +++ b/scr/music.py @@ -2,6 +2,7 @@ import threading import time from typing import Callable +import mido import pygame import scipy import torch @@ -394,7 +395,7 @@ def piano_id(): class Synth2(): - def __init__(self, fourier_nn, stdout: Queue = None): + def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.stdout = stdout self.live_synth: Process = None self.notes_ready = False @@ -409,6 +410,10 @@ def __init__(self, fourier_nn, stdout: Queue = None): ]) self.t_buffer = torch.tensor(t, dtype=torch.float32) print(self.t_buffer.shape) + self.port_name = port_name + + def set_port_name(self, port_name): + self.port_name = port_name def play_init_sound(self): f1 = 440 # Frequency of the "du" sound (in Hz) @@ -447,12 +452,8 @@ def live_synth_loop(self): print("Live Synth is running") self.play_init_sound() - midi.init() - input_id = piano_id() - if input_id == -1: - print("No MIDI input device found.") - return - midi_input = midi.Input(input_id) + if not self.port_name: + self.port_name = mido.get_input_names()[0] p = pyaudio.PyAudio() CHUNK = 2048 # Increased chunk size @@ -463,49 +464,53 @@ def live_synth_loop(self): current_frame = 0 cycle_frame = 0 - notes = set() - # while True: - for _ in utils.timed_loop(True): - available_buffer = stream.get_write_available() - # print(available_buffer, end=" |\t") - if available_buffer == 0: - continue - if midi_input.poll(): - midi_event, timestamp = midi_input.read( - 1)[0] # Read and process one event + notes = {} + with mido.open_input(self.port_name) as midi_input: + while True: + # for _ in utils.timed_loop(True): + available_buffer = stream.get_write_available() + # print(available_buffer, end=" |\t") + if available_buffer == 0: + continue + midi_event = midi_input.poll() # print(midi_event) - if midi_event[0] == 144: # Note on - print("Note on", - midi_event[1], - midi.midi_to_frequency(midi_event[1])) - - notes.add((midi_event[1], midi_event[2])) - elif midi_event[0] == 128: # Note off - print("Note off", - midi_event[1], - midi.midi_to_frequency(midi_event[1])) - - notes.discard((midi_event[1], midi_event[2])) - - if len(notes) > 0: - y = np.zeros((len(notes), available_buffer), dtype=np.float32) - for i, (note, amplitude) in enumerate(notes): - with torch.no_grad(): - x = utils.wrap_concat( - self.t_buffer[note], cycle_frame, cycle_frame + available_buffer) - - y[i, :] = (self.fourier_nn.current_model( - x.unsqueeze(1)).cpu().numpy().astype(np.float32) * (amplitude/127)) - - audio_data = sum_signals(y) - # print(np.max(np.abs(audio_data))) - audio_data = np.clip(audio_data, -1, 1) - audio_data *= 0.7 - stream.write(audio_data, - available_buffer, - exception_on_underflow=True) - current_frame = (current_frame + available_buffer) - cycle_frame = (cycle_frame + available_buffer) % self.fs + if midi_event: + midi_event.type + midi_event.note + midi_event.velocity + if midi_event.type == 'note_on': # Note on + print("Note on", + midi_event.note, + midi.midi_to_frequency(midi_event.note)) + + notes[midi_event.note] = midi_event.velocity + elif midi_event.type == 'note_off': # Note off + print("Note off", + midi_event.note, + midi.midi_to_frequency(midi_event.note)) + + del notes[midi_event.note] + + if len(notes) > 0: + y = np.zeros((len(notes), available_buffer), + dtype=np.float32) + for i, (note, amplitude) in enumerate(notes.items()): + with torch.no_grad(): + x = utils.wrap_concat( + self.t_buffer[note], cycle_frame, cycle_frame + available_buffer) + + y[i, :] = self .fourier_nn.current_model( + x.unsqueeze(1)).cpu().numpy().astype(np.float32) # * (amplitude/127) + + audio_data = sum_signals(y) + # print(np.max(np.abs(audio_data))) + audio_data = np.clip(audio_data, -1, 1) + audio_data *= 0.7 + stream.write(audio_data, + available_buffer, + exception_on_underflow=True) + current_frame = (current_frame + available_buffer) + cycle_frame = (cycle_frame + available_buffer) % self.fs def run_live_synth(self): if not self.live_synth: From d1d8919ee7f86ff07ae528d89b3097a5641b3c0f Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 5 Oct 2024 14:24:06 +0200 Subject: [PATCH 13/67] added GUI ellement for selecting midi port --- _version.py | 2 +- main.py | 18 ++++++++++++++---- scr/synth_gui.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 scr/synth_gui.py diff --git a/_version.py b/_version.py index e8b7360..dce7028 100644 --- a/_version.py +++ b/_version.py @@ -1 +1 @@ -version = '3.0.2' +version = '3.0.3' diff --git a/main.py b/main.py index 78dac5c..5f0df95 100644 --- a/main.py +++ b/main.py @@ -10,6 +10,7 @@ from scr.music import Synth2, musik_from_file from scr.simple_input_dialog import askStringAndSelectionDialog from scr.std_redirect import RedirectedOutputFrame +from scr.synth_gui import SynthGUI from scr.utils import DIE, tk_after_errorless from scr.predefined_functions import predefined_functions_dict from scr.graph_canvas_v2 import GraphCanvas @@ -149,9 +150,16 @@ def create_controll_column(self): 'LOSS_FUNCTION': 'HuberLoss', } - self.gui = NeuralNetworkGUI( + self.neural_network_gui = NeuralNetworkGUI( self.frame, defaults=defaults, callback=self.update_frourier_params) - self.gui.grid(row=0, sticky='NSEW') + self.neural_network_gui.grid(row=0, sticky='NSEW') + + separator1 = ttk.Separator(self.frame, orient='horizontal') + separator1.grid(row=1, sticky='WE') + + self.synth_gui=SynthGUI(self.frame) + self.synth_gui.grid(row=2, sticky='NSEW') + self.frame.grid(row=1, column=3, rowspan=2, sticky='NSEW') def create_status_bar(self): @@ -308,7 +316,7 @@ def train_update(self): # f"Layer: {name} | Size: {param.size()} | Values:\n{param[:2]}\n------------------------------") self.graph.plot_function( self.fourier_nn.predict, x_range=(0, 2*np.pi, 44100//2)) - self.synth = Synth2(self.fourier_nn, self.std_queue) + self.synth = Synth2(self.fourier_nn, self.std_queue, self.synth_gui.get_port_name()) DIE(self.trainings_process) self.trainings_process = None self.training_started = False @@ -355,6 +363,8 @@ def start_training(self): def play_music(self): print("play_music") if self.synth: + port_name=self.synth_gui.get_port_name() + self.synth.set_port_name(port_name) self.synth.run_live_synth() else: print("or not") @@ -419,7 +429,7 @@ def load_neural_net(self): self.graph.draw_extern_graph_from_func( self.fourier_nn.predict, name) print(name) - self.synth = Synth2(self.fourier_nn, self.std_queue) + self.synth = Synth2(self.fourier_nn, self.std_queue,self.synth_gui.get_port_name()) # self.fourier_nn.update_data( # data=self.graph.get_graph(name=name)[0]) diff --git a/scr/synth_gui.py b/scr/synth_gui.py new file mode 100644 index 0000000..8316808 --- /dev/null +++ b/scr/synth_gui.py @@ -0,0 +1,42 @@ +import mido +import tkinter as tk +from tkinter import ttk + + +class SynthGUI(ttk.Frame): + def __init__(self, parent=None, **kwargs): + ttk.Frame.__init__(self, parent, **kwargs) + self.columnconfigure(0, weight=1) + self.columnconfigure(1, weight=1) + + + param="MIDI PORT" + label = ttk.Label(self, text=param) + label.grid(row=0, column=0, sticky='NSW') + options=mido.get_input_names() + self.midi_port_var=tk.StringVar(self, options[0]) + self.midi_port_option_menu = ttk.OptionMenu( + self, self.midi_port_var, options[0], *(options)) + self.midi_port_option_menu.grid(row=0, column=1, sticky='NSE') + # self.midi_port_var.trace_add('write', lambda *args, key=param, + # var=self.midi_port_var: self.on_change(key, var.get(), var)) + + def get_port_name(self): + return self.midi_port_var.get() + + + # def on_change(self, name, value, var): + # if hasattr(self, 'on_change_callback'): + # if self.on_change_callback: + # worked = self.on_change_callback(name, value) + # # print(worked) + # if worked: + # self.previous_values[name] = value + # else: + # var.set(self.previous_values[name]) + + # def set_on_change(self, func): + # self.on_change_callback = func + # self.previous_values = {param: var.get() + # for param, var in self.params.items()} + From b1a37bee4a56add5ad48098a21f8c75bc067d4ab Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 5 Oct 2024 19:11:20 +0200 Subject: [PATCH 14/67] Allow GPU --- _version.py | 2 +- scr/fourier_neural_network.py | 48 +++++++++++------------------------ scr/utils.py | 4 +-- 3 files changed, 18 insertions(+), 36 deletions(-) diff --git a/_version.py b/_version.py index dce7028..f608624 100644 --- a/_version.py +++ b/_version.py @@ -1 +1 @@ -version = '3.0.3' +version = '3.0.4' diff --git a/scr/fourier_neural_network.py b/scr/fourier_neural_network.py index 4291639..1ef4c50 100644 --- a/scr/fourier_neural_network.py +++ b/scr/fourier_neural_network.py @@ -1,6 +1,7 @@ import os import sys import time +import traceback import numpy as np import torch import torch.nn as nn @@ -11,7 +12,6 @@ from scr import utils from scr.utils import QueueSTD_OUT, linear_interpolation, midi_to_freq -DISABLE_GPU = False try: import torch_directml @@ -19,7 +19,7 @@ except ImportError: DIRECTML = False -DISABLE_GPU = True +DISABLE_GPU = False class FourierLayer(nn.Module): @@ -44,36 +44,13 @@ def __init__(self, degree): self.c = nn.Parameter(torch.zeros(1)) def forward(self, x): + self.frequencies = self.frequencies.to(x.device) y1 = self.a1 * torch.sin(self.frequencies * x) y2 = self.a2 * torch.cos(self.frequencies * x) z = torch.sum(y1, dim=-1)+torch.sum(y2, dim=-1) + self.c return z -class FourierRegresionModelV2(nn.Module): - def __init__(self, degree): - super(FourierRegresionModelV2, self).__init__() - self.frequencies_sin = nn.Parameter( - torch.arange(1, degree+1, 1, dtype=torch.float32), - requires_grad=False - ) - self.frequencies_cos = nn.Parameter( - torch.arange(1, degree+1, 1, dtype=torch.float32), - requires_grad=False - ) - self.a1 = nn.Parameter(torch.ones((degree))) - self.a2 = nn.Parameter(torch.ones((degree))) - self.c1 = nn.Parameter(torch.zeros((degree))) - self.c2 = nn.Parameter(torch.zeros((degree))) - self.d = nn.Parameter(torch.zeros(1)) - - def forward(self, x): - y1 = self.a1 * torch.sin(self.frequencies_sin * x) # +self.c1) - y2 = self.a2 * torch.cos(self.frequencies_cos * x) # +self.c2) - z = torch.sum(y1, dim=-1)+torch.sum(y2, dim=-1) # +self.d - return z # , y1, y2 - - class FourierNN(): SAMPLES = 1000 EPOCHS = 1000 @@ -183,6 +160,7 @@ def train(self, test_data, queue=None, quiet=False, stdout_queue=None): model = self.current_model.to(self.device) for param in self.current_model.parameters(): param.requires_grad = True + model.to(self.device) model.train() x_train_transformed = x_train_transformed.to(self.device) @@ -198,7 +176,7 @@ def train(self, test_data, queue=None, quiet=False, stdout_queue=None): train_dataset = TensorDataset(x_train_transformed, y_train) train_loader = DataLoader( - train_dataset, batch_size=int(self.SAMPLES / 2), shuffle=True) + train_dataset, batch_size=int(self.SAMPLES / 4)) # , shuffle=True) # prepared_test_data = torch.tensor( # data=FourierNN.fourier_basis_numba( @@ -207,11 +185,11 @@ def train(self, test_data, queue=None, quiet=False, stdout_queue=None): # dtype=torch.float32).to(self.device) prepared_test_data = torch.tensor( test_data.flatten(), - dtype=torch.float32, device=self.device).unsqueeze(1) + dtype=torch.float32, device=self.device).unsqueeze(1).to(self.device) - min_delta = 0.0001 # 4.337714676382401e-14 + min_delta = 0.001 # 4.337714676382401e-14 epoch_without_change = 0 - max_loss = torch.inf + min_loss = torch.inf for epoch in range(self.EPOCHS): # callback.on_epoch_begin(epoch) @@ -230,6 +208,7 @@ def train(self, test_data, queue=None, quiet=False, stdout_queue=None): optimizer.step() epoch_loss += loss.item() except Exception as e: + # traceback.print_exc() print(f"Exception while training: {e}") exit(1) epoch_loss /= len(train_loader) @@ -251,8 +230,8 @@ def train(self, test_data, queue=None, quiet=False, stdout_queue=None): f"val_loss: {val_loss:3.5f}. " f"Time Taken: {time_taken / 1_000_000_000}s") - if val_loss < max_loss-min_delta: - max_loss = epoch_loss + if abs(val_loss) < min_loss-min_delta: + min_loss = abs(val_loss) epoch_without_change = 0 else: epoch_without_change += 1 @@ -272,8 +251,11 @@ def predict(self, data): if x.shape[0] > 1: x = x.unsqueeze(1) print(x.shape) + model = self.current_model + model.to(self.device) with torch.no_grad(): - y = self.current_model(x) + y = model(x) + model.to('cpu') return y.cpu().numpy() diff --git a/scr/utils.py b/scr/utils.py index 0262394..42402f9 100644 --- a/scr/utils.py +++ b/scr/utils.py @@ -5,7 +5,7 @@ import sys import threading import time -from typing import Any, Callable, TextIO +from typing import Any, Callable, TextIO, Tuple import numpy as np import psutil from scipy.fft import dst @@ -296,7 +296,7 @@ def get_loss_function(loss_name, **kwargs): raise ValueError(f"Loss function '{loss_name}' not found in torch.nn") -def linear_interpolation(data, target_length, device='cpu'): +def linear_interpolation(data, target_length, device='cpu') -> Tuple[torch.Tensor, torch.Tensor]: # Convert data to a tensor and move to the specified device data = np.array(data) data_tensor = torch.tensor(data, dtype=torch.float32).to(device) From 10f241c78812532cff158e15d1d734f81b7c9ebb Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 5 Oct 2024 19:30:55 +0200 Subject: [PATCH 15/67] synth now runs on gpu --- main.py | 11 +++++++---- scr/fourier_neural_network.py | 9 ++++++--- scr/music.py | 33 ++++++++++++++++++++++++++++----- 3 files changed, 41 insertions(+), 12 deletions(-) diff --git a/main.py b/main.py index 5f0df95..1f68b84 100644 --- a/main.py +++ b/main.py @@ -157,7 +157,7 @@ def create_controll_column(self): separator1 = ttk.Separator(self.frame, orient='horizontal') separator1.grid(row=1, sticky='WE') - self.synth_gui=SynthGUI(self.frame) + self.synth_gui = SynthGUI(self.frame) self.synth_gui.grid(row=2, sticky='NSEW') self.frame.grid(row=1, column=3, rowspan=2, sticky='NSEW') @@ -316,7 +316,8 @@ def train_update(self): # f"Layer: {name} | Size: {param.size()} | Values:\n{param[:2]}\n------------------------------") self.graph.plot_function( self.fourier_nn.predict, x_range=(0, 2*np.pi, 44100//2)) - self.synth = Synth2(self.fourier_nn, self.std_queue, self.synth_gui.get_port_name()) + self.synth = Synth2( + self.fourier_nn, self.std_queue, self.synth_gui.get_port_name()) DIE(self.trainings_process) self.trainings_process = None self.training_started = False @@ -363,7 +364,8 @@ def start_training(self): def play_music(self): print("play_music") if self.synth: - port_name=self.synth_gui.get_port_name() + port_name = self.synth_gui.get_port_name() + # print([param.device for param in self.fourier_nn.current_model.parameters()]) self.synth.set_port_name(port_name) self.synth.run_live_synth() else: @@ -429,7 +431,8 @@ def load_neural_net(self): self.graph.draw_extern_graph_from_func( self.fourier_nn.predict, name) print(name) - self.synth = Synth2(self.fourier_nn, self.std_queue,self.synth_gui.get_port_name()) + self.synth = Synth2(self.fourier_nn, self.std_queue, + self.synth_gui.get_port_name()) # self.fourier_nn.update_data( # data=self.graph.get_graph(name=name)[0]) diff --git a/scr/fourier_neural_network.py b/scr/fourier_neural_network.py index 1ef4c50..b07b575 100644 --- a/scr/fourier_neural_network.py +++ b/scr/fourier_neural_network.py @@ -44,12 +44,15 @@ def __init__(self, degree): self.c = nn.Parameter(torch.zeros(1)) def forward(self, x): - self.frequencies = self.frequencies.to(x.device) y1 = self.a1 * torch.sin(self.frequencies * x) y2 = self.a2 * torch.cos(self.frequencies * x) z = torch.sum(y1, dim=-1)+torch.sum(y2, dim=-1) + self.c return z + def to(self, device): + self.frequencies = self.frequencies.to(device) + return super(FourierRegresionModel, self).to(device) + class FourierNN(): SAMPLES = 1000 @@ -176,7 +179,7 @@ def train(self, test_data, queue=None, quiet=False, stdout_queue=None): train_dataset = TensorDataset(x_train_transformed, y_train) train_loader = DataLoader( - train_dataset, batch_size=int(self.SAMPLES / 4)) # , shuffle=True) + train_dataset, batch_size=int(self.SAMPLES / 2), shuffle=True) # prepared_test_data = torch.tensor( # data=FourierNN.fourier_basis_numba( @@ -255,8 +258,8 @@ def predict(self, data): model.to(self.device) with torch.no_grad(): y = model(x) - model.to('cpu') + self.current_model = self.current_model.to('cpu') return y.cpu().numpy() def save_model(self, filename='./tmp/model.pth'): diff --git a/scr/music.py b/scr/music.py index 5c3ab0a..0466877 100644 --- a/scr/music.py +++ b/scr/music.py @@ -450,7 +450,6 @@ def play_init_sound(self): def live_synth_loop(self): print("Live Synth is running") - self.play_init_sound() if not self.port_name: self.port_name = mido.get_input_names()[0] @@ -465,6 +464,8 @@ def live_synth_loop(self): cycle_frame = 0 notes = {} + model = self.fourier_nn.current_model.to(self.fourier_nn.device) + self.play_init_sound() with mido.open_input(self.port_name) as midi_input: while True: # for _ in utils.timed_loop(True): @@ -488,8 +489,8 @@ def live_synth_loop(self): print("Note off", midi_event.note, midi.midi_to_frequency(midi_event.note)) - - del notes[midi_event.note] + if midi_event.note in notes: + del notes[midi_event.note] if len(notes) > 0: y = np.zeros((len(notes), available_buffer), @@ -497,9 +498,9 @@ def live_synth_loop(self): for i, (note, amplitude) in enumerate(notes.items()): with torch.no_grad(): x = utils.wrap_concat( - self.t_buffer[note], cycle_frame, cycle_frame + available_buffer) + self.t_buffer[note], cycle_frame, cycle_frame + available_buffer).to(self.fourier_nn.device) - y[i, :] = self .fourier_nn.current_model( + y[i, :] = model( x.unsqueeze(1)).cpu().numpy().astype(np.float32) # * (amplitude/127) audio_data = sum_signals(y) @@ -585,3 +586,25 @@ def sum_signals(signals): summed_signal = normalize(summed_signal) return summed_signal + + +def normalize_torch(signal): + return signal / torch.max(torch.abs(signal)) + + +def sum_signals_torch(signals): + # Convert signals to a PyTorch tensor and move to GPU + # signals = torch.stack([signals + # for signal in signals]) + + # Normalize each signal + normalized_signals = torch.stack( + [sum_signals_torch(signal) for signal in signals]) + + # Sum the signals along dimension 0 + summed_signal = torch.sum(normalized_signals, dim=0) + + # Normalize the combined signal to prevent clipping + summed_signal = normalize(summed_signal) + + return summed_signal From 1f9c85d611132dd046aaf2b308e39c29dd774b7a Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 5 Oct 2024 20:41:54 +0200 Subject: [PATCH 16/67] documentation and contributing --- CONTRIBUTING.md | 86 +++++++++++++++++++++++++++++++++++++++++++++++++ docs/index.md | 3 ++ environment.yml | 5 +++ 3 files changed, 94 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..6926102 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,86 @@ +# Contributing to PythonAISynth + +First off, thanks for taking the time to contribute! 🎉 + +The following is a set of guidelines for contributing to PythonAISynth. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a pull request. + +## Code of Conduct + +This project and everyone participating in it is governed by the PythonAISynth Code of Conduct. By participating, you are expected to uphold this code. + +## How Can I Contribute? + +### Reporting Bugs + +This section guides you through submitting a bug report. Following these guidelines helps maintainers and the community understand your report, reproduce the behavior, and find related reports. + +- **Use a clear and descriptive title** for the issue to identify the problem. +- **Describe the exact steps** which reproduce the problem in as many details as possible. +- **Provide specific examples** to demonstrate the steps. +- **Describe the behavior you observed** after following the steps and point out what exactly is the problem with that behavior. +- **Explain which behavior you expected** instead and why. +- **Include screenshots and animated GIFs** which show you following the described steps and clearly demonstrate the problem. + +### Suggesting Enhancements + +This section guides you through submitting an enhancement suggestion, including completely new features and minor improvements to existing functionality. + +- **Use a clear and descriptive title** for the issue to identify the suggestion. +- **Provide a step-by-step description** of the suggested enhancement in as many details as possible. +- **Provide specific examples** to demonstrate the steps. +- **Describe the current behavior** and **explain which behavior you expected** instead and why. +- **Include screenshots and animated GIFs** which help you demonstrate the steps or point out the part of the project which the suggestion is related to. + +### Pull Requests + +The process described here has several goals: + +- Maintain the project's quality +- Fix problems that are important to users +- Engage the community in working toward the best possible product +- Enable a sustainable system for maintainers to review contributions + +Please follow these steps to have your contribution considered by the maintainers: + +1. **Fork** the repository and create your branch from `dev`. +2. **If you've added code** that should be tested, add tests. +3. **If you've changed APIs**, update the documentation. +4. **Ensure the test suite passes**. +5. **Make sure your code lints** using `ms-python.autopep8` from VSCode. +6. **Issue that pull request**! + +## Style Guides + +### Git Commit Messages + +- Use the present tense ("Add feature" not "Added feature") +- Use the imperative mood ("Move cursor to..." not "Moves cursor to...") +- Limit the first line to 72 characters or less +- Reference issues and pull requests liberally after the first line + +### Python Style Guide + +- Use PEP 8 style guide. +- Use `ms-python.autopep8` from VSCode for formatting. + +### Clean Code and Documentation + +- Write clean and understandable code. +- If the code is self-explanatory and makes sense to both you and the reviewer, no additional documentation is needed. +- If the code is complex or not immediately clear, provide documentation to explain it. + +## Additional Notes + +### Issue and Pull Request Labels + +This section lists the labels we use to help us track and manage issues and pull requests. + +- **bug**: Something isn't working +- **documentation**: Improvements or additions to documentation +- **duplicate**: This issue or pull request already exists +- **enhancement**: New feature or request +- **good first issue**: Good for newcomers +- **help wanted**: Extra attention is needed +- **invalid**: This doesn't seem right +- **question**: Further information is requested +- **wontfix**: This will not be worked on diff --git a/docs/index.md b/docs/index.md index 5c8e557..eb7d069 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,3 +2,6 @@ > Documentation is not complete (99.99% incomplete). > maybe you should write the Documentation. + +This is how The App Looks +![window](docs/img/main_window_v3.png) diff --git a/environment.yml b/environment.yml index 9cc0fbb..7083125 100644 --- a/environment.yml +++ b/environment.yml @@ -14,3 +14,8 @@ dependencies: - sounddevice - pyaudio - matplotlib + - mkdocs + - nuitka + - mkdocs-material + - mkdocs-git-revision-date-localized-plugin + - mkdocs-git-authors-plugin From e62575ce5ffe664401d6e204b9b5e3f16c6d247c Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 5 Oct 2024 21:07:13 +0200 Subject: [PATCH 17/67] Create CODE_OF_CONDUCT.md --- CODE_OF_CONDUCT.md | 128 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..5da5ac6 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +- Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or + advances of any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email + address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +pythonaisynth@gmx-ist-cool.de. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. From 2ec42feecb2d38e5b8f6e402dbdd5f9d03fde064 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 5 Oct 2024 21:09:31 +0200 Subject: [PATCH 18/67] Update index.md --- docs/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/index.md b/docs/index.md index eb7d069..62ed507 100644 --- a/docs/index.md +++ b/docs/index.md @@ -4,4 +4,5 @@ > maybe you should write the Documentation. This is how The App Looks + ![window](docs/img/main_window_v3.png) From aca7aa46f52def4d01dee19662a5ee1d0f765ef4 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 5 Oct 2024 21:09:48 +0200 Subject: [PATCH 19/67] Update index.md --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 62ed507..48804e6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -5,4 +5,4 @@ This is how The App Looks -![window](docs/img/main_window_v3.png) +![window](img/main_window_v3.png) From f3f81994d17576ae729171da63e7131c304b9d91 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 5 Oct 2024 21:10:19 +0200 Subject: [PATCH 20/67] Update index.md --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 48804e6..8533e8a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -5,4 +5,4 @@ This is how The App Looks -![window](img/main_window_v3.png) +![window](./img/main_window_v3.png) From 846bceb3f878ebdac8f1be2bf4cf3b99034e9d55 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 5 Oct 2024 21:11:22 +0200 Subject: [PATCH 21/67] Update idea.md --- docs/idea.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/idea.md b/docs/idea.md index 828a439..1b8d321 100644 --- a/docs/idea.md +++ b/docs/idea.md @@ -1,5 +1,7 @@ # My Idea about this programm +> This was my Plan at the Beginning + I want to create a Python-Application where you draw a function and a neural-net tries to aproximate it to make sound from it. ## GUI Desing From c622d15a535c19221bec358dfc5ef573ba96265a Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 12:27:55 +0200 Subject: [PATCH 22/67] Update CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6926102..b30f21e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -44,7 +44,7 @@ Please follow these steps to have your contribution considered by the maintainer 1. **Fork** the repository and create your branch from `dev`. 2. **If you've added code** that should be tested, add tests. -3. **If you've changed APIs**, update the documentation. +3. **If you’ve modified any modules or files**, update the documentation accordingly. 4. **Ensure the test suite passes**. 5. **Make sure your code lints** using `ms-python.autopep8` from VSCode. 6. **Issue that pull request**! From f02471690a28ace2e1d1a997d52ffcf7d6ae346e Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 12:32:09 +0200 Subject: [PATCH 23/67] Documentation added files for the different modules in this project --- docs/python_modules/fourier_neural_network.md | 0 docs/python_modules/fourier_neural_network_gui.md | 0 docs/python_modules/graph_canvas.md | 0 docs/python_modules/graph_canvas_v2.md | 0 docs/python_modules/music.md | 0 docs/python_modules/predefined_functions.md | 0 docs/python_modules/simple_input_dialog.md | 0 docs/python_modules/std_redirect.md | 0 docs/python_modules/synth_gui.md | 0 docs/python_modules/utils.md | 0 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/python_modules/fourier_neural_network.md create mode 100644 docs/python_modules/fourier_neural_network_gui.md create mode 100644 docs/python_modules/graph_canvas.md create mode 100644 docs/python_modules/graph_canvas_v2.md create mode 100644 docs/python_modules/music.md create mode 100644 docs/python_modules/predefined_functions.md create mode 100644 docs/python_modules/simple_input_dialog.md create mode 100644 docs/python_modules/std_redirect.md create mode 100644 docs/python_modules/synth_gui.md create mode 100644 docs/python_modules/utils.md diff --git a/docs/python_modules/fourier_neural_network.md b/docs/python_modules/fourier_neural_network.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/python_modules/fourier_neural_network_gui.md b/docs/python_modules/fourier_neural_network_gui.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/python_modules/graph_canvas.md b/docs/python_modules/graph_canvas.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/python_modules/graph_canvas_v2.md b/docs/python_modules/graph_canvas_v2.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/python_modules/music.md b/docs/python_modules/music.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/python_modules/predefined_functions.md b/docs/python_modules/predefined_functions.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/python_modules/simple_input_dialog.md b/docs/python_modules/simple_input_dialog.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/python_modules/std_redirect.md b/docs/python_modules/std_redirect.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/python_modules/synth_gui.md b/docs/python_modules/synth_gui.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/python_modules/utils.md b/docs/python_modules/utils.md new file mode 100644 index 0000000..e69de29 From 5f4f289ae244be54b3696308495c62af20569076 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 12:49:36 +0200 Subject: [PATCH 24/67] setup documentation to include new files --- docs/python_modules/main.md | 0 environment.yml | 3 ++- main.py | 22 +++++++++++++++++++++- mkdocs.yml | 19 ++++++++++++++++++- 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 docs/python_modules/main.md diff --git a/docs/python_modules/main.md b/docs/python_modules/main.md new file mode 100644 index 0000000..e69de29 diff --git a/environment.yml b/environment.yml index 7083125..c2a3197 100644 --- a/environment.yml +++ b/environment.yml @@ -14,8 +14,9 @@ dependencies: - sounddevice - pyaudio - matplotlib - - mkdocs - nuitka + - mkdocs - mkdocs-material - mkdocs-git-revision-date-localized-plugin - mkdocs-git-authors-plugin + - mkdocstrings diff --git a/main.py b/main.py index 1f68b84..80b9d2a 100644 --- a/main.py +++ b/main.py @@ -86,6 +86,27 @@ class MainGUI(tk.Tk): + """ + MainGUI is the main application window for the AI Synth project. + + This class initializes the Tkinter GUI, sets up the application layout, + and manages the interaction between the frontend and backend components. + It includes features such as dark mode, status bar updates, and various + controls for training AI models and synthesizing sound. + + Attributes: + manager (SyncManager): Manages shared resources and processes. + lock (Lock): Ensures thread-safe operations. + std_queue (Queue): Handles standard output redirection. + process_monitor (psutil.Process): Monitors the main process and its children. + trainings_process (multiprocessing.Process): Manages the AI model training process. + training_started (bool): Indicates if training has started. + block_training (bool): Prevents multiple training sessions. + queue (Queue): Handles inter-process communication. + fourier_nn (FourierNN): The neural network for Fourier transformations. + synth (Synth2): The synthesizer object. + """ + def __init__(self, *args, manager: SyncManager = None, **kwargs): super().__init__(*args, **kwargs) @@ -109,7 +130,6 @@ def __init__(self, *args, manager: SyncManager = None, **kwargs): self.columnconfigure(3, weight=1) self.trainings_process: Process = None - self.music_process: Process = None self.training_started = False self.block_training = False self.queue = Queue(-1) diff --git a/mkdocs.yml b/mkdocs.yml index 11f40b1..dacd804 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -3,6 +3,18 @@ repo_url: https://github.com/thetechnicker/PythonAISynth nav: - Home: index.md - Idea: idea.md + - Python Modules: + - Main: python_modules/main.md + - Graph Canvas V2: python_modules/graph_canvas_v2.md + - Fourier Neural Network: python_modules/fourier_neural_network.md + - Fourier Neural Network: python_modules\fourier_neural_network_gui.md + - Music: python_modules\music.md + - Predifined Functions: python_modules\predefined_functions.md + - Simple Input Dialog: python_modules\simple_input_dialog.md + - STD Redirect: python_modules\std_redirect.md + - Synth GUI: python_modules\synth_gui.md + - Utils: python_modules/utils.md + theme: icon: repo: fontawesome/brands/github @@ -43,7 +55,12 @@ plugins: enable_creation_date: true repository: thetechnicker/PythonAISynth - git-authors - + - search + - mkdocstrings: + handlers: + python: + options: + docstring_style: google markdown_extensions: - abbr - admonition From 6d314e67f351cef732adcb54f4498c15f7d8e1a6 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 12:51:59 +0200 Subject: [PATCH 25/67] added overview --- docs/python_modules/overview.md | 0 mkdocs.yml | 19 ++++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 docs/python_modules/overview.md diff --git a/docs/python_modules/overview.md b/docs/python_modules/overview.md new file mode 100644 index 0000000..e69de29 diff --git a/mkdocs.yml b/mkdocs.yml index dacd804..e605465 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -4,16 +4,17 @@ nav: - Home: index.md - Idea: idea.md - Python Modules: + - Overview: python_modules/overview.md - Main: python_modules/main.md - - Graph Canvas V2: python_modules/graph_canvas_v2.md - - Fourier Neural Network: python_modules/fourier_neural_network.md - - Fourier Neural Network: python_modules\fourier_neural_network_gui.md - - Music: python_modules\music.md - - Predifined Functions: python_modules\predefined_functions.md - - Simple Input Dialog: python_modules\simple_input_dialog.md - - STD Redirect: python_modules\std_redirect.md - - Synth GUI: python_modules\synth_gui.md - - Utils: python_modules/utils.md + - Graph Canvas: python_modules/graph_canvas_v2.md + - Fourier Neural Network Core: python_modules/fourier_neural_network.md + - Fourier Neural Network GUI: python_modules/fourier_neural_network_gui.md + - Music Synthesis: python_modules/music.md + - Predefined Functions: python_modules/predefined_functions.md + - Input Dialog: python_modules/simple_input_dialog.md + - Standard Output Redirect: python_modules/std_redirect.md + - Synthesizer GUI: python_modules/synth_gui.md + - Utility Functions: python_modules/utils.md theme: icon: From 42a837712e23dd2f3da0b42db8d5abc9bfd3ae1a Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 13:03:21 +0200 Subject: [PATCH 26/67] more docu --- docs/how_to_use.md | 0 mkdocs.yml | 6 ++++-- 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 docs/how_to_use.md diff --git a/docs/how_to_use.md b/docs/how_to_use.md new file mode 100644 index 0000000..e69de29 diff --git a/mkdocs.yml b/mkdocs.yml index e605465..8137317 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -2,7 +2,8 @@ site_name: Python AI Synthesizer repo_url: https://github.com/thetechnicker/PythonAISynth nav: - Home: index.md - - Idea: idea.md + - Initial Concept: idea.md + - How to Use: how_to_use.md - Python Modules: - Overview: python_modules/overview.md - Main: python_modules/main.md @@ -51,10 +52,10 @@ extra: as to measure the effectiveness of our documentation and whether users find what they're searching for. With your consent, you're helping us to make our documentation better. + plugins: - git-revision-date-localized: enable_creation_date: true - repository: thetechnicker/PythonAISynth - git-authors - search - mkdocstrings: @@ -62,6 +63,7 @@ plugins: python: options: docstring_style: google + markdown_extensions: - abbr - admonition From ea96f97fe7fed44c034dbcc0e9491d1e6c8f8124 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 13:07:41 +0200 Subject: [PATCH 27/67] scr -> src fixed typo --- main.py | 22 ++-- setup.py | 3 +- {scr => src}/__init__.py | 0 {scr => src}/fourier_neural_network.py | 4 +- {scr => src}/fourier_neural_network_gui.py | 0 {scr => src}/graph_canvas.py | 2 +- {scr => src}/graph_canvas_v2.py | 2 +- {scr => src}/music.py | 4 +- {scr => src}/predefined_functions.py | 2 +- {scr => src}/simple_input_dialog.py | 0 {scr => src}/std_redirect.py | 4 +- {scr => src}/synth_gui.py | 0 {scr => src}/utils.py | 0 tests/adaptive_fourier_degree.py | 4 +- tests/context.py | 2 +- tests/fourier_layer_torch_test.py | 6 +- tests/fourier_nn_audio_test.py | 10 +- tests/fourier_nn_test.py | 8 +- tests/fourier_nn_test_live_func_view.py | 8 +- tests/fouriernn_manual_test.py | 24 ++--- tests/fouriernn_parralel_test.py | 40 +++---- tests/fouriernn_test.py | 120 ++++++++++----------- tests/frequency_checker_test.py | 4 +- tests/graph_canvas_test.py | 4 +- tests/test_model_behavior.py | 6 +- 25 files changed, 140 insertions(+), 139 deletions(-) rename {scr => src}/__init__.py (100%) rename {scr => src}/fourier_neural_network.py (99%) rename {scr => src}/fourier_neural_network_gui.py (100%) rename {scr => src}/graph_canvas.py (99%) rename {scr => src}/graph_canvas_v2.py (99%) rename {scr => src}/music.py (99%) rename {scr => src}/predefined_functions.py (99%) rename {scr => src}/simple_input_dialog.py (100%) rename {scr => src}/std_redirect.py (99%) rename {scr => src}/synth_gui.py (100%) rename {scr => src}/utils.py (100%) diff --git a/main.py b/main.py index 80b9d2a..531e9be 100644 --- a/main.py +++ b/main.py @@ -5,17 +5,17 @@ import time import numpy as np -from scr import music -from scr import utils -from scr.music import Synth2, musik_from_file -from scr.simple_input_dialog import askStringAndSelectionDialog -from scr.std_redirect import RedirectedOutputFrame -from scr.synth_gui import SynthGUI -from scr.utils import DIE, tk_after_errorless -from scr.predefined_functions import predefined_functions_dict -from scr.graph_canvas_v2 import GraphCanvas -from scr.fourier_neural_network_gui import NeuralNetworkGUI -from scr.fourier_neural_network import FourierNN +from src import music +from src import utils +from src.music import Synth2, musik_from_file +from src.simple_input_dialog import askStringAndSelectionDialog +from src.std_redirect import RedirectedOutputFrame +from src.synth_gui import SynthGUI +from src.utils import DIE, tk_after_errorless +from src.predefined_functions import predefined_functions_dict +from src.graph_canvas_v2 import GraphCanvas +from src.fourier_neural_network_gui import NeuralNetworkGUI +from src.fourier_neural_network import FourierNN from _version import version import atexit from multiprocessing import Process, Queue diff --git a/setup.py b/setup.py index 073e854..49a0873 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,8 @@ name='PythonAISynth', version=version, py_modules=['main', '_version'], - packages=find_packages(), + packages=find_packages(where='src'), + package_dir={'': 'src'}, include_package_data=True, install_requires=[ 'numpy', diff --git a/scr/__init__.py b/src/__init__.py similarity index 100% rename from scr/__init__.py rename to src/__init__.py diff --git a/scr/fourier_neural_network.py b/src/fourier_neural_network.py similarity index 99% rename from scr/fourier_neural_network.py rename to src/fourier_neural_network.py index b07b575..266970f 100644 --- a/scr/fourier_neural_network.py +++ b/src/fourier_neural_network.py @@ -9,8 +9,8 @@ from typing import Tuple from multiprocessing import Queue -from scr import utils -from scr.utils import QueueSTD_OUT, linear_interpolation, midi_to_freq +from src import utils +from src.utils import QueueSTD_OUT, linear_interpolation, midi_to_freq try: diff --git a/scr/fourier_neural_network_gui.py b/src/fourier_neural_network_gui.py similarity index 100% rename from scr/fourier_neural_network_gui.py rename to src/fourier_neural_network_gui.py diff --git a/scr/graph_canvas.py b/src/graph_canvas.py similarity index 99% rename from scr/graph_canvas.py rename to src/graph_canvas.py index 8c805ed..0efb791 100644 --- a/scr/graph_canvas.py +++ b/src/graph_canvas.py @@ -7,7 +7,7 @@ import numpy as np -from scr import utils +from src import utils class GraphCanvas(ttk.Frame): diff --git a/scr/graph_canvas_v2.py b/src/graph_canvas_v2.py similarity index 99% rename from scr/graph_canvas_v2.py rename to src/graph_canvas_v2.py index 8f484f9..a26ee52 100644 --- a/scr/graph_canvas_v2.py +++ b/src/graph_canvas_v2.py @@ -6,7 +6,7 @@ import tkinter as tk from tkinter import ttk -from scr.utils import center_and_scale, run_after_ms, tk_after_errorless +from src.utils import center_and_scale, run_after_ms, tk_after_errorless matplotlib.use('TkAgg') diff --git a/scr/music.py b/src/music.py similarity index 99% rename from scr/music.py rename to src/music.py index 0466877..645d1cc 100644 --- a/scr/music.py +++ b/src/music.py @@ -6,8 +6,8 @@ import pygame import scipy import torch -from scr.fourier_neural_network import FourierNN -from scr import utils +from src.fourier_neural_network import FourierNN +from src import utils from pygame import mixer, midi, sndarray import atexit import multiprocessing diff --git a/scr/predefined_functions.py b/src/predefined_functions.py similarity index 99% rename from scr/predefined_functions.py rename to src/predefined_functions.py index 421bb49..93889cb 100644 --- a/scr/predefined_functions.py +++ b/src/predefined_functions.py @@ -1,7 +1,7 @@ import random import numpy as np -from scr import utils +from src import utils def funny(x): diff --git a/scr/simple_input_dialog.py b/src/simple_input_dialog.py similarity index 100% rename from scr/simple_input_dialog.py rename to src/simple_input_dialog.py diff --git a/scr/std_redirect.py b/src/std_redirect.py similarity index 99% rename from scr/std_redirect.py rename to src/std_redirect.py index a686b58..3ba0996 100644 --- a/scr/std_redirect.py +++ b/src/std_redirect.py @@ -7,8 +7,8 @@ import sys from multiprocessing import Queue -from scr import utils -from scr.utils import tk_after_errorless +from src import utils +from src.utils import tk_after_errorless class RedirectedOutputFrame(tk.Frame): diff --git a/scr/synth_gui.py b/src/synth_gui.py similarity index 100% rename from scr/synth_gui.py rename to src/synth_gui.py diff --git a/scr/utils.py b/src/utils.py similarity index 100% rename from scr/utils.py rename to src/utils.py diff --git a/tests/adaptive_fourier_degree.py b/tests/adaptive_fourier_degree.py index 72a7f1c..e0c76eb 100644 --- a/tests/adaptive_fourier_degree.py +++ b/tests/adaptive_fourier_degree.py @@ -24,8 +24,8 @@ TRAIN_SAMPLES = 1000 # autopep8: off -from context import scr -from scr import predefined_functions +from context import src +from src import predefined_functions # autopep8: on diff --git a/tests/context.py b/tests/context.py index 041e31a..aa4aa5d 100644 --- a/tests/context.py +++ b/tests/context.py @@ -5,6 +5,6 @@ path=os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) sys.path.insert(0, path) -import scr +import src import main # autopep8: on \ No newline at end of file diff --git a/tests/fourier_layer_torch_test.py b/tests/fourier_layer_torch_test.py index 9deffde..d8fc8b1 100644 --- a/tests/fourier_layer_torch_test.py +++ b/tests/fourier_layer_torch_test.py @@ -7,9 +7,9 @@ # autopep8: off -from context import scr -from scr import predefined_functions, utils -from scr.fourier_neural_network import FourierLayer +from context import src +from src import predefined_functions, utils +from src.fourier_neural_network import FourierLayer # autopep8: on diff --git a/tests/fourier_nn_audio_test.py b/tests/fourier_nn_audio_test.py index 522bd8e..6c88344 100644 --- a/tests/fourier_nn_audio_test.py +++ b/tests/fourier_nn_audio_test.py @@ -8,16 +8,16 @@ import sounddevice as sd # autopep8: off -from context import scr -from scr import predefined_functions, utils -from scr.fourier_neural_network import FourierNN -from scr.music import Synth2, Synth2 +from context import src +from src import predefined_functions, utils +from src.fourier_neural_network import FourierNN +from src.music import Synth2, Synth2 # autopep8: on def _1(): # to avoid removing importent import of scr - scr + src fourier_nn = None diff --git a/tests/fourier_nn_test.py b/tests/fourier_nn_test.py index e655de5..a481846 100644 --- a/tests/fourier_nn_test.py +++ b/tests/fourier_nn_test.py @@ -6,15 +6,15 @@ # autopep8: off -from context import scr -from scr import predefined_functions, utils -from scr.fourier_neural_network import FourierNN +from context import src +from src import predefined_functions, utils +from src.fourier_neural_network import FourierNN # autopep8: on def _1(): # to avoid removing importent import of scr - scr + src def main(): diff --git a/tests/fourier_nn_test_live_func_view.py b/tests/fourier_nn_test_live_func_view.py index 8c95311..389af41 100644 --- a/tests/fourier_nn_test_live_func_view.py +++ b/tests/fourier_nn_test_live_func_view.py @@ -6,15 +6,15 @@ # autopep8: off -from context import scr -from scr import predefined_functions, utils -from scr.fourier_neural_network import FourierNN +from context import src +from src import predefined_functions, utils +from src.fourier_neural_network import FourierNN # autopep8: on def _1(): # to avoid removing importent import of scr - scr + src def main(): diff --git a/tests/fouriernn_manual_test.py b/tests/fouriernn_manual_test.py index 012f55b..c31920e 100644 --- a/tests/fouriernn_manual_test.py +++ b/tests/fouriernn_manual_test.py @@ -1,14 +1,14 @@ -import numpy as np -import tensorflow as tf -# import matplotlib -# matplotlib.use('TkAgg') -from context import scr -from scr.fourier_neural_network import FourierNN +# import numpy as np +# import tensorflow as tf +# # import matplotlib +# # matplotlib.use('TkAgg') +# from context import src +# from src.fourier_neural_network import FourierNN -if __name__ == '__main__': - # Test the class with custom data points - data = [(x, np.sin(x * tf.keras.activations.relu(x))) - for x in np.linspace(np.pi, -np.pi, 100)] - fourier_nn = FourierNN(data) - fourier_nn.train_and_plot() +# if __name__ == '__main__': +# # Test the class with custom data points +# data = [(x, np.sin(x * tf.keras.activations.relu(x))) +# for x in np.linspace(np.pi, -np.pi, 100)] +# fourier_nn = FourierNN(data) +# fourier_nn.train_and_plot() diff --git a/tests/fouriernn_parralel_test.py b/tests/fouriernn_parralel_test.py index e287f4f..c5955e6 100644 --- a/tests/fouriernn_parralel_test.py +++ b/tests/fouriernn_parralel_test.py @@ -1,22 +1,22 @@ -import multiprocessing -import numpy as np -import tensorflow as tf -# import matplotlib -# matplotlib.use('TkAgg') -from context import scr -from scr.fourier_neural_network import FourierNN -from scr.utils import DIE +# import multiprocessing +# import numpy as np +# import tensorflow as tf +# # import matplotlib +# # matplotlib.use('TkAgg') +# from context import src +# from src.fourier_neural_network import FourierNN +# from src.utils import DIE -# TODO redo -# if __name__ == '__main__': -# multiprocessing.set_start_method("spawn") -# # Test the class with custom data points -# data = [(x, np.sin(x * tf.keras.activations.relu(x))) -# for x in np.linspace(np.pi, -np.pi, 100)] -# fourier_nn = FourierNN(data) +# # TODO redo +# # if __name__ == '__main__': +# # multiprocessing.set_start_method("spawn") +# # # Test the class with custom data points +# # data = [(x, np.sin(x * tf.keras.activations.relu(x))) +# # for x in np.linspace(np.pi, -np.pi, 100)] +# # fourier_nn = FourierNN(data) -# proc=fourier_nn.train_Process(np.linspace(np.pi, -np.pi, 100)) -# proc.start() -# while proc.is_alive(): -# pass -# DIE(proc) +# # proc=fourier_nn.train_Process(np.linspace(np.pi, -np.pi, 100)) +# # proc.start() +# # while proc.is_alive(): +# # pass +# # DIE(proc) diff --git a/tests/fouriernn_test.py b/tests/fouriernn_test.py index 9415406..614e38b 100644 --- a/tests/fouriernn_test.py +++ b/tests/fouriernn_test.py @@ -1,60 +1,60 @@ -import os -import unittest -from context import scr -from scr import fourier_neural_network - -import numpy as np -import tensorflow as tf - -# TODO could use refactor - -path = './tests/tmp/' -if not os.path.exists(path=path): - os.mkdir(path=path) - - -class TestStringMethods(unittest.TestCase): - # changed the way fourierNN saves the data - # TODO: update functon - # def test_fouriernn_init(self): - # fourier_nn = fourier_neural_network.FourierNN( - # np.array([(0, 1), (2, 3), (4, 5)])) - # np.testing.assert_array_equal( - # fourier_nn.data, np.array([(0, 1), (2, 3), (4, 5)])) - # self.assertIsNone(fourier_nn.models) - # self.assertIsNotNone(fourier_nn.current_model) - - def test_relu_aprox(self): - data = [(x, tf.keras.activations.relu(x)) - for x in np.linspace(np.pi, -np.pi, 100)] - fourier_nn = fourier_neural_network.FourierNN(data) - # self.assertEqual(fourier_nn.data, data) - fourier_nn.train(quiet=True) - test_data = np.linspace(np.pi, np.pi, fourier_nn.SAMPLES) - out = fourier_nn.predict(test_data) - wanted_data=np.array([tf.keras.activations.relu(x) for x in test_data]).reshape((fourier_nn.SAMPLES, 1)) - #print(wanted_data) - np.testing.assert_almost_equal(out, wanted_data, decimal=1) - - def test_sine_of_relu_aprox(self): - data = [(x, np.sin(x * tf.keras.activations.relu(x))) - for x in np.linspace(np.pi, -np.pi, 100)] - fourier_nn = fourier_neural_network.FourierNN(data) - # self.assertEqual(fourier_nn.data, data) - fourier_nn.train(quiet=True) - test_data = np.linspace(np.pi, np.pi, fourier_nn.SAMPLES) - #print(data) - out = fourier_nn.predict(test_data) - wanted_data=np.array([np.sin(x*tf.keras.activations.relu(x)) for x in test_data]).reshape((fourier_nn.SAMPLES, 1)) - #print(wanted_data) - #np.testing.assert_almost_equal(data, wanted_data) - np.testing.assert_almost_equal(out, wanted_data, decimal=1) - - -if __name__ == '__main__': - unittest.main() -# # Test the class with custom data points -# data = [(x, np.sin(x * tf.keras.activations.relu(x))) -# for x in np.linspace(np.pi, -np.pi, 100)] -# fourier_nn = FourierNN(data) -# fourier_nn.train() +# import os +# import unittest +# from context import src +# from src import fourier_neural_network + +# import numpy as np +# import tensorflow as tf + +# # TODO could use refactor + +# path = './tests/tmp/' +# if not os.path.exists(path=path): +# os.mkdir(path=path) + + +# class TestStringMethods(unittest.TestCase): +# # changed the way fourierNN saves the data +# # TODO: update functon +# # def test_fouriernn_init(self): +# # fourier_nn = fourier_neural_network.FourierNN( +# # np.array([(0, 1), (2, 3), (4, 5)])) +# # np.testing.assert_array_equal( +# # fourier_nn.data, np.array([(0, 1), (2, 3), (4, 5)])) +# # self.assertIsNone(fourier_nn.models) +# # self.assertIsNotNone(fourier_nn.current_model) + +# def test_relu_aprox(self): +# data = [(x, tf.keras.activations.relu(x)) +# for x in np.linspace(np.pi, -np.pi, 100)] +# fourier_nn = fourier_neural_network.FourierNN(data) +# # self.assertEqual(fourier_nn.data, data) +# fourier_nn.train(quiet=True) +# test_data = np.linspace(np.pi, np.pi, fourier_nn.SAMPLES) +# out = fourier_nn.predict(test_data) +# wanted_data=np.array([tf.keras.activations.relu(x) for x in test_data]).reshape((fourier_nn.SAMPLES, 1)) +# #print(wanted_data) +# np.testing.assert_almost_equal(out, wanted_data, decimal=1) + +# def test_sine_of_relu_aprox(self): +# data = [(x, np.sin(x * tf.keras.activations.relu(x))) +# for x in np.linspace(np.pi, -np.pi, 100)] +# fourier_nn = fourier_neural_network.FourierNN(data) +# # self.assertEqual(fourier_nn.data, data) +# fourier_nn.train(quiet=True) +# test_data = np.linspace(np.pi, np.pi, fourier_nn.SAMPLES) +# #print(data) +# out = fourier_nn.predict(test_data) +# wanted_data=np.array([np.sin(x*tf.keras.activations.relu(x)) for x in test_data]).reshape((fourier_nn.SAMPLES, 1)) +# #print(wanted_data) +# #np.testing.assert_almost_equal(data, wanted_data) +# np.testing.assert_almost_equal(out, wanted_data, decimal=1) + + +# if __name__ == '__main__': +# unittest.main() +# # # Test the class with custom data points +# # data = [(x, np.sin(x * tf.keras.activations.relu(x))) +# # for x in np.linspace(np.pi, -np.pi, 100)] +# # fourier_nn = FourierNN(data) +# # fourier_nn.train() diff --git a/tests/frequency_checker_test.py b/tests/frequency_checker_test.py index f4ca63a..04d5b5d 100644 --- a/tests/frequency_checker_test.py +++ b/tests/frequency_checker_test.py @@ -1,7 +1,7 @@ import unittest import numpy as np -from context import scr -from scr.utils import calculate_peak_frequency +from context import src +from src.utils import calculate_peak_frequency class TestCalculatePeakFrequency(unittest.TestCase): diff --git a/tests/graph_canvas_test.py b/tests/graph_canvas_test.py index bd1c038..348e1b5 100644 --- a/tests/graph_canvas_test.py +++ b/tests/graph_canvas_test.py @@ -1,7 +1,7 @@ # import os # import unittest -from context import scr -from scr import graph_canvas +from context import src +from src import graph_canvas import tkinter as tk """ diff --git a/tests/test_model_behavior.py b/tests/test_model_behavior.py index e7f7488..34a3803 100644 --- a/tests/test_model_behavior.py +++ b/tests/test_model_behavior.py @@ -1,11 +1,11 @@ from scipy.fft import fft, fftfreq import multiprocessing import numpy as np -from context import scr -from scr.fourier_neural_network import FourierNN +from context import src +from src.fourier_neural_network import FourierNN import matplotlib.pyplot as plt -from scr.utils import calculate_peak_frequency +from src.utils import calculate_peak_frequency def main(): From 22f128bae8b7558412498b7d24e0540d40cb3b11 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 13:27:50 +0200 Subject: [PATCH 28/67] Update setup.py --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 49a0873..073e854 100644 --- a/setup.py +++ b/setup.py @@ -5,8 +5,7 @@ name='PythonAISynth', version=version, py_modules=['main', '_version'], - packages=find_packages(where='src'), - package_dir={'': 'src'}, + packages=find_packages(), include_package_data=True, install_requires=[ 'numpy', From 62c94efd44b6c63f695308cd43f837ebf4cf8d09 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 14:32:34 +0200 Subject: [PATCH 29/67] bugfix wrong version fixed bug where programm displayed wrong version when installed to python env --- main.py | 3 ++- setup.py | 2 +- _version.py => src/_version.py | 0 3 files changed, 3 insertions(+), 2 deletions(-) rename _version.py => src/_version.py (100%) diff --git a/main.py b/main.py index 531e9be..8188263 100644 --- a/main.py +++ b/main.py @@ -16,7 +16,7 @@ from src.graph_canvas_v2 import GraphCanvas from src.fourier_neural_network_gui import NeuralNetworkGUI from src.fourier_neural_network import FourierNN -from _version import version +from src._version import version import atexit from multiprocessing import Process, Queue from multiprocessing.managers import SyncManager @@ -507,6 +507,7 @@ def update_frourier_params(self, key, value): def main(): + print(version) # global state, window # threading.Thread(target=start_server, daemon=True).start() diff --git a/setup.py b/setup.py index 073e854..edd8ea3 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,5 @@ from setuptools import setup, find_packages -from _version import version +from src._version import version setup( name='PythonAISynth', diff --git a/_version.py b/src/_version.py similarity index 100% rename from _version.py rename to src/_version.py From 2361b305b32d42825e8f5fd5350375e113be14cd Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 14:43:59 +0200 Subject: [PATCH 30/67] Update idea.md --- docs/idea.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/idea.md b/docs/idea.md index 1b8d321..7568028 100644 --- a/docs/idea.md +++ b/docs/idea.md @@ -23,6 +23,8 @@ $newpoint=\frac{(old\_point_1+old\_point_2)}{2}$ or by duplicating points and ad ## Future Plans for My Synth Project +> These plans will not be considered for implementation in the near Future. + Here are some enhancements I'm considering for my synth project: 1. **Frequency to MIDI Mapping**: I'm thinking of mapping the dominant frequency of my model to a MIDI note. This could result in cleaner sounds, as MIDI notes correspond to specific frequencies. From a20f75feeb391aaf0dda97654a1aab9769e7f20b Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 18:49:36 +0200 Subject: [PATCH 31/67] how to use --- docs/how_to_use.md | 20 ++++++++++++++++++++ docs/image.png | Bin 0 -> 90394 bytes docs/img/example_function.png | Bin 0 -> 90328 bytes docs/img/plot_to_draw_in.png | Bin 0 -> 53017 bytes docs/img/predefined_functions.png | Bin 0 -> 53338 bytes 5 files changed, 20 insertions(+) create mode 100644 docs/image.png create mode 100644 docs/img/example_function.png create mode 100644 docs/img/plot_to_draw_in.png create mode 100644 docs/img/predefined_functions.png diff --git a/docs/how_to_use.md b/docs/how_to_use.md index e69de29..bdf033f 100644 --- a/docs/how_to_use.md +++ b/docs/how_to_use.md @@ -0,0 +1,20 @@ +# HOW TO USE + +## Main Functionalities + +### Soundwave Drawing + +You can draw the Shape of the Soundwave inside the big Plot. +The Dots are the individual points of the Line you draw. + +![plot_to_draw_in](./img/plot_to_draw_in.png) + +### Predefined Functions + +There are already some Waveforms predefined. +You can select them in the Select Box labeled **Predefined Functions** + +![predefined_functions](./img/predefined_functions.png) + +![example_function](./img/example_function.png) +This is one of the predefined functions, its called **nice**, cause i find it sounds nice and i had no better name, if you have a problem with this, find a better name! diff --git a/docs/image.png b/docs/image.png new file mode 100644 index 0000000000000000000000000000000000000000..5c40cc4c637af3b9b1f2b2c208b72726eed6c5b6 GIT binary patch literal 90394 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

or!7|* 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 literal 0 HcmV?d00001 diff --git a/docs/img/example_function.png b/docs/img/example_function.png new file mode 100644 index 0000000000000000000000000000000000000000..5c8356022de35edf2ac91bc6e9a33e52ecdebeb3 GIT binary patch literal 90328 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 literal 0 HcmV?d00001 diff --git a/docs/img/predefined_functions.png b/docs/img/predefined_functions.png new file mode 100644 index 0000000000000000000000000000000000000000..f1ad7cefd059bb445a8e8860d73f92921a5aa70c GIT binary patch literal 53338 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 Date: Sun, 6 Oct 2024 20:39:58 +0200 Subject: [PATCH 32/67] documentation --- docs/how_to_use.md | 12 ++++++++++-- docs/img/start_training_button.png | Bin 0 -> 94267 bytes docs/index.md | 4 ++++ mkdocs.yml | 6 ++++++ 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 docs/img/start_training_button.png diff --git a/docs/how_to_use.md b/docs/how_to_use.md index bdf033f..a50ba2c 100644 --- a/docs/how_to_use.md +++ b/docs/how_to_use.md @@ -1,6 +1,6 @@ # HOW TO USE -## Main Functionalities +## Basics ### Soundwave Drawing @@ -17,4 +17,12 @@ You can select them in the Select Box labeled **Predefined Functions** ![predefined_functions](./img/predefined_functions.png) ![example_function](./img/example_function.png) -This is one of the predefined functions, its called **nice**, cause i find it sounds nice and i had no better name, if you have a problem with this, find a better name! + +> This is one of the predefined functions, its called **nice**, cause i find it sounds nice and i had no better name, if you have a +> problem with this, find a better name! + +## Training + +Once you have drawn the Shape of the Soundwave you Start the trainings Process by Clicking on the **Start Training** Button + +![start_training_button](img/start_training_button.png) diff --git a/docs/img/start_training_button.png b/docs/img/start_training_button.png new file mode 100644 index 0000000000000000000000000000000000000000..4e8734949ba01dde3a874933e8aafa4c8fe99b0a GIT binary patch literal 94267 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%0AS+O_pqDaEq%}e!?s2fueSJXlnXk5P{ynqOq?7| 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�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 Date: Sun, 6 Oct 2024 20:42:17 +0200 Subject: [PATCH 33/67] documentation --- docs/how_to_use.md | 10 +++++++++- docs/img/while_training.png | Bin 0 -> 168069 bytes 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 docs/img/while_training.png diff --git a/docs/how_to_use.md b/docs/how_to_use.md index a50ba2c..f89938d 100644 --- a/docs/how_to_use.md +++ b/docs/how_to_use.md @@ -23,6 +23,14 @@ You can select them in the Select Box labeled **Predefined Functions** ## Training -Once you have drawn the Shape of the Soundwave you Start the trainings Process by Clicking on the **Start Training** Button +Once you have drawn the Shape of the Soundwave you Start the trainings Process by Clicking on the **Start Training** Button. ![start_training_button](img/start_training_button.png) + +The Trainings Process gets initialized and after some time a Red Line appears in the Plot, this it the current output of the model. + +![while_training](img/while_training.png) + +## Making Music + +> Still a TODO diff --git a/docs/img/while_training.png b/docs/img/while_training.png new file mode 100644 index 0000000000000000000000000000000000000000..767ef4387dc213ea859b31d83b243f89ced6da46 GIT binary patch literal 168069 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

or!7|* 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 diff --git a/docs/img/midi_port.png b/docs/img/midi_port.png new file mode 100644 index 0000000000000000000000000000000000000000..901dea3f7be18737f33851655713bd88fd34c4dd GIT binary patch literal 116585 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

2sV7gtE`tf=R-ys$K946$i;JA#gWL#M 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 literal 0 HcmV?d00001 diff --git a/docs/img/start_synth.png b/docs/img/start_synth.png new file mode 100644 index 0000000000000000000000000000000000000000..901dea3f7be18737f33851655713bd88fd34c4dd GIT binary patch literal 116585 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
2sV7gtE`tf=R-ys$K946$i;JA#gWL#M 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 literal 0 HcmV?d00001 diff --git a/mkdocs.yml b/mkdocs.yml index 25db272..39eb24f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -4,7 +4,8 @@ repo_url: https://github.com/thetechnicker/PythonAISynth nav: - Home: index.md - Initial Concept: idea.md - - How to Use: how_to_use.md + - How to Use: + - Basics: how_to_use/basics.md - Python Modules: - Overview: python_modules/overview.md - Main: python_modules/main.md From 1699c38203b79978a67fec809597961945b8cb3a Mon Sep 17 00:00:00 2001 From: Thetecknicker Date: Mon, 7 Oct 2024 10:33:37 +0200 Subject: [PATCH 36/67] Update basics.md --- docs/how_to_use/basics.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/how_to_use/basics.md b/docs/how_to_use/basics.md index 03351af..57d4189 100644 --- a/docs/how_to_use/basics.md +++ b/docs/how_to_use/basics.md @@ -33,6 +33,8 @@ The Trainings Process gets initialized and after some time a Red Line appears in ## Making Music +> Images need to be Edited to Highlight GUI Elements + To make Music using this Synth, you need to have a valid Midi Input Port. You can select a Midi Port at the Select Box labeld **MIDI PORT**. @@ -47,4 +49,4 @@ Once the synth is ready you hear a Sound. Now you can use it. ## Midi piano -In case you have no midi piano or similar device that can send Midi Signals to the Synth we included a simple Piano programm where you can select a Midi Port and play musik with it. \ No newline at end of file +In case you have no midi piano or similar device that can send Midi Signals to the Synth we included a simple Piano programm where you can select a Midi Port and play musik with it. \ No newline at end of file From e675b4cf94d90a51fc32fb3b7119da1a77180724 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Mon, 7 Oct 2024 14:50:53 +0200 Subject: [PATCH 37/67] docu --- docs/how_to_use/model_params.md | 0 mkdocs.yml | 5 +++-- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 docs/how_to_use/model_params.md diff --git a/docs/how_to_use/model_params.md b/docs/how_to_use/model_params.md new file mode 100644 index 0000000..e69de29 diff --git a/mkdocs.yml b/mkdocs.yml index 39eb24f..0b2ab17 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -4,8 +4,9 @@ repo_url: https://github.com/thetechnicker/PythonAISynth nav: - Home: index.md - Initial Concept: idea.md - - How to Use: - - Basics: how_to_use/basics.md + - How to Use: + - Basics: how_to_use/basics.md + - Adjusting The Model: how_to_use/model_params.md - Python Modules: - Overview: python_modules/overview.md - Main: python_modules/main.md From fb9786df004078dca0e808fb4fbf583de9fd1430 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Mon, 7 Oct 2024 17:13:02 +0200 Subject: [PATCH 38/67] Update model_params.md --- docs/how_to_use/model_params.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/how_to_use/model_params.md b/docs/how_to_use/model_params.md index e69de29..bd88ef9 100644 --- a/docs/how_to_use/model_params.md +++ b/docs/how_to_use/model_params.md @@ -0,0 +1 @@ +> Under Construction From 9cf932f7021395452c665346116d9db0228d9d5d Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sat, 12 Oct 2024 21:58:15 +0200 Subject: [PATCH 39/67] Update music.py Changed ADSR Envelope Class removed unused Note Class --- src/music.py | 118 +++++++++++++++++++++++++-------------------------- 1 file changed, 58 insertions(+), 60 deletions(-) diff --git a/src/music.py b/src/music.py index 645d1cc..f2a8cd7 100644 --- a/src/music.py +++ b/src/music.py @@ -314,66 +314,6 @@ def apply_distortion(audio, gain=2.0, threshold=0.5): return distorted_audio -class ADSR(): - def __init__(self, attack_time, decay_time, sustain_level, release_time, sample_rate): - self.attack_samples = int(attack_time * sample_rate) - self.decay_samples = int(decay_time * sample_rate) - self.sustain_level = sustain_level - self.release_samples = int(release_time * sample_rate) - self.sample_rate = sample_rate - - def get_ads_envelope(self, start_frame, num_frames): - envelope = np.zeros(num_frames) - end_frame = start_frame + num_frames - - # Attack phase - if start_frame < self.attack_samples: - attack_end = min(end_frame, self.attack_samples) - envelope[:attack_end - - start_frame] = np.linspace(0, 1, attack_end - start_frame) - start_frame = attack_end - - # Decay phase - if start_frame < self.attack_samples + self.decay_samples: - decay_end = min(end_frame, self.attack_samples + - self.decay_samples) - envelope[start_frame - self.attack_samples:decay_end - - self.attack_samples] = np.linspace(1, self.sustain_level, decay_end - start_frame)[start_frame - self.attack_samples:decay_end - - self.attack_samples] - start_frame = decay_end - - # Sustain phase - if start_frame >= self.attack_samples + self.decay_samples: - sustain_start = max( - start_frame, self.attack_samples + self.decay_samples) - envelope[sustain_start - start_frame:] = self.sustain_level - - return envelope - - def get_r_envelope(self, start_frame, num_frames): - envelope = np.zeros(num_frames) - end_frame = start_frame + num_frames - - # Release phase - if start_frame < self.release_samples: - release_end = min(end_frame, self.release_samples) - envelope[:release_end - start_frame] = np.linspace( - self.sustain_level, 0, release_end - start_frame) - - return envelope - - -class Note: - def __init__(self, amplitude): - self.amplitude = amplitude - self.on = True - self.adsr_state = 'attack' - self.adsr_position = 0 - - def __str__(self): - return f"Note({self.amplitude}, {self.on}, {self.adsr_position}, {self.adsr_state})" - - def get_on_notes(notes): return {note: note_data for note, note_data in notes.items() if note_data.on} @@ -394,6 +334,64 @@ def piano_id(): return device_id +class ADSR: + def __init__(self, attack_time, decay_time, sustain_level, release_time, sample_rate): + self.attack_samples = int(attack_time * sample_rate) + self.decay_samples = int(decay_time * sample_rate) + self.ad_samples = self.attack_samples + self.decay_samples + self.sustain_level = sustain_level + self.release_samples = int(release_time * sample_rate) + + self.ads_envelope = np.concatenate(( + np.linspace(0, 1, self.attack_samples), + np.linspace(1, self.sustain_level, self.decay_samples) + )) + self.r_envelope = np.linspace(self.sustain_level, 0, self.release_samples) + + self._r_counter = [0 for _ in range(128)] + self._ads_counter = [0 for _ in range(128)] + + def reset_note(self, note_num): + self._ads_counter[note_num] = 0 + self._r_counter[note_num] = 0 + + def has_note_ended(self, note_num) -> bool: + return self._r_counter[note_num]>=self.release_samples + + def get_ads_envelope(self, note_num, frame): + start = self._ads_counter[note_num] + end = start + frame + self._ads_counter[note_num] += frame + + if start > self.ad_samples: + return np.ones(frame) * self.sustain_level + + envelope = np.zeros(frame) + if end > self.ad_samples: + envelope[:self.ad_samples - start] = self.ads_envelope[start:self.ad_samples] + envelope[self.ad_samples:] = np.zeros(end - self.ad_samples) + else: + envelope[:] = self.ads_envelope[start:end] + + return envelope + + def get_r_envelope(self, note_num, frame): + start = self._r_counter[note_num] + end = start + frame + self._r_counter[note_num] += frame + + if start > self.release_samples: + return np.zeros(frame) + + envelope = np.zeros(frame) + if end <= self.release_samples: + envelope[:] = self.r_envelope[start:end] + else: + envelope[:self.release_samples - start] = self.r_envelope[start:self.release_samples] + envelope[self.release_samples - start:] = 0 # After release, the envelope is 0 + return envelope + + class Synth2(): def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.stdout = stdout From bcdf92a584ba360629f44f046984e350e6a065d9 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 13 Oct 2024 14:32:59 +0200 Subject: [PATCH 40/67] added ADSR Envelope --- main.py | 6 +- src/music.py | 290 +++++++-------------------------------------------- 2 files changed, 41 insertions(+), 255 deletions(-) diff --git a/main.py b/main.py index 8188263..d5ee213 100644 --- a/main.py +++ b/main.py @@ -519,9 +519,9 @@ def main(): window.protocol("WM_DELETE_WINDOW", window.quit) state = "running" try: - # window.after(1000, lambda: window.graph.plot_function( - # predefined_functions_dict['nice'], overwrite=True)) - # window.after(2000, window.start_training) + window.after(1000, lambda: window.graph.plot_function( + predefined_functions_dict['nice'], overwrite=True)) + window.after(2000, window.start_training) window.mainloop() except KeyboardInterrupt: print("exiting via keybord interupt") diff --git a/src/music.py b/src/music.py index f2a8cd7..9a5c2dd 100644 --- a/src/music.py +++ b/src/music.py @@ -1,18 +1,10 @@ -import copy -import threading -import time -from typing import Callable import mido -import pygame import scipy import torch from src.fourier_neural_network import FourierNN from src import utils -from pygame import mixer, midi, sndarray import atexit -import multiprocessing from multiprocessing import Process, Queue, current_process -import os import sys from tkinter import filedialog import numpy as np @@ -40,7 +32,7 @@ def musik_from_file(fourier_nn: FourierNN): print(note_a) duration = note_a.end - note_a.start synthesized_note = fourier_nn.synthesize( - midi_note=note_a.pitch-12, duration=duration, sample_rate=44100) + midi_note=note_a.pitch-12, duration=duration, sample_rate=44100) print(synthesized_note.shape) note_list.append(synthesized_note) @@ -72,206 +64,6 @@ def rescale_audio(audio): return audio return audio / max_val - -class Synth(): - - MIDI_NOTE_OF_FREQ_ONE = midi.frequency_to_midi(1) - - def __init__(self, fourier_nn, stdout: Queue = None, num_channels: int = 20): - self.stdout = stdout - self.pool = None - self.live_synth: Process = None - self.notes_ready = False - self.fourier_nn: FourierNN = fourier_nn - self.fs = 44100 # Sample rate - self.num_channels = num_channels - self.notes: dict = {} - self.effects: list[Callable] = [ - # apply_reverb, - # apply_echo, - # apply_chorus, - # apply_distortion, - ] - # pygame.init() - mixer.init(frequency=44100, size=-16, - channels=2, buffer=1024) - mixer.set_num_channels(self.num_channels) - - self.running_channels: dict[str, tuple[int, mixer.Channel]] = {} - self.free_channel_ids = list(range( - self.num_channels)) - # self.generate_sounds() - - def generate_sound_wrapper(self, x, offset): - midi_note, data = self.fourier_nn.synthesize_tuple(x) - return midi_note+offset, data - - def generate_sounds(self): - self.notes_ready = False - - timestep = 44100 - - t = np.arange(0, 1, step=1 / timestep) - - data = self.fourier_nn.predict((2 * np.pi*t)-np.pi) - - peak_frequency = utils.calculate_peak_frequency(data) - - print("peak_frequency", peak_frequency) - - midi_offset = midi.frequency_to_midi(peak_frequency) \ - - self.MIDI_NOTE_OF_FREQ_ONE - print("Midi Note offset:", midi_offset) - self.pool = multiprocessing.Pool(processes=os.cpu_count()) - atexit.register(self.pool.terminate) - atexit.register(self.pool.join) - result_async = self.pool.starmap_async(self.generate_sound_wrapper, - ((x-midi_offset, midi_offset) for x in range(128))) - utils.run_after_ms(1000, self.monitor_note_generation, result_async) - - def monitor_note_generation(self, result_async): - try: - self.note_list = result_async.get(0.1) - except multiprocessing.TimeoutError: - utils.run_after_ms( - 1000, self.monitor_note_generation, result_async) - else: - print("sounds Generated") - - self.notes_ready = True - self.play_init_sound() - self.pool.close() - self.pool.join() - atexit.unregister(self.pool.terminate) - atexit.unregister(self.pool.join) - - def play_init_sound(self): - f1 = 440 # Frequency of the "duuu" sound (in Hz) - f2 = 880 # Frequency of the "dib" sound (in Hz) - t1 = 0.8 # Duration of the "duuu" sound (in seconds) - t2 = 0.2 # Duration of the "dib" sound (in seconds) - t = np.arange(int(t1 * self.fs)) / self.fs - sound1 = 0.5 * np.sin(2 * np.pi * f1 * t) - - # Generate the "dib" sound - t = np.arange(int(t2 * self.fs)) / self.fs - sound2 = 0.5 * np.sin(2 * np.pi * f2 * t) - - # Concatenate the two sounds - audio = np.concatenate([sound1, sound2]) - output = np.array( - audio * 32767 / np.max(np.abs(audio)) / 2).astype(np.int16) - stereo_sine_wave = np.repeat(output.reshape(-1, 1), 2, axis=1) - sound = sndarray.make_sound(stereo_sine_wave) - - channel = mixer.Channel(0) - channel.play(sound) - while (channel.get_busy()): - pass - print("Ready") - - def apply_effects(self, sound): - for effect in self.effects: - print(effect.__name__) - sound[:] = effect(sound) - sound = sound-np.mean(sound) - sound[:] = rescale_audio(sound) - return sound - - def live_synth_loop(self): - midi.init() - mixer.init(frequency=44100, size=-16, - channels=2, buffer=1024) - mixer.set_num_channels(self.num_channels) - for note, sound in self.note_list: - # print(sound.shape) - stereo = np.repeat(rescale_audio(sound).reshape(-1, 1), 2, axis=1) - stereo = np.array(stereo, dtype=np.int16) - # np.savetxt(f"tmp/numpy/sound_note_{note}.numpy", stereo) - stereo_sound = pygame.sndarray.make_sound(stereo) - self.notes[note] = stereo_sound - - input_id = midi.get_default_input_id() - if input_id == -1: - print("No MIDI input device found.") - return - - midi_input = midi.Input(input_id) - print("Live Synth is running") - while True: - if midi_input.poll(): - midi_events = midi_input.read(10) - for midi_event, timestamp in midi_events: - if midi_event[0] == 144: - print("Note on", midi_event[1]) - try: - id = self.free_channel_ids.pop() - channel = mixer.Channel(id) - channel.set_volume(1) - channel.play( - self.notes[midi_event[1]], fade_ms=10, loops=-1) - self.running_channels[midi_event[1]] = ( - id, channel,) - except IndexError: - print("to many sounds playing") - elif midi_event[0] == 128: - print("Note off", midi_event[1]) - self.free_channel_ids.append( - self.running_channels[midi_event[1]][0]) - self.running_channels[midi_event[1]][1].stop() - - def pending_for_live_synth(self): - if not self.notes_ready: - # print("pending") - utils.run_after_ms(500, self.pending_for_live_synth) - else: - self.run_live_synth() - - def run_live_synth(self): - if not self.notes_ready: - print("\033[31;1;4mNOT READY YET\033[0m") - self.generate_sounds() - utils.run_after_ms(500, self.pending_for_live_synth) - return - if not self.live_synth: - print("spawning live synth") - self.live_synth = Process(target=self.live_synth_loop) - self.live_synth.start() - else: - print("killing live synth") - self.live_synth.terminate() - self.live_synth.join() - self.live_synth = None - print("live synth killed") - atexit.register(utils.DIE, self.live_synth, 0, 0) - - def play_sound(self, midi_note): - id = self.free_channel_ids.pop() - channel = mixer.Channel(id) - channel.play(self.notes[midi_note], 200) - - def __getstate__(self) -> object: - pool = self.pool - live_synth = self.live_synth - del self.pool - del self.live_synth - Synth_dict = self.__dict__.copy() - self.pool = pool - self.live_synth = live_synth - return Synth_dict - - def __setstate__(self, state): - # Load the model from a file after deserialization - self.__dict__.update(state) - if self.stdout is not None: - if current_process().name != 'MainProcess': - sys.stdout = utils.QueueSTD_OUT(queue=self.stdout) - - -def get_raw_audio(sound): - return pygame.sndarray.array(sound) - - def apply_reverb(audio, decay=0.5, delay=0.02, fs=44100): delay_samples = int(delay * fs) impulse_response = np.zeros((delay_samples, 2)) @@ -280,10 +72,9 @@ def apply_reverb(audio, decay=0.5, delay=0.02, fs=44100): reverb_audio = np.zeros_like(audio) for channel in range(audio.shape[1]): reverb_audio[:, channel] = scipy.signal.fftconvolve( - audio[:, channel], impulse_response[:, channel])[:len(audio)] + audio[:, channel], impulse_response[:, channel])[:len(audio)] return reverb_audio - def apply_echo(audio, delay=0.2, decay=0.5, fs=44100): delay_samples = int(delay * fs) echo_audio = np.zeros((len(audio) + delay_samples)) @@ -292,7 +83,6 @@ def apply_echo(audio, delay=0.2, decay=0.5, fs=44100): echo_audio = echo_audio[:len(audio)] return echo_audio - def apply_chorus(audio, rate=1.5, depth=0.02, fs=44100): t = np.arange(len(audio)) / fs mod = depth * np.sin(2 * np.pi * rate * t) @@ -306,7 +96,6 @@ def apply_chorus(audio, rate=1.5, depth=0.02, fs=44100): chorus_audio[i, channel] = audio[i, channel] return chorus_audio - def apply_distortion(audio, gain=2.0, threshold=0.5): distorted_audio = gain * audio distorted_audio[distorted_audio > threshold] = threshold @@ -314,26 +103,6 @@ def apply_distortion(audio, gain=2.0, threshold=0.5): return distorted_audio -def get_on_notes(notes): - return {note: note_data for note, note_data in notes.items() if note_data.on} - - -def get_off_notes(notes): - return {note: note_data for note, note_data in notes.items() if not note_data.on} - - -def piano_id(): - desired_name = "Digital Piano" - device_id = None - - for i in range(pygame.midi.get_count()): - info = pygame.midi.get_device_info(i) - if info[1].decode() == desired_name: - device_id = i - break - return device_id - - class ADSR: def __init__(self, attack_time, decay_time, sustain_level, release_time, sample_rate): self.attack_samples = int(attack_time * sample_rate) @@ -345,7 +114,7 @@ def __init__(self, attack_time, decay_time, sustain_level, release_time, sample_ self.ads_envelope = np.concatenate(( np.linspace(0, 1, self.attack_samples), np.linspace(1, self.sustain_level, self.decay_samples) - )) + )) self.r_envelope = np.linspace(self.sustain_level, 0, self.release_samples) self._r_counter = [0 for _ in range(128)] @@ -362,24 +131,24 @@ def get_ads_envelope(self, note_num, frame): start = self._ads_counter[note_num] end = start + frame self._ads_counter[note_num] += frame - + if start > self.ad_samples: return np.ones(frame) * self.sustain_level - + envelope = np.zeros(frame) if end > self.ad_samples: envelope[:self.ad_samples - start] = self.ads_envelope[start:self.ad_samples] - envelope[self.ad_samples:] = np.zeros(end - self.ad_samples) + envelope[self.ad_samples-start:] = np.ones(end - self.ad_samples)*self.sustain_level else: envelope[:] = self.ads_envelope[start:end] - + return envelope def get_r_envelope(self, note_num, frame): start = self._r_counter[note_num] end = start + frame self._r_counter[note_num] += frame - + if start > self.release_samples: return np.zeros(frame) @@ -391,7 +160,7 @@ def get_r_envelope(self, note_num, frame): envelope[self.release_samples - start:] = 0 # After release, the envelope is 0 return envelope - + class Synth2(): def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.stdout = stdout @@ -402,13 +171,19 @@ def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.max_parralel_notes = 3 self.current_frame = 0 t = np.array([ - midi.midi_to_frequency(f) * + utils.midi_to_freq(f) * np.linspace(0, 2*np.pi, self.fs) for f in range(128) - ]) + ]) self.t_buffer = torch.tensor(t, dtype=torch.float32) print(self.t_buffer.shape) self.port_name = port_name + self.adsr_envelope=ADSR( + 0.1, + 0.1, + 0.7, + 0.2, + self.fs) def set_port_name(self, port_name): self.port_name = port_name @@ -442,7 +217,7 @@ def play_init_sound(self): # Concatenate the sounds to form "duuudldiiidub" audio = np.concatenate([sound1, sound2, sound3, sound4]) output = np.array( - audio * 32767 / np.max(np.abs(audio)) / 2).astype(np.int16) + audio * 32767 / np.max(np.abs(audio)) / 2).astype(np.int16) sd.play(output, blocking=True) print("Ready") @@ -480,26 +255,37 @@ def live_synth_loop(self): if midi_event.type == 'note_on': # Note on print("Note on", midi_event.note, - midi.midi_to_frequency(midi_event.note)) + utils.midi_to_freq(midi_event.note)) - notes[midi_event.note] = midi_event.velocity + notes[midi_event.note] = [True, midi_event.velocity] + self.adsr_envelope.reset_note(midi_event.note) elif midi_event.type == 'note_off': # Note off print("Note off", midi_event.note, - midi.midi_to_frequency(midi_event.note)) + utils.midi_to_freq(midi_event.note)) if midi_event.note in notes: - del notes[midi_event.note] + #del notes[midi_event.note] + notes[midi_event.note][0]=False if len(notes) > 0: y = np.zeros((len(notes), available_buffer), dtype=np.float32) - for i, (note, amplitude) in enumerate(notes.items()): + to_delete=[] + for i, (note, data) in enumerate(notes.items()): with torch.no_grad(): x = utils.wrap_concat( - self.t_buffer[note], cycle_frame, cycle_frame + available_buffer).to(self.fourier_nn.device) - + self.t_buffer[note], cycle_frame, cycle_frame + available_buffer).to(self.fourier_nn.device) + if data[0]: + envelope=self.adsr_envelope.get_ads_envelope(note, available_buffer) + else: + envelope=self.adsr_envelope.get_r_envelope(note, available_buffer) + if self.adsr_envelope.has_note_ended(note): + to_delete.append(note) y[i, :] = model( - x.unsqueeze(1)).cpu().numpy().astype(np.float32) # * (amplitude/127) + x.unsqueeze(1)).cpu().numpy().astype(np.float32) * envelope # * (amplitude/127) + + for note in to_delete: + del notes[note] audio_data = sum_signals(y) # print(np.max(np.abs(audio_data))) @@ -597,7 +383,7 @@ def sum_signals_torch(signals): # Normalize each signal normalized_signals = torch.stack( - [sum_signals_torch(signal) for signal in signals]) + [sum_signals_torch(signal) for signal in signals]) # Sum the signals along dimension 0 summed_signal = torch.sum(normalized_signals, dim=0) From d3524a43d959ac864f387221a475a9a7c1e09071 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 13 Oct 2024 18:39:57 +0200 Subject: [PATCH 41/67] added pre_release workflow for my branch --- pre_release.yml | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 pre_release.yml diff --git a/pre_release.yml b/pre_release.yml new file mode 100644 index 0000000..9f701a3 --- /dev/null +++ b/pre_release.yml @@ -0,0 +1,64 @@ +name: Daily Build + +on: + push: + branches: + - thetechnicker + +jobs: + build-linux: + runs-on: ubuntu-latest + strategy: + max-parallel: 5 + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v3 + with: + python-version: "3.11" + + - name: Add conda to system path + run: | + echo $CONDA/bin >> $GITHUB_PATH + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y portaudio19-dev + + - name: Install dependencies + run: | + conda env update --file environment.yml --name base + + - name: Build wheel + run: | + conda install wheel + python setup.py bdist_wheel + + - name: Get version + id: get_version + run: echo "VERSION=$(python setup.py --version)" >> $GITHUB_ENV + + - name: List contents of dist folder + run: | + ls -la dist/ + + - name: Upload wheel artifact + uses: actions/upload-artifact@v3 + with: + name: my-package + path: dist/*.whl + + - name: Create Release + id: create_release + uses: softprops/action-gh-release@v1 + with: + tag_name: "v${{ env.VERSION }}" + release_name: "Release v${{ env.VERSION }}" + draft: true + files: dist/*.whl + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + From 6ff8115327ed45d1af2047509bda02a1e6b7c151 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 13 Oct 2024 18:42:01 +0200 Subject: [PATCH 42/67] saved workflow in wrong folder --- pre_release.yml => .github/workflows/pre_release.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename pre_release.yml => .github/workflows/pre_release.yml (100%) diff --git a/pre_release.yml b/.github/workflows/pre_release.yml similarity index 100% rename from pre_release.yml rename to .github/workflows/pre_release.yml From 95f19545386c3ecac6f18f01b0e2f494b9e7bda3 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 13 Oct 2024 18:43:06 +0200 Subject: [PATCH 43/67] renamed workflow --- .github/workflows/pre_release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre_release.yml b/.github/workflows/pre_release.yml index 9f701a3..0a2dffc 100644 --- a/.github/workflows/pre_release.yml +++ b/.github/workflows/pre_release.yml @@ -1,4 +1,4 @@ -name: Daily Build +name: Pre Release on: push: From f0307a93c75a7fc6f88aff080e65af7e3a920107 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 13 Oct 2024 18:46:29 +0200 Subject: [PATCH 44/67] fixed workflow --- .github/workflows/pre_release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pre_release.yml b/.github/workflows/pre_release.yml index 0a2dffc..040684a 100644 --- a/.github/workflows/pre_release.yml +++ b/.github/workflows/pre_release.yml @@ -56,8 +56,9 @@ jobs: uses: softprops/action-gh-release@v1 with: tag_name: "v${{ env.VERSION }}" - release_name: "Release v${{ env.VERSION }}" + name: "Release v${{ env.VERSION }}" draft: true + prerelease: true files: dist/*.whl env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 6152fc5c2e40347f918d238ea47381c82345953f Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 13 Oct 2024 18:49:55 +0200 Subject: [PATCH 45/67] some more fixes --- .github/workflows/pre_release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pre_release.yml b/.github/workflows/pre_release.yml index 040684a..cb38687 100644 --- a/.github/workflows/pre_release.yml +++ b/.github/workflows/pre_release.yml @@ -46,20 +46,20 @@ jobs: ls -la dist/ - name: Upload wheel artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: my-package path: dist/*.whl - name: Create Release id: create_release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: tag_name: "v${{ env.VERSION }}" name: "Release v${{ env.VERSION }}" draft: true prerelease: true files: dist/*.whl - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + #env: + #GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From f0c24b1edb116ceb52f00cc3de19d27b2ff1b0fd Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 13 Oct 2024 18:55:36 +0200 Subject: [PATCH 46/67] workflow does not work --- .github/workflows/pre_release.yml | 65 ------------------------------- 1 file changed, 65 deletions(-) delete mode 100644 .github/workflows/pre_release.yml diff --git a/.github/workflows/pre_release.yml b/.github/workflows/pre_release.yml deleted file mode 100644 index cb38687..0000000 --- a/.github/workflows/pre_release.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: Pre Release - -on: - push: - branches: - - thetechnicker - -jobs: - build-linux: - runs-on: ubuntu-latest - strategy: - max-parallel: 5 - - steps: - - uses: actions/checkout@v4 - - - name: Set up Python 3.11 - uses: actions/setup-python@v3 - with: - python-version: "3.11" - - - name: Add conda to system path - run: | - echo $CONDA/bin >> $GITHUB_PATH - - - name: Install system dependencies - run: | - sudo apt-get update - sudo apt-get install -y portaudio19-dev - - - name: Install dependencies - run: | - conda env update --file environment.yml --name base - - - name: Build wheel - run: | - conda install wheel - python setup.py bdist_wheel - - - name: Get version - id: get_version - run: echo "VERSION=$(python setup.py --version)" >> $GITHUB_ENV - - - name: List contents of dist folder - run: | - ls -la dist/ - - - name: Upload wheel artifact - uses: actions/upload-artifact@v4 - with: - name: my-package - path: dist/*.whl - - - name: Create Release - id: create_release - uses: softprops/action-gh-release@v2 - with: - tag_name: "v${{ env.VERSION }}" - name: "Release v${{ env.VERSION }}" - draft: true - prerelease: true - files: dist/*.whl - #env: - #GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - From c762576bad52c44953d881a2ad0f0b87a588319c Mon Sep 17 00:00:00 2001 From: Thetecknicker Date: Mon, 14 Oct 2024 09:21:29 +0200 Subject: [PATCH 47/67] removed useless code --- src/music.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/music.py b/src/music.py index 9a5c2dd..929c59b 100644 --- a/src/music.py +++ b/src/music.py @@ -247,11 +247,11 @@ def live_synth_loop(self): if available_buffer == 0: continue midi_event = midi_input.poll() - # print(midi_event) if midi_event: - midi_event.type - midi_event.note - midi_event.velocity + print(midi_event) + #midi_event.type + #midi_event.note + #midi_event.velocity if midi_event.type == 'note_on': # Note on print("Note on", midi_event.note, From 90f332da6b574d2340470a0b53389d4281ff92f2 Mon Sep 17 00:00:00 2001 From: Thetecknicker Date: Mon, 14 Oct 2024 09:41:40 +0200 Subject: [PATCH 48/67] small changes --- src/music.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/music.py b/src/music.py index 929c59b..59ee5fc 100644 --- a/src/music.py +++ b/src/music.py @@ -181,7 +181,7 @@ def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.adsr_envelope=ADSR( 0.1, 0.1, - 0.7, + 0.75, 0.2, self.fs) From fb9e22738c6ab15ad051fdbab7e2d8a81a71c4a8 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 15 Oct 2024 19:19:36 +0200 Subject: [PATCH 49/67] added Echo --- main.py | 2 +- src/music.py | 131 +++++++++++++++++++++++++++++++++----------- src/std_redirect.py | 25 +++++---- src/utils.py | 27 ++++++++- 4 files changed, 139 insertions(+), 46 deletions(-) diff --git a/main.py b/main.py index d5ee213..301d2e2 100644 --- a/main.py +++ b/main.py @@ -520,7 +520,7 @@ def main(): state = "running" try: window.after(1000, lambda: window.graph.plot_function( - predefined_functions_dict['nice'], overwrite=True)) + predefined_functions_dict['funny2'], overwrite=True)) window.after(2000, window.start_training) window.mainloop() except KeyboardInterrupt: diff --git a/src/music.py b/src/music.py index 59ee5fc..cf95025 100644 --- a/src/music.py +++ b/src/music.py @@ -32,7 +32,7 @@ def musik_from_file(fourier_nn: FourierNN): print(note_a) duration = note_a.end - note_a.start synthesized_note = fourier_nn.synthesize( - midi_note=note_a.pitch-12, duration=duration, sample_rate=44100) + midi_note=note_a.pitch-12, duration=duration, sample_rate=44100) print(synthesized_note.shape) note_list.append(synthesized_note) @@ -64,6 +64,7 @@ def rescale_audio(audio): return audio return audio / max_val + def apply_reverb(audio, decay=0.5, delay=0.02, fs=44100): delay_samples = int(delay * fs) impulse_response = np.zeros((delay_samples, 2)) @@ -72,9 +73,10 @@ def apply_reverb(audio, decay=0.5, delay=0.02, fs=44100): reverb_audio = np.zeros_like(audio) for channel in range(audio.shape[1]): reverb_audio[:, channel] = scipy.signal.fftconvolve( - audio[:, channel], impulse_response[:, channel])[:len(audio)] + audio[:, channel], impulse_response[:, channel])[:len(audio)] return reverb_audio + def apply_echo(audio, delay=0.2, decay=0.5, fs=44100): delay_samples = int(delay * fs) echo_audio = np.zeros((len(audio) + delay_samples)) @@ -83,6 +85,7 @@ def apply_echo(audio, delay=0.2, decay=0.5, fs=44100): echo_audio = echo_audio[:len(audio)] return echo_audio + def apply_chorus(audio, rate=1.5, depth=0.02, fs=44100): t = np.arange(len(audio)) / fs mod = depth * np.sin(2 * np.pi * rate * t) @@ -96,6 +99,7 @@ def apply_chorus(audio, rate=1.5, depth=0.02, fs=44100): chorus_audio[i, channel] = audio[i, channel] return chorus_audio + def apply_distortion(audio, gain=2.0, threshold=0.5): distorted_audio = gain * audio distorted_audio[distorted_audio > threshold] = threshold @@ -114,8 +118,9 @@ def __init__(self, attack_time, decay_time, sustain_level, release_time, sample_ self.ads_envelope = np.concatenate(( np.linspace(0, 1, self.attack_samples), np.linspace(1, self.sustain_level, self.decay_samples) - )) - self.r_envelope = np.linspace(self.sustain_level, 0, self.release_samples) + )) + self.r_envelope = np.linspace( + self.sustain_level, 0, self.release_samples) self._r_counter = [0 for _ in range(128)] self._ads_counter = [0 for _ in range(128)] @@ -125,7 +130,7 @@ def reset_note(self, note_num): self._r_counter[note_num] = 0 def has_note_ended(self, note_num) -> bool: - return self._r_counter[note_num]>=self.release_samples + return self._r_counter[note_num] >= self.release_samples def get_ads_envelope(self, note_num, frame): start = self._ads_counter[note_num] @@ -137,8 +142,10 @@ def get_ads_envelope(self, note_num, frame): envelope = np.zeros(frame) if end > self.ad_samples: - envelope[:self.ad_samples - start] = self.ads_envelope[start:self.ad_samples] - envelope[self.ad_samples-start:] = np.ones(end - self.ad_samples)*self.sustain_level + envelope[:self.ad_samples - + start] = self.ads_envelope[start:self.ad_samples] + envelope[self.ad_samples - + start:] = np.ones(end - self.ad_samples)*self.sustain_level else: envelope[:] = self.ads_envelope[start:end] @@ -156,11 +163,57 @@ def get_r_envelope(self, note_num, frame): if end <= self.release_samples: envelope[:] = self.r_envelope[start:end] else: - envelope[:self.release_samples - start] = self.r_envelope[start:self.release_samples] - envelope[self.release_samples - start:] = 0 # After release, the envelope is 0 + envelope[:self.release_samples - + start] = self.r_envelope[start:self.release_samples] + # After release, the envelope is 0 + envelope[self.release_samples - start:] = 0 return envelope +class Echo: + def __init__(self, sample_size, delay_time_ms, feedback, wet_dry_mix, device='cpu'): + self.sample_size = sample_size + # Convert ms to samples (assuming 44.1 kHz sample rate) + self.delay_time = int(delay_time_ms * 44.1) + self.feedback = feedback + self.wet_dry_mix = wet_dry_mix + self.device = device + + # Initialize the past buffer to store delayed samples + self.past = torch.zeros( + (self.delay_time + 1, sample_size), device=device) + + def apply(self, sound): + # Ensure sound is a tensor of shape (num_samples, sample_size) + if sound.dim() != 2 or sound.size(1) != self.sample_size: + raise ValueError( + "Input sound must be a 2D tensor with shape (num_samples, sample_size)") + + # Create an output tensor + output = torch.zeros_like(sound, device=self.device) + + for i in range(sound.size(0)): + # Get the current sample + current_sample = sound[i] + + # Get the delayed sample from the past buffer + delayed_sample = self.past[-self.delay_time] if i >= self.delay_time else torch.zeros( + self.sample_size, device=self.device) + + # Calculate the echo effect + echo_sample = (current_sample + delayed_sample * + self.feedback) * self.wet_dry_mix + + # Store the current sample in the past buffer + self.past = torch.roll(self.past, shifts=-1, dims=0) + self.past[-1] = current_sample + + # Combine the original sound and the echo + output[i] = current_sample * (1 - self.wet_dry_mix) + echo_sample + + return output + + class Synth2(): def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.stdout = stdout @@ -174,16 +227,10 @@ def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): utils.midi_to_freq(f) * np.linspace(0, 2*np.pi, self.fs) for f in range(128) - ]) + ]) self.t_buffer = torch.tensor(t, dtype=torch.float32) print(self.t_buffer.shape) self.port_name = port_name - self.adsr_envelope=ADSR( - 0.1, - 0.1, - 0.75, - 0.2, - self.fs) def set_port_name(self, port_name): self.port_name = port_name @@ -217,7 +264,7 @@ def play_init_sound(self): # Concatenate the sounds to form "duuudldiiidub" audio = np.concatenate([sound1, sound2, sound3, sound4]) output = np.array( - audio * 32767 / np.max(np.abs(audio)) / 2).astype(np.int16) + audio * 32767 / np.max(np.abs(audio)) / 2).astype(np.int16) sd.play(output, blocking=True) print("Ready") @@ -231,10 +278,17 @@ def live_synth_loop(self): CHUNK = 2048 # Increased chunk size stream = p.open(format=pyaudio.paFloat32, channels=1, + frames_per_buffer=CHUNK, rate=self.fs, output=True) current_frame = 0 cycle_frame = 0 + self.adsr_envelope = ADSR( + 0.1, + 0.1, + 0.75, + 0.2, + self.fs) notes = {} model = self.fourier_nn.current_model.to(self.fourier_nn.device) @@ -243,15 +297,14 @@ def live_synth_loop(self): while True: # for _ in utils.timed_loop(True): available_buffer = stream.get_write_available() - # print(available_buffer, end=" |\t") if available_buffer == 0: continue midi_event = midi_input.poll() if midi_event: print(midi_event) - #midi_event.type - #midi_event.note - #midi_event.velocity + # midi_event.type + # midi_event.note + # midi_event.velocity if midi_event.type == 'note_on': # Note on print("Note on", midi_event.note, @@ -264,36 +317,49 @@ def live_synth_loop(self): midi_event.note, utils.midi_to_freq(midi_event.note)) if midi_event.note in notes: - #del notes[midi_event.note] - notes[midi_event.note][0]=False + # del notes[midi_event.note] + notes[midi_event.note][0] = False if len(notes) > 0: + # y = torch.zeros(size=(len(notes), available_buffer), + # device=self.fourier_nn.device) y = np.zeros((len(notes), available_buffer), dtype=np.float32) - to_delete=[] + to_delete = [] for i, (note, data) in enumerate(notes.items()): with torch.no_grad(): x = utils.wrap_concat( - self.t_buffer[note], cycle_frame, cycle_frame + available_buffer).to(self.fourier_nn.device) + self.t_buffer[note], cycle_frame, cycle_frame + available_buffer).to(self.fourier_nn.device) if data[0]: - envelope=self.adsr_envelope.get_ads_envelope(note, available_buffer) + envelope = self.adsr_envelope.get_ads_envelope( + note, available_buffer) else: - envelope=self.adsr_envelope.get_r_envelope(note, available_buffer) + envelope = self.adsr_envelope.get_r_envelope( + note, available_buffer) if self.adsr_envelope.has_note_ended(note): to_delete.append(note) - y[i, :] = model( - x.unsqueeze(1)).cpu().numpy().astype(np.float32) * envelope # * (amplitude/127) + + model_output = model(x.unsqueeze(1)) + y[i, :] = model_output.cpu().numpy().astype( + np.float32) * envelope + # y[i, :] = model( + # x.unsqueeze(1)).cpu().numpy().astype(np.float32) # * envelope # * (amplitude/127) + # y[i, :] = np.sin( + # x.numpy().astype(np.float32)) * envelope for note in to_delete: del notes[note] audio_data = sum_signals(y) # print(np.max(np.abs(audio_data))) + audio_data = normalize(audio_data) audio_data = np.clip(audio_data, -1, 1) audio_data *= 0.7 - stream.write(audio_data, + stream.write(audio_data.astype(np.float32), available_buffer, exception_on_underflow=True) + # if cycle_frame <= 100: + # print(f"available_buffer: {available_buffer}") current_frame = (current_frame + available_buffer) cycle_frame = (cycle_frame + available_buffer) % self.fs @@ -326,6 +392,9 @@ def __setstate__(self, state): def normalize(signal): + max_val = np.max(np.abs(signal)) + if np.isnan(max_val) or max_val == 0: + return signal return signal / np.max(np.abs(signal)) @@ -383,7 +452,7 @@ def sum_signals_torch(signals): # Normalize each signal normalized_signals = torch.stack( - [sum_signals_torch(signal) for signal in signals]) + [sum_signals_torch(signal) for signal in signals]) # Sum the signals along dimension 0 summed_signal = torch.sum(normalized_signals, dim=0) diff --git a/src/std_redirect.py b/src/std_redirect.py index 3ba0996..8affcc2 100644 --- a/src/std_redirect.py +++ b/src/std_redirect.py @@ -165,18 +165,21 @@ def on_resize(self, event): def check_queue(self): try: # print("asdfasdf") - while not self.queue.empty(): - try: - msg = self.queue.get_nowait() - self.redirector(msg) - except queue.Empty: - break - try: - tk_after_errorless(self.master, 100, self.check_queue) - except: - print("ERROR") + if not self.queue.empty(): + for i in range(100): + try: + msg = self.queue.get_nowait() + self.redirector(msg) + # self.old_stdout.write(str(self.queue.qsize())+'\n') + except queue.Empty: + break except BrokenPipeError: - pass + return + # delay = 100 + delay = int(500 if self.queue.empty() + else min(5, 100/min(1, self.queue.qsize()/10))) + # self.old_stdout.write(f'Delay: {delay}\n') + tk_after_errorless(self.master, delay, self.check_queue) def __del__(self): sys.stdout = self.old_stdout diff --git a/src/utils.py b/src/utils.py index 42402f9..54dac13 100644 --- a/src/utils.py +++ b/src/utils.py @@ -378,11 +378,32 @@ def timed_generator(iterable): def timed_loop(condition): + """ + A generator that runs a timed loop while the condition is true. + + Args: + condition (bool): A condition that controls the loop. + + Yields: + None: Control is yielded back to the caller. + """ max_val = 0 + total_time = 0 + iteration_count = 0 + while condition: start_time = time.perf_counter_ns() - yield + yield # Yield control back to the caller current_time = time.perf_counter_ns() - start_time + max_val = max(current_time, max_val) - print( - f"Time taken for this iteration: {(current_time/1_000_000_000):10.9f}ms, max_val: {max_val/1_000_000_000:10.3}") + total_time += current_time + iteration_count += 1 + + if total_time >= 100_000_000: # 100 milliseconds + avg_time = (total_time / iteration_count) / \ + 1_000_000 # Convert to milliseconds + max_time = max_val / 1_000_000 # Convert to milliseconds + print( + f"Time taken for this iteration: {avg_time:10.9f} ms, max_val: {max_time:10.3f} ms") + total_time, iteration_count = 0, 0 # Reset for the next period From f4438b0aa199b31267f31fa25e84b62e67252fd3 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 15 Oct 2024 19:23:31 +0200 Subject: [PATCH 50/67] Update music.py made 2 echo version 1 for numpy and one for torch --- src/music.py | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/music.py b/src/music.py index cf95025..e013861 100644 --- a/src/music.py +++ b/src/music.py @@ -170,7 +170,7 @@ def get_r_envelope(self, note_num, frame): return envelope -class Echo: +class Echo_torch: def __init__(self, sample_size, delay_time_ms, feedback, wet_dry_mix, device='cpu'): self.sample_size = sample_size # Convert ms to samples (assuming 44.1 kHz sample rate) @@ -214,6 +214,51 @@ def apply(self, sound): return output +class Echo: + def __init__(self, sample_size, delay_time_ms, feedback, wet_dry_mix): + self.sample_size = sample_size + # Convert ms to samples (assuming 44.1 kHz sample rate) + # Convert ms to seconds + self.delay_time = int(delay_time_ms * 44.1 / 1000) + self.feedback = feedback + self.wet_dry_mix = wet_dry_mix + + # Initialize the past buffer to store delayed samples + self.past = np.zeros((self.delay_time + 1, sample_size)) + + def apply(self, sound): + # Ensure sound is a 2D array with shape (num_samples, sample_size) + if sound.ndim != 2 or sound.shape[1] != self.sample_size: + raise ValueError( + "Input sound must be a 2D array with shape (num_samples, sample_size)") + + # Create an output array + output = np.zeros_like(sound) + + for i in range(sound.shape[0]): + # Get the current sample + current_sample = sound[i] + + # Get the delayed sample from the past buffer + if i >= self.delay_time: + delayed_sample = self.past[-self.delay_time] + else: + delayed_sample = np.zeros(self.sample_size) + + # Calculate the echo effect + echo_sample = (current_sample + delayed_sample * + self.feedback) * self.wet_dry_mix + + # Store the current sample in the past buffer + self.past = np.roll(self.past, shift=-1, axis=0) + self.past[-1] = current_sample + + # Combine the original sound and the echo + output[i] = current_sample * (1 - self.wet_dry_mix) + echo_sample + + return output + + class Synth2(): def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.stdout = stdout From b06c86f34fb29dd324560c0cdc2072b952fc165a Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Thu, 17 Oct 2024 07:07:45 +0200 Subject: [PATCH 51/67] Update music.py --- src/music.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/music.py b/src/music.py index e013861..7053db7 100644 --- a/src/music.py +++ b/src/music.py @@ -366,6 +366,7 @@ def live_synth_loop(self): notes[midi_event.note][0] = False if len(notes) > 0: + print(f"available_buffer: {available_buffer}") # y = torch.zeros(size=(len(notes), available_buffer), # device=self.fourier_nn.device) y = np.zeros((len(notes), available_buffer), From b90c73bdb217e90d71bf75a71106bd89314cd9e9 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 20 Oct 2024 14:14:29 +0200 Subject: [PATCH 52/67] renames fs to samplerate for better understanding --- audio_stuff/midi/fuer_elise.py | 13 +++++++------ src/music.py | 24 +++++++++++++----------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/audio_stuff/midi/fuer_elise.py b/audio_stuff/midi/fuer_elise.py index 6ec1ceb..4c80687 100644 --- a/audio_stuff/midi/fuer_elise.py +++ b/audio_stuff/midi/fuer_elise.py @@ -6,12 +6,13 @@ # Define the notes for "Für Elise" fur_elise = [ - ('E5', 0.5), ('D#5', 0.5), ('E5', 0.5), ('D#5', 0.5), ('E5', - 0.5), ('B4', 0.5), ('D5', 0.5), ('C5', 0.5), ('A4', 1.5), - ('C4', 0.5), ('E4', 0.5), ('A4', 0.5), ('B4', 1.5), ('E4', - 0.5), ('G#4', 0.5), ('B4', 0.5), ('C5', 1.5), - ('E4', 0.5), ('C4', 0.5), ('E4', 0.5), ('A4', 0.5), ('B4', - 1.5), ('E4', 0.5), ('G#4', 0.5), ('B4', 0.5), ('C5', 1.5) + ('E5', 0.5), ('D#5', 0.5), ('E5', 0.5), ('D#5', 0.5), + ('E5', 0.5), ('B4', 0.5), ('D5', 0.5), ('C5', 0.5), + ('A4', 1.5), ('C4', 0.5), ('E4', 0.5), ('A4', 0.5), + ('B4', 1.5), ('E4', 0.5), ('G#4', 0.5), ('B4', 0.5), + ('C5', 1.5), ('E4', 0.5), ('C4', 0.5), ('E4', 0.5), + ('A4', 0.5), ('B4', 1.5), ('E4', 0.5), ('G#4', 0.5), + ('B4', 0.5), ('C5', 1.5) ] # Define a function to convert note names to MIDI note numbers diff --git a/src/music.py b/src/music.py index 7053db7..0808efa 100644 --- a/src/music.py +++ b/src/music.py @@ -265,12 +265,12 @@ def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.live_synth: Process = None self.notes_ready = False self.fourier_nn: FourierNN = fourier_nn - self.fs = 44100 # Sample rate + self.sample_rate = 44100 # Sample rate self.max_parralel_notes = 3 self.current_frame = 0 t = np.array([ utils.midi_to_freq(f) * - np.linspace(0, 2*np.pi, self.fs) + np.linspace(0, 2*np.pi, self.sample_rate) for f in range(128) ]) self.t_buffer = torch.tensor(t, dtype=torch.float32) @@ -291,19 +291,19 @@ def play_init_sound(self): t4 = 0.4 # Duration of the "dii" sound (in seconds) # Generate the "duuu" sound - t = np.arange(int(t1 * self.fs)) / self.fs + t = np.arange(int(t1 * self.sample_rate)) / self.sample_rate sound1 = 0.5 * np.sin(2 * np.pi * f1 * t) # Generate the "dl" sound - t = np.arange(int(t2 * self.fs)) / self.fs + t = np.arange(int(t2 * self.sample_rate)) / self.sample_rate sound2 = 0.5 * np.sin(2 * np.pi * f2 * t) # Generate the "diii" sound - t = np.arange(int(t3 * self.fs)) / self.fs + t = np.arange(int(t3 * self.sample_rate)) / self.sample_rate sound3 = 0.5 * np.sin(2 * np.pi * f3 * t) # Generate the "dub" sound - t = np.arange(int(t4 * self.fs)) / self.fs + t = np.arange(int(t4 * self.sample_rate)) / self.sample_rate sound4 = 0.5 * np.sin(2 * np.pi * f4 * t) # Concatenate the sounds to form "duuudldiiidub" @@ -323,8 +323,8 @@ def live_synth_loop(self): CHUNK = 2048 # Increased chunk size stream = p.open(format=pyaudio.paFloat32, channels=1, - frames_per_buffer=CHUNK, - rate=self.fs, + # frames_per_buffer=CHUNK, + rate=self.sample_rate, output=True) current_frame = 0 cycle_frame = 0 @@ -333,11 +333,12 @@ def live_synth_loop(self): 0.1, 0.75, 0.2, - self.fs) + self.sample_rate) notes = {} model = self.fourier_nn.current_model.to(self.fourier_nn.device) self.play_init_sound() + with mido.open_input(self.port_name) as midi_input: while True: # for _ in utils.timed_loop(True): @@ -399,15 +400,16 @@ def live_synth_loop(self): audio_data = sum_signals(y) # print(np.max(np.abs(audio_data))) audio_data = normalize(audio_data) + audio_data *= 1 # oscilating_amplitude audio_data = np.clip(audio_data, -1, 1) - audio_data *= 0.7 stream.write(audio_data.astype(np.float32), available_buffer, exception_on_underflow=True) # if cycle_frame <= 100: # print(f"available_buffer: {available_buffer}") current_frame = (current_frame + available_buffer) - cycle_frame = (cycle_frame + available_buffer) % self.fs + cycle_frame = (cycle_frame + available_buffer) %\ + self.sample_rate def run_live_synth(self): if not self.live_synth: From c23cd6d79676e5641aad410c4e4e641771a27c52 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 10 Dec 2024 15:45:16 +0100 Subject: [PATCH 53/67] stuff --- main.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 301d2e2..91a5641 100644 --- a/main.py +++ b/main.py @@ -519,9 +519,9 @@ def main(): window.protocol("WM_DELETE_WINDOW", window.quit) state = "running" try: - window.after(1000, lambda: window.graph.plot_function( - predefined_functions_dict['funny2'], overwrite=True)) - window.after(2000, window.start_training) + # window.after(1000, lambda: window.graph.plot_function( + # predefined_functions_dict['funny2'], overwrite=True)) + # window.after(2000, window.start_training) window.mainloop() except KeyboardInterrupt: print("exiting via keybord interupt") From 273358103d221c83561d35e4f67676123e9db955 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 28 Jan 2025 12:36:37 +0100 Subject: [PATCH 54/67] dependabot --- .github/dependabot.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..c2fabe1 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,17 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + # Maintain dependencies for Cargo + - package-ecosystem: "cargo" + directory: "/" # Location of package manifests + schedule: + interval: "weekly" + # Maintain dependencies for GitHub Actions + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: weekly From a21cf2bb5ebf572532c9c19554b8ec08de35b569 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 28 Jan 2025 12:38:14 +0100 Subject: [PATCH 55/67] workflow update --- .github/workflows/dayly_build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/dayly_build.yml b/.github/workflows/dayly_build.yml index 4486596..14f6d5a 100644 --- a/.github/workflows/dayly_build.yml +++ b/.github/workflows/dayly_build.yml @@ -1,9 +1,11 @@ name: Dayly Build on: + pull_request: push: branches: - dev + - main jobs: build-linux: From 42544abe64f0742e11a75512600af708588bff03 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 28 Jan 2025 13:10:05 +0100 Subject: [PATCH 56/67] dependencies update --- environment.yml | 118 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 100 insertions(+), 18 deletions(-) diff --git a/environment.yml b/environment.yml index c2a3197..963169d 100644 --- a/environment.yml +++ b/environment.yml @@ -1,22 +1,104 @@ channels: - defaults dependencies: - - python==3.11 - - pip + - bzip2=1.0.8 + - ca-certificates=2024.9.24 + - flake8=7.1.1 + - libffi=3.4.4 + - mccabe=0.7.0 + - openssl=1.1.1w + - pip=24.2 + - pycodestyle=2.12.1 + - pyflakes=3.2.0 + - python=3.11.0 + - setuptools=75.1.0 + - sqlite=3.45.3 + - tk=8.6.14 + - tzdata=2024a + - wheel=0.44.0 + - xz=5.4.6 + - zlib=1.2.13 - pip: - - numpy - - pygame - - scipy - - torch - - psutil - - numba - - pretty_midi - - sounddevice - - pyaudio - - matplotlib - - nuitka - - mkdocs - - mkdocs-material - - mkdocs-git-revision-date-localized-plugin - - mkdocs-git-authors-plugin - - mkdocstrings + - argparse==1.4.0 + - attrs==24.2.0 + - automat==24.8.1 + - babel==2.16.0 + - buildtools==1.0.6 + - certifi==2024.8.30 + - cffi==1.17.1 + - charset-normalizer==3.3.2 + - click==8.1.7 + - colorama==0.4.6 + - constantly==23.10.4 + - contourpy==1.3.0 + - cycler==0.12.1 + - cython==3.0.11 + - docopt==0.6.2 + - filelock==3.16.1 + - fonttools==4.54.0 + - fsspec==2024.9.0 + - furl==2.1.3 + - ghp-import==2.1.0 + - gitdb==4.0.11 + - gitpython==3.1.43 + - greenlet==3.1.1 + - hyperlink==21.0.0 + - idna==3.10 + - incremental==24.7.2 + - jinja2==3.1.4 + - keras==3.5.0 + - kiwisolver==1.4.7 + - llvmlite==0.43.0 + - markupsafe==2.1.5 + - matplotlib==3.9.2 + - mergedeep==1.3.4 + - mido==1.3.2 + - mkdocs==1.6.1 + - mkdocs-autorefs==1.2.0 + - mkdocs-get-deps==0.2.0 + - mkdocs-git-authors-plugin==0.9.0 + - mkdocs-git-revision-date-localized-plugin==1.2.9 + - mkdocs-material==9.5.39 + - mkdocs-material-extensions==1.3.1 + - mkdocstrings==0.26.1 + - mpmath==1.3.0 + - networkx==3.3 + - nuitka==2.4.8 + - numba==0.60.0 + - numpy==2.0.2 + - ordered-set==4.1.0 + - orderedmultidict==1.0.1 + - packaging==23.2 + - paginate==0.5.7 + - pathspec==0.12.1 + - pillow==10.4.0 + - platformdirs==4.3.6 + - psutil==6.0.0 + - pyaudio==0.2.14 + - pycparser==2.22 + - pygame==2.6.0 + - pygments==2.18.0 + - pymdown-extensions==10.11.2 + - pyparsing==3.1.4 + - python-dateutil==2.9.0.post0 + - python-rtmidi==1.5.8 + - pytz==2024.2 + - pyyaml==6.0.2 + - pyyaml-env-tag==0.1 + - redo==3.0.0 + - regex==2024.9.11 + - requests==2.32.3 + - scipy==1.14.1 + - simplejson==3.19.3 + - six==1.16.0 + - smmap==5.0.1 + - sounddevice==0.5.0 + - sqlalchemy==2.0.35 + - sympy==1.13.3 + - torch==2.4.1 + - torchvision==0.19.1 + - twisted==24.7.0 + - typing-extensions==4.12.2 + - urllib3==2.2.3 + - zope-interface==7.0.3 + - zstandard==0.23.0 From 44169e2365fb77b59bf72b4f792bb4765f886153 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 25 Feb 2025 15:27:07 +0100 Subject: [PATCH 57/67] project structure redo --- {src => pythonaisynth}/__init__.py | 0 pythonaisynth/_version.py | 1 + .../fourier_neural_network.py | 4 +-- .../fourier_neural_network_gui.py | 0 {src => pythonaisynth}/graph_canvas.py | 2 +- {src => pythonaisynth}/graph_canvas_v2.py | 2 +- main.py => pythonaisynth/main.py | 27 ++++++++----------- {src => pythonaisynth}/music.py | 6 ++--- .../predefined_functions.py | 2 +- {src => pythonaisynth}/simple_input_dialog.py | 0 {src => pythonaisynth}/std_redirect.py | 4 +-- {src => pythonaisynth}/synth_gui.py | 0 {src => pythonaisynth}/utils.py | 0 setup.py | 7 +++-- src/_version.py | 1 - 15 files changed, 25 insertions(+), 31 deletions(-) rename {src => pythonaisynth}/__init__.py (100%) create mode 100644 pythonaisynth/_version.py rename {src => pythonaisynth}/fourier_neural_network.py (98%) rename {src => pythonaisynth}/fourier_neural_network_gui.py (100%) rename {src => pythonaisynth}/graph_canvas.py (99%) rename {src => pythonaisynth}/graph_canvas_v2.py (99%) rename main.py => pythonaisynth/main.py (96%) rename {src => pythonaisynth}/music.py (99%) rename {src => pythonaisynth}/predefined_functions.py (99%) rename {src => pythonaisynth}/simple_input_dialog.py (100%) rename {src => pythonaisynth}/std_redirect.py (99%) rename {src => pythonaisynth}/synth_gui.py (100%) rename {src => pythonaisynth}/utils.py (100%) delete mode 100644 src/_version.py diff --git a/src/__init__.py b/pythonaisynth/__init__.py similarity index 100% rename from src/__init__.py rename to pythonaisynth/__init__.py diff --git a/pythonaisynth/_version.py b/pythonaisynth/_version.py new file mode 100644 index 0000000..64236b0 --- /dev/null +++ b/pythonaisynth/_version.py @@ -0,0 +1 @@ +version = '3.1.0' diff --git a/src/fourier_neural_network.py b/pythonaisynth/fourier_neural_network.py similarity index 98% rename from src/fourier_neural_network.py rename to pythonaisynth/fourier_neural_network.py index 266970f..ca0e0ea 100644 --- a/src/fourier_neural_network.py +++ b/pythonaisynth/fourier_neural_network.py @@ -9,8 +9,8 @@ from typing import Tuple from multiprocessing import Queue -from src import utils -from src.utils import QueueSTD_OUT, linear_interpolation, midi_to_freq +from pythonaisynth import utils +from .utils import QueueSTD_OUT, linear_interpolation, midi_to_freq try: diff --git a/src/fourier_neural_network_gui.py b/pythonaisynth/fourier_neural_network_gui.py similarity index 100% rename from src/fourier_neural_network_gui.py rename to pythonaisynth/fourier_neural_network_gui.py diff --git a/src/graph_canvas.py b/pythonaisynth/graph_canvas.py similarity index 99% rename from src/graph_canvas.py rename to pythonaisynth/graph_canvas.py index 0efb791..26395de 100644 --- a/src/graph_canvas.py +++ b/pythonaisynth/graph_canvas.py @@ -7,7 +7,7 @@ import numpy as np -from src import utils +from pythonaisynth import utils class GraphCanvas(ttk.Frame): diff --git a/src/graph_canvas_v2.py b/pythonaisynth/graph_canvas_v2.py similarity index 99% rename from src/graph_canvas_v2.py rename to pythonaisynth/graph_canvas_v2.py index a26ee52..8072191 100644 --- a/src/graph_canvas_v2.py +++ b/pythonaisynth/graph_canvas_v2.py @@ -6,7 +6,7 @@ import tkinter as tk from tkinter import ttk -from src.utils import center_and_scale, run_after_ms, tk_after_errorless +from .utils import center_and_scale, run_after_ms, tk_after_errorless matplotlib.use('TkAgg') diff --git a/main.py b/pythonaisynth/main.py similarity index 96% rename from main.py rename to pythonaisynth/main.py index 91a5641..76984d6 100644 --- a/main.py +++ b/pythonaisynth/main.py @@ -1,22 +1,17 @@ import copy -import socket import sys -import threading -import time import numpy as np -from src import music -from src import utils -from src.music import Synth2, musik_from_file -from src.simple_input_dialog import askStringAndSelectionDialog -from src.std_redirect import RedirectedOutputFrame -from src.synth_gui import SynthGUI -from src.utils import DIE, tk_after_errorless -from src.predefined_functions import predefined_functions_dict -from src.graph_canvas_v2 import GraphCanvas -from src.fourier_neural_network_gui import NeuralNetworkGUI -from src.fourier_neural_network import FourierNN -from src._version import version +from .music import Synth2, musik_from_file +from .simple_input_dialog import askStringAndSelectionDialog +from .std_redirect import RedirectedOutputFrame +from .synth_gui import SynthGUI +from .utils import DIE, tk_after_errorless +from .predefined_functions import predefined_functions_dict +from .graph_canvas_v2 import GraphCanvas +from .fourier_neural_network_gui import NeuralNetworkGUI +from .fourier_neural_network import FourierNN +from ._version import version import atexit from multiprocessing import Process, Queue from multiprocessing.managers import SyncManager @@ -395,7 +390,7 @@ def play_music(self): def play_music_file(self): print("play_music") if self.fourier_nn: - music.musik_from_file(self.fourier_nn) + musik_from_file(self.fourier_nn) # music.midi_to_musik_live(self.fourier_nn, self.std_queue) def clear_graph(self): diff --git a/src/music.py b/pythonaisynth/music.py similarity index 99% rename from src/music.py rename to pythonaisynth/music.py index 0808efa..1ee854a 100644 --- a/src/music.py +++ b/pythonaisynth/music.py @@ -1,20 +1,20 @@ import mido import scipy import torch -from src.fourier_neural_network import FourierNN -from src import utils +from .fourier_neural_network import FourierNN +from pythonaisynth import utils import atexit from multiprocessing import Process, Queue, current_process import sys from tkinter import filedialog import numpy as np -import pretty_midi import sounddevice as sd import pyaudio def musik_from_file(fourier_nn: FourierNN): import sounddevice as sd + import pretty_midi midi_file = filedialog.askopenfilename() if not midi_file: return diff --git a/src/predefined_functions.py b/pythonaisynth/predefined_functions.py similarity index 99% rename from src/predefined_functions.py rename to pythonaisynth/predefined_functions.py index 93889cb..2818a5d 100644 --- a/src/predefined_functions.py +++ b/pythonaisynth/predefined_functions.py @@ -1,7 +1,7 @@ import random import numpy as np -from src import utils +from pythonaisynth import utils def funny(x): diff --git a/src/simple_input_dialog.py b/pythonaisynth/simple_input_dialog.py similarity index 100% rename from src/simple_input_dialog.py rename to pythonaisynth/simple_input_dialog.py diff --git a/src/std_redirect.py b/pythonaisynth/std_redirect.py similarity index 99% rename from src/std_redirect.py rename to pythonaisynth/std_redirect.py index 8affcc2..6c7f983 100644 --- a/src/std_redirect.py +++ b/pythonaisynth/std_redirect.py @@ -7,8 +7,8 @@ import sys from multiprocessing import Queue -from src import utils -from src.utils import tk_after_errorless +from pythonaisynth import utils +from .utils import tk_after_errorless class RedirectedOutputFrame(tk.Frame): diff --git a/src/synth_gui.py b/pythonaisynth/synth_gui.py similarity index 100% rename from src/synth_gui.py rename to pythonaisynth/synth_gui.py diff --git a/src/utils.py b/pythonaisynth/utils.py similarity index 100% rename from src/utils.py rename to pythonaisynth/utils.py diff --git a/setup.py b/setup.py index edd8ea3..b854adb 100644 --- a/setup.py +++ b/setup.py @@ -1,11 +1,10 @@ from setuptools import setup, find_packages -from src._version import version +from pythonaisynth._version import version setup( name='PythonAISynth', version=version, - py_modules=['main', '_version'], - packages=find_packages(), + packages=find_packages('.', ['tests', 'audio_stuff']), include_package_data=True, install_requires=[ 'numpy', @@ -21,7 +20,7 @@ ], entry_points={ 'console_scripts': [ - 'PythonAISynth = main:main', + 'PythonAISynth = pythonaisynth.main:main', ], }, ) diff --git a/src/_version.py b/src/_version.py deleted file mode 100644 index f608624..0000000 --- a/src/_version.py +++ /dev/null @@ -1 +0,0 @@ -version = '3.0.4' From 1c2e46e5b5f355594cc28608150e22d8f837d44a Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 25 Feb 2025 15:30:13 +0100 Subject: [PATCH 58/67] update dependabot --- .github/dependabot.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c2fabe1..9ae604d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,16 +1,9 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - version: 2 updates: - # Maintain dependencies for Cargo - - package-ecosystem: "cargo" - directory: "/" # Location of package manifests + - package-ecosystem: "conda" + directory: "/" schedule: interval: "weekly" - # Maintain dependencies for GitHub Actions - package-ecosystem: github-actions directory: "/" schedule: From 663a3ecbe146e44ab2ed0588baec378c39503304 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 25 Feb 2025 15:33:23 +0100 Subject: [PATCH 59/67] readme update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b0b01c1..a0b83d9 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ conda activate ai_synth Once the project setup is complete, you can initiate it by executing the `main.py` file in the environment: ```bash -python main.py +python -m pythonaisynth.main ``` ![window](docs/img/main_window_v3.png) From 955387d941144998004c06a4fcc1e5ff82971a01 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 25 Feb 2025 16:04:09 +0100 Subject: [PATCH 60/67] new formatting style + example music --- CONTRIBUTING.md | 4 +- pythonaisynth/_version.py | 2 +- pythonaisynth/fourier_neural_network.py | 112 ++++---- pythonaisynth/fourier_neural_network_gui.py | 131 ++++++---- pythonaisynth/fuer_elise.py | 72 +++++ pythonaisynth/graph_canvas.py | 172 +++++++----- pythonaisynth/graph_canvas_v2.py | 62 ++--- pythonaisynth/main.py | 275 ++++++++++++-------- pythonaisynth/music.py | 167 ++++++------ pythonaisynth/predefined_functions.py | 88 ++++--- pythonaisynth/simple_input_dialog.py | 23 +- pythonaisynth/std_redirect.py | 135 +++++----- pythonaisynth/synth_gui.py | 18 +- pythonaisynth/utils.py | 101 ++++--- 14 files changed, 853 insertions(+), 509 deletions(-) create mode 100644 pythonaisynth/fuer_elise.py diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b30f21e..69d41ce 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -60,8 +60,8 @@ Please follow these steps to have your contribution considered by the maintainer ### Python Style Guide -- Use PEP 8 style guide. -- Use `ms-python.autopep8` from VSCode for formatting. +- Use The Black code style. +- Use `ms-python.black-formatter` from VSCode for formatting. ### Clean Code and Documentation diff --git a/pythonaisynth/_version.py b/pythonaisynth/_version.py index 64236b0..8ea6122 100644 --- a/pythonaisynth/_version.py +++ b/pythonaisynth/_version.py @@ -1 +1 @@ -version = '3.1.0' +version = "3.1.0" diff --git a/pythonaisynth/fourier_neural_network.py b/pythonaisynth/fourier_neural_network.py index ca0e0ea..3b036ee 100644 --- a/pythonaisynth/fourier_neural_network.py +++ b/pythonaisynth/fourier_neural_network.py @@ -15,6 +15,7 @@ try: import torch_directml + DIRECTML = True except ImportError: DIRECTML = False @@ -25,7 +26,7 @@ class FourierLayer(nn.Module): def __init__(self, fourier_degree): super(FourierLayer, self).__init__() - self.tensor = torch.arange(1, fourier_degree+1) + self.tensor = torch.arange(1, fourier_degree + 1) def forward(self, x): self.tensor = self.tensor.to(x.device) @@ -37,8 +38,7 @@ def forward(self, x): class FourierRegresionModel(nn.Module): def __init__(self, degree): super(FourierRegresionModel, self).__init__() - self.frequencies = torch.arange( - 1, degree+1, 1, dtype=torch.float32) + self.frequencies = torch.arange(1, degree + 1, 1, dtype=torch.float32) self.a1 = nn.Parameter(torch.ones((degree))) self.a2 = nn.Parameter(torch.ones((degree))) self.c = nn.Parameter(torch.zeros(1)) @@ -46,7 +46,7 @@ def __init__(self, degree): def forward(self, x): y1 = self.a1 * torch.sin(self.frequencies * x) y2 = self.a2 * torch.cos(self.frequencies * x) - z = torch.sum(y1, dim=-1)+torch.sum(y2, dim=-1) + self.c + z = torch.sum(y1, dim=-1) + torch.sum(y2, dim=-1) + self.c return z def to(self, device): @@ -54,15 +54,15 @@ def to(self, device): return super(FourierRegresionModel, self).to(device) -class FourierNN(): +class FourierNN: SAMPLES = 1000 EPOCHS = 1000 DEFAULT_FORIER_DEGREE = 100 FORIER_DEGREE_DIVIDER = 1 FORIER_DEGREE_OFFSET = 0 PATIENCE = 100 - OPTIMIZER = 'SGD' - LOSS_FUNCTION = 'HuberLoss' + OPTIMIZER = "SGD" + LOSS_FUNCTION = "HuberLoss" CALC_FOURIER_DEGREE_BY_DATA_LENGTH = False def __init__(self, lock, data=None, stdout_queue=None): @@ -76,14 +76,16 @@ def __init__(self, lock, data=None, stdout_queue=None): self.stdout_queue = stdout_queue self.device = None if DIRECTML and not DISABLE_GPU: - self.device = torch_directml.device() if torch_directml.is_available() else None + self.device = ( + torch_directml.device() if torch_directml.is_available() else None + ) if not self.device: if torch.cuda.is_available() and torch.version.hip and not DISABLE_GPU: - self.device = torch.device('rocm') + self.device = torch.device("rocm") elif torch.cuda.is_available() and not DISABLE_GPU: - self.device = torch.device('cuda') + self.device = torch.device("cuda") else: - self.device = torch.device('cpu') + self.device = torch.device("cpu") print(self.device) if data is not None: self.update_data(data) @@ -98,8 +100,7 @@ def update_attribs(self, **kwargs): if hasattr(self, key): setattr(self, key, val) else: - raise ValueError( - f"Parameter '{key}' does not exist in the model.") + raise ValueError(f"Parameter '{key}' does not exist in the model.") # If the data has been prepared, recreate the model with updated parameters if self.prepared_data: @@ -117,15 +118,19 @@ def create_model(self): def update_data(self, data, stdout_queue=None): if stdout_queue: self.stdout_queue = stdout_queue - self.prepared_data = self.prepare_data( - list(data), std_queue=self.stdout_queue) + self.prepared_data = self.prepare_data(list(data), std_queue=self.stdout_queue) if not self.current_model: self.current_model = self.create_model() def update_fourier_degree(self): - self.fourier_degree = (( - (self.orig_data_len // self.FORIER_DEGREE_DIVIDER) + self.FORIER_DEGREE_OFFSET) - if self.CALC_FOURIER_DEGREE_BY_DATA_LENGTH else self.DEFAULT_FORIER_DEGREE) + self.fourier_degree = ( + ( + (self.orig_data_len // self.FORIER_DEGREE_DIVIDER) + + self.FORIER_DEGREE_OFFSET + ) + if self.CALC_FOURIER_DEGREE_BY_DATA_LENGTH + else self.DEFAULT_FORIER_DEGREE + ) def prepare_data(self, data, std_queue: Queue = None): if std_queue: @@ -135,16 +140,15 @@ def prepare_data(self, data, std_queue: Queue = None): self.update_fourier_degree() - x_train, y_train = linear_interpolation( - data, self.SAMPLES) # , self.device) - x_test, y_test = linear_interpolation( - data, self.SAMPLES//2) # , self.device) + x_train, y_train = linear_interpolation(data, self.SAMPLES) # , self.device) + x_test, y_test = linear_interpolation(data, self.SAMPLES // 2) # , self.device) - return (x_train.unsqueeze(1), - y_train, - x_test.unsqueeze(1), - y_test, - ) + return ( + x_train.unsqueeze(1), + y_train, + x_test.unsqueeze(1), + y_test, + ) def train(self, test_data, queue=None, quiet=False, stdout_queue=None): # exit(-1) @@ -152,11 +156,13 @@ def train(self, test_data, queue=None, quiet=False, stdout_queue=None): if stdout_queue: sys.stdout = QueueSTD_OUT(stdout_queue) - print(self.OPTIMIZER, - self.LOSS_FUNCTION, - self.fourier_degree, - self.PATIENCE, - sep="\n") + print( + self.OPTIMIZER, + self.LOSS_FUNCTION, + self.fourier_degree, + self.PATIENCE, + sep="\n", + ) x_train_transformed, y_train, test_x, test_y = self.prepared_data @@ -172,23 +178,25 @@ def train(self, test_data, queue=None, quiet=False, stdout_queue=None): test_y = test_y.to(self.device) optimizer = utils.get_optimizer( - optimizer_name=self.OPTIMIZER, - model_parameters=model.parameters(), - lr=0.1) + optimizer_name=self.OPTIMIZER, model_parameters=model.parameters(), lr=0.1 + ) criterion = utils.get_loss_function(self.LOSS_FUNCTION) train_dataset = TensorDataset(x_train_transformed, y_train) train_loader = DataLoader( - train_dataset, batch_size=int(self.SAMPLES / 2), shuffle=True) + train_dataset, batch_size=int(self.SAMPLES / 2), shuffle=True + ) # prepared_test_data = torch.tensor( # data=FourierNN.fourier_basis_numba( # data=test_data.flatten(), # indices=FourierNN.precompute_indices(self.fourier_degree)), # dtype=torch.float32).to(self.device) - prepared_test_data = torch.tensor( - test_data.flatten(), - dtype=torch.float32, device=self.device).unsqueeze(1).to(self.device) + prepared_test_data = ( + torch.tensor(test_data.flatten(), dtype=torch.float32, device=self.device) + .unsqueeze(1) + .to(self.device) + ) min_delta = 0.001 # 4.337714676382401e-14 epoch_without_change = 0 @@ -202,8 +210,7 @@ def train(self, test_data, queue=None, quiet=False, stdout_queue=None): epoch_loss = 0 try: for batch_x, batch_y in train_loader: - batch_x, batch_y = batch_x.to( - self.device), batch_y.to(self.device) + batch_x, batch_y = batch_x.to(self.device), batch_y.to(self.device) optimizer.zero_grad() outputs = model(batch_x) loss = criterion(outputs, batch_y) @@ -220,20 +227,21 @@ def train(self, test_data, queue=None, quiet=False, stdout_queue=None): model.eval() with torch.no_grad(): val_outputs = model(test_x) - val_loss = criterion(val_outputs, - test_y.to(self.device)) + val_loss = criterion(val_outputs, test_y.to(self.device)) if queue and epoch % 10 == 0: predictions = model(prepared_test_data).cpu().numpy() queue.put(predictions) # callback.on_epoch_end(epoch, epoch_loss, val_loss.item(), model) time_taken = time.perf_counter_ns() - timestamp - print(f"epoch {epoch+1} ends. " - f"loss: {epoch_loss:3.5f}, " - f"val_loss: {val_loss:3.5f}. " - f"Time Taken: {time_taken / 1_000_000_000}s") - - if abs(val_loss) < min_loss-min_delta: + print( + f"epoch {epoch+1} ends. " + f"loss: {epoch_loss:3.5f}, " + f"val_loss: {val_loss:3.5f}. " + f"Time Taken: {time_taken / 1_000_000_000}s" + ) + + if abs(val_loss) < min_loss - min_delta: min_loss = abs(val_loss) epoch_without_change = 0 else: @@ -259,13 +267,13 @@ def predict(self, data): with torch.no_grad(): y = model(x) - self.current_model = self.current_model.to('cpu') + self.current_model = self.current_model.to("cpu") return y.cpu().numpy() - def save_model(self, filename='./tmp/model.pth'): + def save_model(self, filename="./tmp/model.pth"): torch.save(self.current_model.state_dict(), filename) - def load_new_model_from_file(self, filename='./tmp/model.pth', *, delete_tmp=False): + def load_new_model_from_file(self, filename="./tmp/model.pth", *, delete_tmp=False): self.current_model = self.create_model() model = torch.load(filename, weights_only=False) if delete_tmp: diff --git a/pythonaisynth/fourier_neural_network_gui.py b/pythonaisynth/fourier_neural_network_gui.py index 91c740a..263ebbd 100644 --- a/pythonaisynth/fourier_neural_network_gui.py +++ b/pythonaisynth/fourier_neural_network_gui.py @@ -12,41 +12,72 @@ def __init__(self, parent=None, defaults: dict = None, callback=None, **kwargs): self.columnconfigure(1, weight=1) # Define the list of loss functions and optimizers - self.loss_functions = [func for func in dir(nn) - if not func.startswith('_') - and isinstance(getattr(nn, func), type) - and issubclass(getattr(nn, func), nn.modules.loss._Loss)] + self.loss_functions = [ + func + for func in dir(nn) + if not func.startswith("_") + and isinstance(getattr(nn, func), type) + and issubclass(getattr(nn, func), nn.modules.loss._Loss) + ] self.loss_functions.append("CustomHuberLoss") - self.optimizers_list = [opt for opt in dir(optim) - if not opt.startswith('_') - and isinstance(getattr(optim, opt), type) - and issubclass(getattr(optim, opt), optim.Optimizer)] - print("".center(40, "-"), - *self.loss_functions, - "".center(40, "-"), - *self.optimizers_list, - "".center(40, "-"), - sep="\n") + self.optimizers_list = [ + opt + for opt in dir(optim) + if not opt.startswith("_") + and isinstance(getattr(optim, opt), type) + and issubclass(getattr(optim, opt), optim.Optimizer) + ] + print( + "".center(40, "-"), + *self.loss_functions, + "".center(40, "-"), + *self.optimizers_list, + "".center(40, "-"), + sep="\n" + ) # exit(0) # Create labels and entry fields for the parameters - self.params = ['SAMPLES', 'EPOCHS', 'DEFAULT_FORIER_DEGREE', 'CALC_FOURIER_DEGREE_BY_DATA_LENGTH', - 'FORIER_DEGREE_DIVIDER', 'FORIER_DEGREE_OFFSET', 'PATIENCE', 'OPTIMIZER', 'LOSS_FUNCTION'] + self.params = [ + "SAMPLES", + "EPOCHS", + "DEFAULT_FORIER_DEGREE", + "CALC_FOURIER_DEGREE_BY_DATA_LENGTH", + "FORIER_DEGREE_DIVIDER", + "FORIER_DEGREE_OFFSET", + "PATIENCE", + "OPTIMIZER", + "LOSS_FUNCTION", + ] self.previous_values = {} for i, param in enumerate(self.params): label = ttk.Label(self, text=param) - label.grid(row=i, column=0, sticky='NSW') + label.grid(row=i, column=0, sticky="NSW") default = defaults.get( - param, 0 if param != 'CALC_FOURIER_DEGREE_BY_DATA_LENGTH' else False) - var = tk.BooleanVar(self, value=default) if param == 'CALC_FOURIER_DEGREE_BY_DATA_LENGTH' else tk.StringVar(self, value=default) if param in ['OPTIMIZER', 'LOSS_FUNCTION'] else tk.IntVar( - self, value=default) - var.trace_add('write', lambda *args, key=param, - var=var: self.on_change(key, var.get(), var)) + param, 0 if param != "CALC_FOURIER_DEGREE_BY_DATA_LENGTH" else False + ) + var = ( + tk.BooleanVar(self, value=default) + if param == "CALC_FOURIER_DEGREE_BY_DATA_LENGTH" + else ( + tk.StringVar(self, value=default) + if param in ["OPTIMIZER", "LOSS_FUNCTION"] + else tk.IntVar(self, value=default) + ) + ) + var.trace_add( + "write", + lambda *args, key=param, var=var: self.on_change(key, var.get(), var), + ) self.previous_values[param] = default - if param in ['OPTIMIZER', 'LOSS_FUNCTION']: + if param in ["OPTIMIZER", "LOSS_FUNCTION"]: # set the default option - used_list = self.optimizers_list if param == 'OPTIMIZER' else self.loss_functions + used_list = ( + self.optimizers_list + if param == "OPTIMIZER" + else self.loss_functions + ) try: default = used_list[used_list.index(defaults.get(param))] except ValueError: @@ -54,19 +85,18 @@ def __init__(self, parent=None, defaults: dict = None, callback=None, **kwargs): var.set(default) - dropdown = ttk.OptionMenu( - self, var, *(used_list)) - dropdown.grid(row=i, column=1, sticky='NSEW') - elif param == 'CALC_FOURIER_DEGREE_BY_DATA_LENGTH': + dropdown = ttk.OptionMenu(self, var, *(used_list)) + dropdown.grid(row=i, column=1, sticky="NSEW") + elif param == "CALC_FOURIER_DEGREE_BY_DATA_LENGTH": entry = ttk.Checkbutton(self, variable=var) - entry.grid(row=i, column=1, sticky='NSEW') + entry.grid(row=i, column=1, sticky="NSEW") else: entry = ttk.Entry(self, textvariable=var) - entry.grid(row=i, column=1, sticky='NSEW') + entry.grid(row=i, column=1, sticky="NSEW") var.set(default) def on_change(self, name, value, var): - if hasattr(self, 'on_change_callback'): + if hasattr(self, "on_change_callback"): if self.on_change_callback: worked = self.on_change_callback(name, value) # print(worked) @@ -77,8 +107,7 @@ def on_change(self, name, value, var): def set_on_change(self, func): self.on_change_callback = func - self.previous_values = {param: var.get() - for param, var in self.params.items()} + self.previous_values = {param: var.get() for param, var in self.params.items()} if __name__ == "__main__": @@ -86,31 +115,43 @@ def set_on_change(self, func): def stupid(*args, **kwargs): print(*args, *kwargs.items(), sep="\n") return False + # Usage root = tk.Tk() root.rowconfigure(0, weight=1) root.columnconfigure(0, weight=1) defaults = { - 'SAMPLES': 44100//2, - 'EPOCHS': 100, - 'DEFAULT_FORIER_DEGREE': 250, - 'FORIER_DEGREE_DIVIDER': 1, - 'FORIER_DEGREE_OFFSET': 0, - 'PATIENCE': 10, - 'OPTIMIZER': 'Adam', - 'LOSS_FUNCTION': 'mse_loss' + "SAMPLES": 44100 // 2, + "EPOCHS": 100, + "DEFAULT_FORIER_DEGREE": 250, + "FORIER_DEGREE_DIVIDER": 1, + "FORIER_DEGREE_OFFSET": 0, + "PATIENCE": 10, + "OPTIMIZER": "Adam", + "LOSS_FUNCTION": "mse_loss", } gui = NeuralNetworkGUI(root, defaults=defaults, callback=stupid) - gui.grid(row=0, column=0, sticky='NSEW') + gui.grid(row=0, column=0, sticky="NSEW") root.mainloop() exit() # autopep8: off - loss_functions = [func for func in dir(nn) if not func.startswith('_') and isinstance(getattr(nn, func), type) and issubclass(getattr(nn, func), nn.modules.loss._Loss)] + loss_functions = [ + func + for func in dir(nn) + if not func.startswith("_") + and isinstance(getattr(nn, func), type) + and issubclass(getattr(nn, func), nn.modules.loss._Loss) + ] print(loss_functions) - - optimizers_list = [opt for opt in dir(optim) if not opt.startswith('_') and isinstance(getattr(optim, opt), type) and issubclass(getattr(optim, opt), optim.Optimizer)] + optimizers_list = [ + opt + for opt in dir(optim) + if not opt.startswith("_") + and isinstance(getattr(optim, opt), type) + and issubclass(getattr(optim, opt), optim.Optimizer) + ] print(optimizers_list) diff --git a/pythonaisynth/fuer_elise.py b/pythonaisynth/fuer_elise.py new file mode 100644 index 0000000..c772cb5 --- /dev/null +++ b/pythonaisynth/fuer_elise.py @@ -0,0 +1,72 @@ +import mido +import time + + +# Define the MIDI output port +output = mido.open_output("LoopBe Internal MIDI 1") + +# Define the notes for "Für Elise" +fur_elise = [ + ("E5", 0.5), + ("D#5", 0.5), + ("E5", 0.5), + ("D#5", 0.5), + ("E5", 0.5), + ("B4", 0.5), + ("D5", 0.5), + ("C5", 0.5), + ("A4", 1.5), + ("C4", 0.5), + ("E4", 0.5), + ("A4", 0.5), + ("B4", 1.5), + ("E4", 0.5), + ("G#4", 0.5), + ("B4", 0.5), + ("C5", 1.5), + ("E4", 0.5), + ("C4", 0.5), + ("E4", 0.5), + ("A4", 0.5), + ("B4", 1.5), + ("E4", 0.5), + ("G#4", 0.5), + ("B4", 0.5), + ("C5", 1.5), +] + +# Define a function to convert note names to MIDI note numbers + + +def note_to_midi(note): + note_map = { + "C": 0, + "C#": 1, + "D": 2, + "D#": 3, + "E": 4, + "F": 5, + "F#": 6, + "G": 7, + "G#": 8, + "A": 9, + "A#": 10, + "B": 11, + } + octave = int(note[-1]) + key = note[:-1] + return 12 * (octave + 1) + note_map[key] + + +try: + # Stream the notes over MIDI in a loop + while True: + for note, duration in fur_elise: + midi_note = note_to_midi(note) + output.send(mido.Message("note_on", note=midi_note, velocity=64)) + time.sleep(duration / 2) + output.send(mido.Message("note_off", note=midi_note, velocity=64)) +except: + output.panic() +# Close the MIDI output port (this line will never be reached due to the infinite loop) +# output.close() diff --git a/pythonaisynth/graph_canvas.py b/pythonaisynth/graph_canvas.py index 26395de..87bc155 100644 --- a/pythonaisynth/graph_canvas.py +++ b/pythonaisynth/graph_canvas.py @@ -33,14 +33,18 @@ def __init__(self, master, size: tuple[int, int] = None, darkmode=False): self.darkmode = darkmode ttk.Frame.__init__(self, master) self.master = master - self.canvas = tk.Canvas(self, width=self.canvas_width + self.offset * 2, - height=self.canvas_height + self.offset * 2, bg='#2d2d2d' if self.darkmode else "white") + self.canvas = tk.Canvas( + self, + width=self.canvas_width + self.offset * 2, + height=self.canvas_height + self.offset * 2, + bg="#2d2d2d" if self.darkmode else "white", + ) self.canvas.pack(fill=tk.BOTH, expand=True) - self.canvas.bind('', self.resize) + self.canvas.bind("", self.resize) - self.canvas.bind('', self.on_mouse_move_interpolate) - self.canvas.bind('', self.motion_end) - self.canvas.bind('', self.on_space_press) + self.canvas.bind("", self.on_mouse_move_interpolate) + self.canvas.bind("", self.motion_end) + self.canvas.bind("", self.on_space_press) # Changed to range from 0 to 2π self.lst = np.linspace(0, 2 * math.pi, self.LEVEL_OF_DETAIL) if 0 not in self.lst and self.INCLUDE_0: @@ -50,15 +54,15 @@ def __init__(self, master, size: tuple[int, int] = None, darkmode=False): self.clear() def _draw(self): - self.canvas.delete('all') + self.canvas.delete("all") self.setup_axes() for x, y in self.data: self.draw_point(x, y) - if hasattr(self, 'extern_graph'): + if hasattr(self, "extern_graph"): self._draw_extern_graph() def motion_end(self, event): - if hasattr(self, 'old_point'): + if hasattr(self, "old_point"): del self.old_point def clear(self): @@ -70,32 +74,52 @@ def on_space_press(self, event): def setup_axes(self): # Draw X-axis - self.canvas.create_line(self.offset, self.canvas_height / 2 + self.offset, - self.canvas_width + self.offset, self.canvas_height / 2 + self.offset, - fill='white' if self.darkmode else 'black') # X-axis + self.canvas.create_line( + self.offset, + self.canvas_height / 2 + self.offset, + self.canvas_width + self.offset, + self.canvas_height / 2 + self.offset, + fill="white" if self.darkmode else "black", + ) # X-axis # Draw Y-axis - self.canvas.create_line(self.offset, self.offset, - self.offset, self.canvas_height + self.offset, - fill='white' if self.darkmode else 'black') # Y-axis + self.canvas.create_line( + self.offset, + self.offset, + self.offset, + self.canvas_height + self.offset, + fill="white" if self.darkmode else "black", + ) # Y-axis # Draw tick marks and labels for X-axis for i in range(0, 3): # Changed to range from 0 to 2 - x = (self.canvas_width / 2 + (i - 1) * - self.canvas_width / 2) + self.offset - self.canvas.create_line(x, (self.canvas_height / 2) - 10 + self.offset, - x, (self.canvas_height / 2) + 10 + self.offset, fill='blue') + x = (self.canvas_width / 2 + (i - 1) * self.canvas_width / 2) + self.offset + self.canvas.create_line( + x, + (self.canvas_height / 2) - 10 + self.offset, + x, + (self.canvas_height / 2) + 10 + self.offset, + fill="blue", + ) self.canvas.create_text( - x, (self.canvas_height / 2) + 10 + self.offset, text=f'{i}π' if i > 0 else '0', fill='white' if self.darkmode else 'black') + x, + (self.canvas_height / 2) + 10 + self.offset, + text=f"{i}π" if i > 0 else "0", + fill="white" if self.darkmode else "black", + ) # Draw tick marks and labels for Y-axis for i in range(-1, 2): - y = (self.canvas_height / 2 - i * - (self.canvas_height / 2)) + self.offset - self.canvas.create_line((self.offset) - 10, y, - (self.offset) + 10, y, fill='red') # Move Y-axis tick marks to the left + y = (self.canvas_height / 2 - i * (self.canvas_height / 2)) + self.offset + self.canvas.create_line( + (self.offset) - 10, y, (self.offset) + 10, y, fill="red" + ) # Move Y-axis tick marks to the left self.canvas.create_text( - (self.offset) + 20, y, text=f'{i}', fill='white' if self.darkmode else 'black') # Adjust text position + (self.offset) + 20, + y, + text=f"{i}", + fill="white" if self.darkmode else "black", + ) # Adjust text position first = True @@ -111,13 +135,12 @@ def resize(self, event): def on_mouse_move_interpolate(self, event): new_point = (event.x, event.y) - if hasattr(self, 'old_point'): + if hasattr(self, "old_point"): old_point = self.old_point dist = abs(new_point[0] - old_point[0]) if dist > 2: t_values = np.arange(dist) / dist - points = utils.interpolate_vectorized( - old_point, new_point, t_values) + points = utils.interpolate_vectorized(old_point, new_point, t_values) for point in points: interpolate_event = copy(event) interpolate_event.x, interpolate_event.y = point @@ -131,53 +154,64 @@ def on_mouse_move_interpolate(self, event): self.old_point = new_point def eval_mouse_move_event(self, event): - x, y = self.convert_canvas_to_graph_coordinates_optimized( - event.x, event.y) + x, y = self.convert_canvas_to_graph_coordinates_optimized(event.x, event.y) x = min(self.lst, key=lambda _y: abs(x - _y)) - if utils.is_in_interval(y, self.lower_end_y, self.upper_end_y) and utils.is_in_interval(x, self.lower_end_x, self.upper_end_x): + if utils.is_in_interval( + y, self.lower_end_y, self.upper_end_y + ) and utils.is_in_interval(x, self.lower_end_x, self.upper_end_x): data_dict = dict(self.data) data_dict[x] = y self.data = list(data_dict.items()) def draw_point(self, x, y): cx, cy = self.convert_graph_to_canvas_coordinates_optimized(x, y) - self.canvas.create_oval(cx - self.point_radius, cy - self.point_radius, - cx + self.point_radius, cy + self.point_radius, fill='red') - - def draw_line(self, a, b, width=1, color='black'): + self.canvas.create_oval( + cx - self.point_radius, + cy - self.point_radius, + cx + self.point_radius, + cy + self.point_radius, + fill="red", + ) + + def draw_line(self, a, b, width=1, color="black"): ca = self.convert_graph_to_canvas_coordinates_optimized(*a) cb = self.convert_graph_to_canvas_coordinates_optimized(*b) r, g, b = self.master.winfo_rgb(color) hex_color = "#{:02x}{:02x}{:02x}".format(r // 256, g // 256, b // 256) - self.canvas.create_line(ca, cb, fill=hex_color, - width=width, smooth=True) + self.canvas.create_line(ca, cb, fill=hex_color, width=width, smooth=True) - new_r, new_g, new_b = utils.lighten_color( - r // 256, g // 256, b // 256, 0.33) + new_r, new_g, new_b = utils.lighten_color(r // 256, g // 256, b // 256, 0.33) hex_color = "#{:02x}{:02x}{:02x}".format(new_r, new_g, new_b) - self.canvas.create_line(ca, cb, fill=hex_color, - width=width + 0.5, smooth=True) + self.canvas.create_line(ca, cb, fill=hex_color, width=width + 0.5, smooth=True) def export_data(self): return copy(self.data) def convert_canvas_to_graph_coordinates_optimized(self, x, y): graph_x = utils.map_value( - x - self.offset, 0, self.canvas_width, self.lower_end_x, self.upper_end_x) + x - self.offset, 0, self.canvas_width, self.lower_end_x, self.upper_end_x + ) graph_y = utils.map_value( - y - self.offset, 0, self.canvas_height, self.lower_end_y, self.upper_end_y) + y - self.offset, 0, self.canvas_height, self.lower_end_y, self.upper_end_y + ) return graph_x, graph_y def convert_graph_to_canvas_coordinates_optimized(self, x, y): - graph_x = utils.map_value( - x, self.lower_end_x, self.upper_end_x, 0, self.canvas_width) + self.offset - graph_y = utils.map_value( - y, self.lower_end_y, self.upper_end_y, 0, self.canvas_height) + self.offset + graph_x = ( + utils.map_value(x, self.lower_end_x, self.upper_end_x, 0, self.canvas_width) + + self.offset + ) + graph_y = ( + utils.map_value( + y, self.lower_end_y, self.upper_end_y, 0, self.canvas_height + ) + + self.offset + ) return graph_x, graph_y def draw_bounding_box(self): - self.canvas.create_rectangle(1, 1, 598, 598, outline='black') + self.canvas.create_rectangle(1, 1, 598, 598, outline="black") def _eval_func(self, function, x): val = function(x) @@ -206,25 +240,39 @@ def _draw_extern_graph(self): legend_x = 10 # The x-coordinate of the top-left corner of the legend legend_y = 10 # The y-coordinate of the top-left corner of the legend legend_spacing = 20 # The vertical spacing between items in the legend - for i, (name, (graph, color, width, graph_type, prio)) in enumerate(self.extern_graph.items()): + for i, (name, (graph, color, width, graph_type, prio)) in enumerate( + self.extern_graph.items() + ): # Draw a small line of the same color as the graph - self.canvas.create_line(legend_x, legend_y + i * legend_spacing, - legend_x + 20, legend_y + i * legend_spacing, - fill=color, width=2) + self.canvas.create_line( + legend_x, + legend_y + i * legend_spacing, + legend_x + 20, + legend_y + i * legend_spacing, + fill=color, + width=2, + ) # Draw the name of the graph - self.canvas.create_text(legend_x + 30, legend_y + i * legend_spacing, - text=name, anchor='w', fill='white' if self.darkmode else 'black') + self.canvas.create_text( + legend_x + 30, + legend_y + i * legend_spacing, + text=name, + anchor="w", + fill="white" if self.darkmode else "black", + ) if graph_type == "line": for a, b in utils.pair_iterator(graph): self.draw_line(a, b, width, color) else: for a in graph: - x, y = self.convert_graph_to_canvas_coordinates_optimized( - *a) + x, y = self.convert_graph_to_canvas_coordinates_optimized(*a) self.canvas.create_oval( - x - width / 2, y - width / 2, x + width / 2, y + width / 2) + x - width / 2, y - width / 2, x + width / 2, y + width / 2 + ) - def draw_extern_graph_from_func(self, function, name=None, width=None, color=None, graph_type='line', prio=0): + def draw_extern_graph_from_func( + self, function, name=None, width=None, color=None, graph_type="line", prio=0 + ): if not width: width = self.point_radius / 2 if not color: @@ -237,14 +285,16 @@ def draw_extern_graph_from_func(self, function, name=None, width=None, color=Non x = np.linspace(self.lower_end_x, self.upper_end_x, 44100) graph_type = "line" data = list(zip(x, function(x))) - if not hasattr(self, 'extern_graph'): + if not hasattr(self, "extern_graph"): self.extern_graph = {} self.extern_graph[name] = (data, color, width, graph_type, prio) self._draw() except Exception as e: print(e) - def draw_extern_graph_from_data(self, data, name=None, width=None, color=None, graph_type='line', prio=0): + def draw_extern_graph_from_data( + self, data, name=None, width=None, color=None, graph_type="line", prio=0 + ): if not width: width = self.point_radius / 2 if not color: @@ -252,7 +302,7 @@ def draw_extern_graph_from_data(self, data, name=None, width=None, color=None, g if not name: name = f"function {len(list(self.extern_graph.keys()))}" try: - if not hasattr(self, 'extern_graph'): + if not hasattr(self, "extern_graph"): self.extern_graph = {} self.extern_graph[name] = (data, color, width, graph_type, prio) self._draw() diff --git a/pythonaisynth/graph_canvas_v2.py b/pythonaisynth/graph_canvas_v2.py index 8072191..523f607 100644 --- a/pythonaisynth/graph_canvas_v2.py +++ b/pythonaisynth/graph_canvas_v2.py @@ -8,7 +8,7 @@ from .utils import center_and_scale, run_after_ms, tk_after_errorless -matplotlib.use('TkAgg') +matplotlib.use("TkAgg") class GraphCanvas(ttk.Frame): @@ -20,32 +20,31 @@ def __init__(self, master, *args, **kwargs): self.x = np.linspace(0, 2 * np.pi, 500) self.y = np.zeros_like(self.x) # Initial y values set to 0 - plt.style.use('dark_background') + plt.style.use("dark_background") # Create the plot self.fig, self.ax = plt.subplots(figsize=(10, 6)) - self.line, = self.ax.plot( - self.x, self.y, '-o', markersize=5) # Red dots + (self.line,) = self.ax.plot(self.x, self.y, "-o", markersize=5) # Red dots # Set the x and y axis limits self.ax.set_xlim(0, 2 * np.pi) self.ax.set_ylim(-2, 2) # Set the x and y axis labels - self.ax.set_xlabel('x (radians)') - self.ax.set_ylabel('y') + self.ax.set_xlabel("x (radians)") + self.ax.set_ylabel("y") # Customize the ticks on the x-axis - self.ax.set_xticks([0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi]) - self.ax.set_xticklabels(['0', 'π/2', 'π', '3π/2', '2π']) + self.ax.set_xticks([0, np.pi / 2, np.pi, 3 * np.pi / 2, 2 * np.pi]) + self.ax.set_xticklabels(["0", "π/2", "π", "3π/2", "2π"]) # Draw the grid self.ax.grid() # Add a title - self.ax.set_title('Draw Shape of Soundwave') + self.ax.set_title("Draw Shape of Soundwave") # Create a cursor for better visibility - self.cursor = Cursor(self.ax, useblit=True, color='blue', linewidth=1) + self.cursor = Cursor(self.ax, useblit=True, color="blue", linewidth=1) # Variables to track the selected point self.selected_index = None @@ -55,11 +54,9 @@ def __init__(self, master, *args, **kwargs): self.existing_plots = {} # Connect the events to the functions - self.fig.canvas.mpl_connect('button_press_event', self.on_mouse_press) - self.fig.canvas.mpl_connect( - 'button_release_event', self.on_mouse_release) - self.fig.canvas.mpl_connect( - 'motion_notify_event', self.on_mouse_motion) + self.fig.canvas.mpl_connect("button_press_event", self.on_mouse_press) + self.fig.canvas.mpl_connect("button_release_event", self.on_mouse_release) + self.fig.canvas.mpl_connect("motion_notify_event", self.on_mouse_motion) # Create a canvas to embed the plot in Tkinter self.redraw_needed = False @@ -98,12 +95,15 @@ def on_mouse_motion(self, event): if self.last_index is not None: start_index = self.last_index end_index = new_index - indices = np.arange( - start_index, end_index + 1) if new_index > self.selected_index else np.arange(start_index, end_index - 1, -1) - percentages = (indices - start_index) / \ - (end_index - start_index) - self.y[indices] = event.ydata * percentages + \ - self.y[start_index] * (1 - percentages) + indices = ( + np.arange(start_index, end_index + 1) + if new_index > self.selected_index + else np.arange(start_index, end_index - 1, -1) + ) + percentages = (indices - start_index) / (end_index - start_index) + self.y[indices] = event.ydata * percentages + self.y[ + start_index + ] * (1 - percentages) self.selected_index = new_index self.update_y() self.last_index = new_index @@ -135,11 +135,13 @@ def plot_points(self, points, name=None, type="points"): self.existing_plots[name].remove() if type == "points": - plot_line, = self.ax.plot( - x_values, y_values, 'ro', label=name) # 'ro' for red dots + (plot_line,) = self.ax.plot( + x_values, y_values, "ro", label=name + ) # 'ro' for red dots elif type == "line": - plot_line, = self.ax.plot( - x_values, y_values, 'r-', label=name) # 'r-' for red line + (plot_line,) = self.ax.plot( + x_values, y_values, "r-", label=name + ) # 'r-' for red line else: raise ValueError("Invalid type. Use 'points' or 'line'.") @@ -170,8 +172,9 @@ def plot_function(self, func, x_range=None, overwrite=False, name=None): self.existing_plots[name].set_ydata(y_values) else: # Create a new plot for the function - plot_line, = self.ax.plot( - x_values, y_values, label=f'Function: {name}') + (plot_line,) = self.ax.plot( + x_values, y_values, label=f"Function: {name}" + ) self.ax.legend() # Store the new plot line self.existing_plots[name] = plot_line @@ -200,8 +203,9 @@ def plot_function(self, func, x_range=None, overwrite=False, name=None): self.existing_plots[func.__name__].remove() # Create a new plot for the function - plot_line, = self.ax.plot( - x_values, y_values, label=f'Function: {func.__name__}') + (plot_line,) = self.ax.plot( + x_values, y_values, label=f"Function: {func.__name__}" + ) self.ax.legend() # Store the new plot line self.existing_plots[func.__name__] = plot_line diff --git a/pythonaisynth/main.py b/pythonaisynth/main.py index 76984d6..5ec6bf0 100644 --- a/pythonaisynth/main.py +++ b/pythonaisynth/main.py @@ -1,4 +1,5 @@ import copy +import subprocess import sys import numpy as np @@ -6,7 +7,7 @@ from .simple_input_dialog import askStringAndSelectionDialog from .std_redirect import RedirectedOutputFrame from .synth_gui import SynthGUI -from .utils import DIE, tk_after_errorless +from .utils import DIE, QueueSTD_OUT, tk_after_errorless from .predefined_functions import predefined_functions_dict from .graph_canvas_v2 import GraphCanvas from .fourier_neural_network_gui import NeuralNetworkGUI @@ -31,24 +32,24 @@ ".": { "configure": { "background": "#2d2d2d", # Dark grey background - "foreground": "white", # White text + "foreground": "white", # White text } }, "TLabel": { "configure": { - "foreground": "white", # White text + "foreground": "white", # White text } }, "TButton": { "configure": { "background": "#3c3f41", # Dark blue-grey button - "foreground": "white", # White text + "foreground": "white", # White text } }, "TEntry": { "configure": { "background": "#2d2d2d", # Dark grey background - "foreground": "white", # White text + "foreground": "white", # White text "fieldbackground": "#4d4d4d", "insertcolor": "white", "bordercolor": "black", @@ -58,7 +59,7 @@ }, "TCheckbutton": { "configure": { - "foreground": "white", # White text + "foreground": "white", # White text "indicatorbackground": "white", "indicatorforeground": "black", } @@ -66,13 +67,13 @@ "TCombobox": { "configure": { "background": "#2d2d2d", # Dark grey background - "foreground": "white", # White text + "foreground": "white", # White text "fieldbackground": "#4d4d4d", "insertcolor": "white", "bordercolor": "black", "lightcolor": "#4d4d4d", "darkcolor": "black", - "arrowcolor": "white" + "arrowcolor": "white", }, }, } @@ -107,11 +108,11 @@ def __init__(self, *args, manager: SyncManager = None, **kwargs): self.style = ttk.Style() if DARKMODE: - self.configure(bg='#202020') + self.configure(bg="#202020") self.option_add("*TCombobox*Listbox*Background", "#202020") self.option_add("*TCombobox*Listbox*Foreground", "white") - self.style.theme_create('dark', parent="clam", settings=dark_theme) - self.style.theme_use('dark') + self.style.theme_create("dark", parent="clam", settings=dark_theme) + self.style.theme_use("dark") self.manager = manager self.lock = manager.Lock() @@ -134,7 +135,7 @@ def __init__(self, *args, manager: SyncManager = None, **kwargs): self.create_menu() self.create_row_one() self.graph = GraphCanvas(self, (900, 300), DARKMODE) - self.graph.grid(row=1, column=0, columnspan=3, sticky='NSEW') + self.graph.grid(row=1, column=0, columnspan=3, sticky="NSEW") self.create_controll_column() self.create_status_bar() # sys.stdout = utils.QueueSTD_OUT(self.std_queue) @@ -149,55 +150,76 @@ def __init__(self, *args, manager: SyncManager = None, **kwargs): def init_terminal_frame(self): self.std_redirect = RedirectedOutputFrame(self, self.std_queue) # self.std_queue = self.std_redirect.queue - self.std_redirect.grid(row=2, column=0, columnspan=3, sticky='NSEW') + self.std_redirect.grid(row=2, column=0, columnspan=3, sticky="NSEW") def create_controll_column(self): self.frame = ttk.Frame(self) defaults = { - 'SAMPLES': 500, - 'EPOCHS': 1000, - 'DEFAULT_FORIER_DEGREE': 100, - 'FORIER_DEGREE_DIVIDER': 1, - 'FORIER_DEGREE_OFFSET': 0, - 'PATIENCE': 50, - 'OPTIMIZER': 'SGD', - 'LOSS_FUNCTION': 'HuberLoss', + "SAMPLES": 500, + "EPOCHS": 1000, + "DEFAULT_FORIER_DEGREE": 100, + "FORIER_DEGREE_DIVIDER": 1, + "FORIER_DEGREE_OFFSET": 0, + "PATIENCE": 50, + "OPTIMIZER": "SGD", + "LOSS_FUNCTION": "HuberLoss", } self.neural_network_gui = NeuralNetworkGUI( - self.frame, defaults=defaults, callback=self.update_frourier_params) - self.neural_network_gui.grid(row=0, sticky='NSEW') + self.frame, defaults=defaults, callback=self.update_frourier_params + ) + self.neural_network_gui.grid(row=0, sticky="NSEW") - separator1 = ttk.Separator(self.frame, orient='horizontal') - separator1.grid(row=1, sticky='WE') + separator1 = ttk.Separator(self.frame, orient="horizontal") + separator1.grid(row=1, sticky="WE") self.synth_gui = SynthGUI(self.frame) - self.synth_gui.grid(row=2, sticky='NSEW') + self.synth_gui.grid(row=2, sticky="NSEW") - self.frame.grid(row=1, column=3, rowspan=2, sticky='NSEW') + self.frame.grid(row=1, column=3, rowspan=2, sticky="NSEW") def create_status_bar(self): # Create a status bar with two labels self.status_bar = ttk.Frame(self, relief=tk.SUNKEN) # Adjust row and column as needed - self.status_bar.grid(row=3, column=0, sticky='we', columnspan=4) + self.status_bar.grid(row=3, column=0, sticky="we", columnspan=4) self.status_label = ttk.Label( - self.status_bar, text="Ready", anchor=tk.W, font=("TkFixedFont"), relief=tk.SUNKEN) + self.status_bar, + text="Ready", + anchor=tk.W, + font=("TkFixedFont"), + relief=tk.SUNKEN, + ) self.status_label.pack(side=tk.LEFT) self.processes_label = ttk.Label( - self.status_bar, text="Children Processes: 0", anchor=tk.E, font=("TkFixedFont"), relief=tk.SUNKEN) + self.status_bar, + text="Children Processes: 0", + anchor=tk.E, + font=("TkFixedFont"), + relief=tk.SUNKEN, + ) self.processes_label.pack(side=tk.RIGHT) # CPU and RAM self.cpu_label = ttk.Label( - self.status_bar, text="CPU Usage: 0%", anchor=tk.E, font=("TkFixedFont"), relief=tk.SUNKEN) + self.status_bar, + text="CPU Usage: 0%", + anchor=tk.E, + font=("TkFixedFont"), + relief=tk.SUNKEN, + ) self.cpu_label.pack(side=tk.RIGHT) self.ram_label = ttk.Label( - self.status_bar, text="RAM Usage: 0%", anchor=tk.E, font=("TkFixedFont"), relief=tk.SUNKEN) + self.status_bar, + text="RAM Usage: 0%", + anchor=tk.E, + font=("TkFixedFont"), + relief=tk.SUNKEN, + ) self.ram_label.pack(side=tk.RIGHT) self.frame_no = 0 @@ -221,84 +243,106 @@ def update_status_bar(self): print(total_mem) self.quit() # input("press key to continue") - self.cpu_label.config( - text=f"CPU Usage: {total_cpu/os.cpu_count():.2f}%") + self.cpu_label.config(text=f"CPU Usage: {total_cpu/os.cpu_count():.2f}%") self.ram_label.config(text=f"RAM Usage: {total_mem:.2f}%") - animation_text = "|" if self.frame_no == 0 else '/' if self.frame_no == 1 else '-' if self.frame_no == 2 else '\\' - self.frame_no = (self.frame_no+1) % 4 + animation_text = ( + "|" + if self.frame_no == 0 + else "/" if self.frame_no == 1 else "-" if self.frame_no == 2 else "\\" + ) + self.frame_no = (self.frame_no + 1) % 4 if len(children) <= 1: self.status_label.config(text="Ready", foreground="green") else: - self.status_label.config( - text=f"Busy ({animation_text})", foreground="red") + self.status_label.config(text=f"Busy ({animation_text})", foreground="red") - self.processes_label.config( - text=f"Children Processes: {len(children)}") + self.processes_label.config(text=f"Children Processes: {len(children)}") tk_after_errorless(self, 500, self.update_status_bar) def create_row_one(self): self.label = ttk.Label(self, text="Predefined Functions:") - self.label.grid(row=0, column=0, sticky='NSEW') + self.label.grid(row=0, column=0, sticky="NSEW") self.combo_selected_value = tk.StringVar() # Create a select box self.combo = ttk.Combobox( - self, values=list(predefined_functions_dict.keys()), - textvariable=self.combo_selected_value, state="readonly") + self, + values=list(predefined_functions_dict.keys()), + textvariable=self.combo_selected_value, + state="readonly", + ) - self.combo.bind( - '<>', self.draw_graph_from_func) - self.combo.grid(row=0, column=1, sticky='NSEW') + self.combo.bind("<>", self.draw_graph_from_func) + self.combo.grid(row=0, column=1, sticky="NSEW") # Create a 'Start Training' button self.train_button = ttk.Button( - self, text="Start Training", command=self.start_training) - self.train_button.grid(row=0, column=2, sticky='NSEW') + self, text="Start Training", command=self.start_training + ) + self.train_button.grid(row=0, column=2, sticky="NSEW") # Create a 'Play' button - self.play_button = ttk.Button( - self, text="Play", command=self.play_music) - self.play_button.grid(row=0, column=3, sticky='NSEW') + self.play_button = ttk.Button(self, text="Play", command=self.play_music) + self.play_button.grid(row=0, column=3, sticky="NSEW") def create_menu(self): # Create a menu bar if DARKMODE: - self.menu_bar = tk.Menu(self, bg="#2d2d2d", fg="white", - activebackground="#3e3e3e", activeforeground="white") + self.menu_bar = tk.Menu( + self, + bg="#2d2d2d", + fg="white", + activebackground="#3e3e3e", + activeforeground="white", + ) else: self.menu_bar = tk.Menu(self) # Create a 'File' menu - self.create_menu_item("File", [ - ("Export Neural Net", self.export_neural_net), - ("Load Neural Net", self.load_neural_net) - ]) + self.create_menu_item( + "File", + [ + ("Export Neural Net", self.export_neural_net), + ("Load Neural Net", self.load_neural_net), + ], + ) # Create a 'Training' menu - self.create_menu_item("Training", [ - ("Start Training", self.start_training) - ]) + self.create_menu_item("Training", [("Start Training", self.start_training)]) # Create a 'Graph' menu - self.create_menu_item("Graph", [ - ("Clear Graph", self.clear_graph), - # ("Redraw Graph", self.redraw_graph) - ]) + self.create_menu_item( + "Graph", + [ + ("Clear Graph", self.clear_graph), + # ("Redraw Graph", self.redraw_graph) + ], + ) # Create a 'Music' menu - self.create_menu_item("Music", [ - ("Play Music from MIDI Port", self.play_music), - ("Play Music from MIDI File", self.play_music_file) - ]) + self.create_menu_item( + "Music", + [ + ("Play Music from MIDI Port", self.play_music), + ("Play Music from MIDI File", self.play_music_file), + ("Play Example", self.play_example), + ], + ) # Display the menu self.config(menu=self.menu_bar) def create_menu_item(self, name, commands): if DARKMODE: - menu = tk.Menu(self.menu_bar, tearoff=0, bg="#2d2d2d", fg="white", - activebackground="#3e3e3e", activeforeground="white") + menu = tk.Menu( + self.menu_bar, + tearoff=0, + bg="#2d2d2d", + fg="white", + activebackground="#3e3e3e", + activeforeground="white", + ) else: menu = tk.Menu(self.menu_bar, tearoff=0) for label, command in commands: @@ -313,7 +357,7 @@ def train_update(self): data = self.queue.get_nowait() # print("!!!check!!!") data = list(zip(self.graph.x, data)) - self.graph.plot_points(data, name="training", type='line') + self.graph.plot_points(data, name="training", type="line") except Exception as e: # print(e) pass @@ -330,31 +374,39 @@ def train_update(self): # print( # f"Layer: {name} | Size: {param.size()} | Values:\n{param[:2]}\n------------------------------") self.graph.plot_function( - self.fourier_nn.predict, x_range=(0, 2*np.pi, 44100//2)) + self.fourier_nn.predict, x_range=(0, 2 * np.pi, 44100 // 2) + ) self.synth = Synth2( - self.fourier_nn, self.std_queue, self.synth_gui.get_port_name()) + self.fourier_nn, self.std_queue, self.synth_gui.get_port_name() + ) DIE(self.trainings_process) self.trainings_process = None self.training_started = False self.block_training = False - messagebox.showinfo( - "training Ended", f"exit code: {exit_code}") + messagebox.showinfo("training Ended", f"exit code: {exit_code}") # self.fourier_nn.clean_memory() return tk_after_errorless(self, 10, self.train_update) def init_or_update_nn(self, stdout=None): if not self.fourier_nn: - print("".center(20, '*')) + print("".center(20, "*")) self.fourier_nn = FourierNN( - self.lock, self.graph.export_data(), stdout_queue=stdout) + self.lock, self.graph.export_data(), stdout_queue=stdout + ) else: - print("".center(20, '#')) + print("".center(20, "#")) self.fourier_nn.update_data(self.graph.export_data()) self.fourier_nn.save_model() self.trainings_process = multiprocessing.Process( - target=self.fourier_nn.train, args=(self.graph.x, self.queue, ), kwargs={"stdout_queue": self.std_queue}) + target=self.fourier_nn.train, + args=( + self.graph.x, + self.queue, + ), + kwargs={"stdout_queue": self.std_queue}, + ) self.trainings_process.start() self.training_started = True @@ -362,7 +414,7 @@ def init_or_update_nn(self, stdout=None): def start_training(self): if self.trainings_process or self.block_training: - print('already training') + print("already training") return if self.synth: if self.synth.live_synth: @@ -399,22 +451,24 @@ def clear_graph(self): def export_neural_net(self): print("export_neural_net") - default_format = 'keras' + default_format = "keras" if self.fourier_nn: - path = './tmp' + path = "./tmp" if not os.path.exists(path): os.mkdir(path) i = 0 - while os.path.exists(path+f"/model{i}.{default_format}"): + while os.path.exists(path + f"/model{i}.{default_format}"): i += 1 - dialog = askStringAndSelectionDialog(parent=self, - title="Save Model", - label_str="Enter a File Name", - default_str=f"model{i}", - label_select="Select Format", - default_select=default_format, - values_to_select_from=["pth"]) + dialog = askStringAndSelectionDialog( + parent=self, + title="Save Model", + label_str="Enter a File Name", + default_str=f"model{i}", + label_select="Select Format", + default_select=default_format, + values_to_select_from=["pth"], + ) name, file_format = dialog.result if not name: name = f"model{i}" @@ -425,29 +479,31 @@ def export_neural_net(self): try: self.fourier_nn.save_model(file) except Exception as e: - messagebox.showwarning( - "ERROR - Can't Save Model", f"{e}") + messagebox.showwarning("ERROR - Can't Save Model", f"{e}") else: messagebox.showwarning( - "File already Exists", f"The selected filename {name} already exists.") + "File already Exists", + f"The selected filename {name} already exists.", + ) def load_neural_net(self): print("load_neural_net") - filetypes = (('Torch Model File', '*.pth'), - ('All files', '*.*')) + filetypes = (("Torch Model File", "*.pth"), ("All files", "*.*")) filename = filedialog.askopenfilename( - title='Open a file', initialdir='.', filetypes=filetypes, parent=self) + title="Open a file", initialdir=".", filetypes=filetypes, parent=self + ) if os.path.exists(filename): if not self.fourier_nn: self.fourier_nn = FourierNN( - lock=self.lock, data=None, stdout_queue=self.std_queue) + lock=self.lock, data=None, stdout_queue=self.std_queue + ) self.fourier_nn.load_new_model_from_file(filename) - name = os.path.basename(filename).split('.')[0] - self.graph.draw_extern_graph_from_func( - self.fourier_nn.predict, name) + name = os.path.basename(filename).split(".")[0] + self.graph.draw_extern_graph_from_func(self.fourier_nn.predict, name) print(name) - self.synth = Synth2(self.fourier_nn, self.std_queue, - self.synth_gui.get_port_name()) + self.synth = Synth2( + self.fourier_nn, self.std_queue, self.synth_gui.get_port_name() + ) # self.fourier_nn.update_data( # data=self.graph.get_graph(name=name)[0]) @@ -461,18 +517,25 @@ def load_neural_net(self): def draw_graph_from_func(self, *args, **kwargs): print("draw_graph_from_func:", self.combo_selected_value.get()) self.graph.plot_function( - predefined_functions_dict[self.combo_selected_value.get()], overwrite=True) + predefined_functions_dict[self.combo_selected_value.get()], overwrite=True + ) def update_frourier_params(self, key, value): if not self.fourier_nn: # print(self.std_queue) - self.fourier_nn = FourierNN( - lock=self.lock, stdout_queue=self.std_queue) + self.fourier_nn = FourierNN(lock=self.lock, stdout_queue=self.std_queue) if not self.trainings_process and not self.block_training: self.fourier_nn.update_attribs(**{key: value}) return True return False + def play_example(self): + print("Not Implemented Yet") + pass + # path = os.path.join(os.path.dirname(__file__), "fuer_elise.py") + # subprocess.Popen(["python", path]) + + # for "invalid command" in the tk.TK().after() function when programm gets closed # def start_server(): # global window @@ -506,7 +569,7 @@ def main(): # global state, window # threading.Thread(target=start_server, daemon=True).start() - os.environ['HAS_RUN_INIT'] = 'True' + os.environ["HAS_RUN_INIT"] = "True" multiprocessing.set_start_method("spawn") with multiprocessing.Manager() as manager: std_write = copy.copy(sys.stdout.write) diff --git a/pythonaisynth/music.py b/pythonaisynth/music.py index 1ee854a..1fd02c6 100644 --- a/pythonaisynth/music.py +++ b/pythonaisynth/music.py @@ -15,6 +15,7 @@ def musik_from_file(fourier_nn: FourierNN): import sounddevice as sd import pretty_midi + midi_file = filedialog.askopenfilename() if not midi_file: return @@ -32,7 +33,8 @@ def musik_from_file(fourier_nn: FourierNN): print(note_a) duration = note_a.end - note_a.start synthesized_note = fourier_nn.synthesize( - midi_note=note_a.pitch-12, duration=duration, sample_rate=44100) + midi_note=note_a.pitch - 12, duration=duration, sample_rate=44100 + ) print(synthesized_note.shape) note_list.append(synthesized_note) @@ -40,7 +42,7 @@ def musik_from_file(fourier_nn: FourierNN): # pause print("Pause") duration = abs(note_b.start - note_a.end) - synthesized_note = np.zeros((int(duration*44100), 1)) + synthesized_note = np.zeros((int(duration * 44100), 1)) print(synthesized_note.shape) note_list.append(synthesized_note) @@ -73,16 +75,17 @@ def apply_reverb(audio, decay=0.5, delay=0.02, fs=44100): reverb_audio = np.zeros_like(audio) for channel in range(audio.shape[1]): reverb_audio[:, channel] = scipy.signal.fftconvolve( - audio[:, channel], impulse_response[:, channel])[:len(audio)] + audio[:, channel], impulse_response[:, channel] + )[: len(audio)] return reverb_audio def apply_echo(audio, delay=0.2, decay=0.5, fs=44100): delay_samples = int(delay * fs) echo_audio = np.zeros((len(audio) + delay_samples)) - echo_audio[:len(audio)] = audio + echo_audio[: len(audio)] = audio echo_audio[delay_samples:] += decay * audio - echo_audio = echo_audio[:len(audio)] + echo_audio = echo_audio[: len(audio)] return echo_audio @@ -108,19 +111,22 @@ def apply_distortion(audio, gain=2.0, threshold=0.5): class ADSR: - def __init__(self, attack_time, decay_time, sustain_level, release_time, sample_rate): + def __init__( + self, attack_time, decay_time, sustain_level, release_time, sample_rate + ): self.attack_samples = int(attack_time * sample_rate) self.decay_samples = int(decay_time * sample_rate) self.ad_samples = self.attack_samples + self.decay_samples self.sustain_level = sustain_level self.release_samples = int(release_time * sample_rate) - self.ads_envelope = np.concatenate(( - np.linspace(0, 1, self.attack_samples), - np.linspace(1, self.sustain_level, self.decay_samples) - )) - self.r_envelope = np.linspace( - self.sustain_level, 0, self.release_samples) + self.ads_envelope = np.concatenate( + ( + np.linspace(0, 1, self.attack_samples), + np.linspace(1, self.sustain_level, self.decay_samples), + ) + ) + self.r_envelope = np.linspace(self.sustain_level, 0, self.release_samples) self._r_counter = [0 for _ in range(128)] self._ads_counter = [0 for _ in range(128)] @@ -142,10 +148,12 @@ def get_ads_envelope(self, note_num, frame): envelope = np.zeros(frame) if end > self.ad_samples: - envelope[:self.ad_samples - - start] = self.ads_envelope[start:self.ad_samples] - envelope[self.ad_samples - - start:] = np.ones(end - self.ad_samples)*self.sustain_level + envelope[: self.ad_samples - start] = self.ads_envelope[ + start : self.ad_samples + ] + envelope[self.ad_samples - start :] = ( + np.ones(end - self.ad_samples) * self.sustain_level + ) else: envelope[:] = self.ads_envelope[start:end] @@ -163,15 +171,16 @@ def get_r_envelope(self, note_num, frame): if end <= self.release_samples: envelope[:] = self.r_envelope[start:end] else: - envelope[:self.release_samples - - start] = self.r_envelope[start:self.release_samples] + envelope[: self.release_samples - start] = self.r_envelope[ + start : self.release_samples + ] # After release, the envelope is 0 - envelope[self.release_samples - start:] = 0 + envelope[self.release_samples - start :] = 0 return envelope class Echo_torch: - def __init__(self, sample_size, delay_time_ms, feedback, wet_dry_mix, device='cpu'): + def __init__(self, sample_size, delay_time_ms, feedback, wet_dry_mix, device="cpu"): self.sample_size = sample_size # Convert ms to samples (assuming 44.1 kHz sample rate) self.delay_time = int(delay_time_ms * 44.1) @@ -180,14 +189,14 @@ def __init__(self, sample_size, delay_time_ms, feedback, wet_dry_mix, device='cp self.device = device # Initialize the past buffer to store delayed samples - self.past = torch.zeros( - (self.delay_time + 1, sample_size), device=device) + self.past = torch.zeros((self.delay_time + 1, sample_size), device=device) def apply(self, sound): # Ensure sound is a tensor of shape (num_samples, sample_size) if sound.dim() != 2 or sound.size(1) != self.sample_size: raise ValueError( - "Input sound must be a 2D tensor with shape (num_samples, sample_size)") + "Input sound must be a 2D tensor with shape (num_samples, sample_size)" + ) # Create an output tensor output = torch.zeros_like(sound, device=self.device) @@ -197,12 +206,16 @@ def apply(self, sound): current_sample = sound[i] # Get the delayed sample from the past buffer - delayed_sample = self.past[-self.delay_time] if i >= self.delay_time else torch.zeros( - self.sample_size, device=self.device) + delayed_sample = ( + self.past[-self.delay_time] + if i >= self.delay_time + else torch.zeros(self.sample_size, device=self.device) + ) # Calculate the echo effect - echo_sample = (current_sample + delayed_sample * - self.feedback) * self.wet_dry_mix + echo_sample = ( + current_sample + delayed_sample * self.feedback + ) * self.wet_dry_mix # Store the current sample in the past buffer self.past = torch.roll(self.past, shifts=-1, dims=0) @@ -230,7 +243,8 @@ def apply(self, sound): # Ensure sound is a 2D array with shape (num_samples, sample_size) if sound.ndim != 2 or sound.shape[1] != self.sample_size: raise ValueError( - "Input sound must be a 2D array with shape (num_samples, sample_size)") + "Input sound must be a 2D array with shape (num_samples, sample_size)" + ) # Create an output array output = np.zeros_like(sound) @@ -246,8 +260,9 @@ def apply(self, sound): delayed_sample = np.zeros(self.sample_size) # Calculate the echo effect - echo_sample = (current_sample + delayed_sample * - self.feedback) * self.wet_dry_mix + echo_sample = ( + current_sample + delayed_sample * self.feedback + ) * self.wet_dry_mix # Store the current sample in the past buffer self.past = np.roll(self.past, shift=-1, axis=0) @@ -259,7 +274,7 @@ def apply(self, sound): return output -class Synth2(): +class Synth2: def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.stdout = stdout self.live_synth: Process = None @@ -268,11 +283,12 @@ def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.sample_rate = 44100 # Sample rate self.max_parralel_notes = 3 self.current_frame = 0 - t = np.array([ - utils.midi_to_freq(f) * - np.linspace(0, 2*np.pi, self.sample_rate) - for f in range(128) - ]) + t = np.array( + [ + utils.midi_to_freq(f) * np.linspace(0, 2 * np.pi, self.sample_rate) + for f in range(128) + ] + ) self.t_buffer = torch.tensor(t, dtype=torch.float32) print(self.t_buffer.shape) self.port_name = port_name @@ -308,8 +324,7 @@ def play_init_sound(self): # Concatenate the sounds to form "duuudldiiidub" audio = np.concatenate([sound1, sound2, sound3, sound4]) - output = np.array( - audio * 32767 / np.max(np.abs(audio)) / 2).astype(np.int16) + output = np.array(audio * 32767 / np.max(np.abs(audio)) / 2).astype(np.int16) sd.play(output, blocking=True) print("Ready") @@ -321,19 +336,16 @@ def live_synth_loop(self): p = pyaudio.PyAudio() CHUNK = 2048 # Increased chunk size - stream = p.open(format=pyaudio.paFloat32, - channels=1, - # frames_per_buffer=CHUNK, - rate=self.sample_rate, - output=True) + stream = p.open( + format=pyaudio.paFloat32, + channels=1, + # frames_per_buffer=CHUNK, + rate=self.sample_rate, + output=True, + ) current_frame = 0 cycle_frame = 0 - self.adsr_envelope = ADSR( - 0.1, - 0.1, - 0.75, - 0.2, - self.sample_rate) + self.adsr_envelope = ADSR(0.1, 0.1, 0.75, 0.2, self.sample_rate) notes = {} model = self.fourier_nn.current_model.to(self.fourier_nn.device) @@ -351,17 +363,21 @@ def live_synth_loop(self): # midi_event.type # midi_event.note # midi_event.velocity - if midi_event.type == 'note_on': # Note on - print("Note on", - midi_event.note, - utils.midi_to_freq(midi_event.note)) + if midi_event.type == "note_on": # Note on + print( + "Note on", + midi_event.note, + utils.midi_to_freq(midi_event.note), + ) notes[midi_event.note] = [True, midi_event.velocity] self.adsr_envelope.reset_note(midi_event.note) - elif midi_event.type == 'note_off': # Note off - print("Note off", - midi_event.note, - utils.midi_to_freq(midi_event.note)) + elif midi_event.type == "note_off": # Note off + print( + "Note off", + midi_event.note, + utils.midi_to_freq(midi_event.note), + ) if midi_event.note in notes: # del notes[midi_event.note] notes[midi_event.note][0] = False @@ -370,25 +386,30 @@ def live_synth_loop(self): print(f"available_buffer: {available_buffer}") # y = torch.zeros(size=(len(notes), available_buffer), # device=self.fourier_nn.device) - y = np.zeros((len(notes), available_buffer), - dtype=np.float32) + y = np.zeros((len(notes), available_buffer), dtype=np.float32) to_delete = [] for i, (note, data) in enumerate(notes.items()): with torch.no_grad(): x = utils.wrap_concat( - self.t_buffer[note], cycle_frame, cycle_frame + available_buffer).to(self.fourier_nn.device) + self.t_buffer[note], + cycle_frame, + cycle_frame + available_buffer, + ).to(self.fourier_nn.device) if data[0]: envelope = self.adsr_envelope.get_ads_envelope( - note, available_buffer) + note, available_buffer + ) else: envelope = self.adsr_envelope.get_r_envelope( - note, available_buffer) + note, available_buffer + ) if self.adsr_envelope.has_note_ended(note): to_delete.append(note) model_output = model(x.unsqueeze(1)) - y[i, :] = model_output.cpu().numpy().astype( - np.float32) * envelope + y[i, :] = ( + model_output.cpu().numpy().astype(np.float32) * envelope + ) # y[i, :] = model( # x.unsqueeze(1)).cpu().numpy().astype(np.float32) # * envelope # * (amplitude/127) # y[i, :] = np.sin( @@ -402,14 +423,15 @@ def live_synth_loop(self): audio_data = normalize(audio_data) audio_data *= 1 # oscilating_amplitude audio_data = np.clip(audio_data, -1, 1) - stream.write(audio_data.astype(np.float32), - available_buffer, - exception_on_underflow=True) + stream.write( + audio_data.astype(np.float32), + available_buffer, + exception_on_underflow=True, + ) # if cycle_frame <= 100: # print(f"available_buffer: {available_buffer}") - current_frame = (current_frame + available_buffer) - cycle_frame = (cycle_frame + available_buffer) %\ - self.sample_rate + current_frame = current_frame + available_buffer + cycle_frame = (cycle_frame + available_buffer) % self.sample_rate def run_live_synth(self): if not self.live_synth: @@ -435,7 +457,7 @@ def __setstate__(self, state): # Load the model from a file after deserialization self.__dict__.update(state) if self.stdout is not None: - if current_process().name != 'MainProcess': + if current_process().name != "MainProcess": sys.stdout = utils.QueueSTD_OUT(queue=self.stdout) @@ -499,8 +521,7 @@ def sum_signals_torch(signals): # for signal in signals]) # Normalize each signal - normalized_signals = torch.stack( - [sum_signals_torch(signal) for signal in signals]) + normalized_signals = torch.stack([sum_signals_torch(signal) for signal in signals]) # Sum the signals along dimension 0 summed_signal = torch.sum(normalized_signals, dim=0) diff --git a/pythonaisynth/predefined_functions.py b/pythonaisynth/predefined_functions.py index 2818a5d..99e4a9c 100644 --- a/pythonaisynth/predefined_functions.py +++ b/pythonaisynth/predefined_functions.py @@ -13,33 +13,39 @@ def funny2(x): def funny3(x): - return np.sin(np.cos(x) * np.maximum(0, x)) / np.cos(1 / (x+0.001)) + return np.sin(np.cos(x) * np.maximum(0, x)) / np.cos(1 / (x + 0.001)) def my_random(x): - x = x-np.pi + x = x - np.pi return np.sin(x * np.random.uniform(-1, 1, size=x.shape)) def my_complex_function(x): x = np.abs(x) # Ensure x is non-negative for relu - return np.where(x > 0, - np.sin(x) * (np.sin(np.tan(x) * x) / - np.cos(np.random.uniform(-1, 1, size=x.shape) * x)), - -np.sin(-x) * (np.sin(np.tan(-x) * -x) / np.cos(np.random.uniform(-1, 1, size=x.shape) * -x))) + return np.where( + x > 0, + np.sin(x) + * (np.sin(np.tan(x) * x) / np.cos(np.random.uniform(-1, 1, size=x.shape) * x)), + -np.sin(-x) + * ( + np.sin(np.tan(-x) * -x) + / np.cos(np.random.uniform(-1, 1, size=x.shape) * -x) + ), + ) def nice(x): x_greater_pi = False # x = utils.map_value(x, -np.pi, np.pi, 0, 2*np.pi) - if x >= 2*np.pi: + if x >= 2 * np.pi: x_greater_pi = True x = x - np.pi - if x > (np.pi/2): + if x > (np.pi / 2): y = np.sin(np.tan(x)) - elif 0 < x and x < (np.pi/2): + elif 0 < x and x < (np.pi / 2): y = np.cos(-np.tan(x)) - elif (-np.pi/2) < x and x < 0: + elif (-np.pi / 2) < x and x < 0: y = np.cos(np.tan(x)) else: y = np.sin(-np.tan(x)) @@ -53,10 +59,17 @@ def nice_2(x): x_greater_pi = x >= 2 * np.pi x = np.where(x_greater_pi, x - np.pi, x) - y = np.where(x > (np.pi / 2), np.sin(np.tan(x)), - np.where((0 < x) & (x < (np.pi / 2)), np.cos(-np.tan(x)), - np.where(((-np.pi / 2) < x) & (x < 0), np.cos(np.tan(x)), - np.sin(-np.tan(x))))) + y = np.where( + x > (np.pi / 2), + np.sin(np.tan(x)), + np.where( + (0 < x) & (x < (np.pi / 2)), + np.cos(-np.tan(x)), + np.where( + ((-np.pi / 2) < x) & (x < 0), np.cos(np.tan(x)), np.sin(-np.tan(x)) + ), + ), + ) y = np.where(x_greater_pi, -y, y) return y @@ -76,34 +89,43 @@ def my_generated_function(x): def extreme(x): - y = np.tile(np.array([-1, 1]), len(x)//2).flatten() + y = np.tile(np.array([-1, 1]), len(x) // 2).flatten() if len(y) < len(x): y = np.append(y, [y[-2]]) return y predefined_functions_dict = { - 'funny': funny, - 'funny2': funny2, - 'funny3': funny3, - 'random': my_random, - 'cool': my_complex_function, - 'bing': my_generated_function, - 'nice': nice_2, - 'extreme': extreme, - 'sin': np.sin, - 'cos': np.cos, - 'tan': np.tan, - 'relu': lambda x: np.maximum(0, x - np.pi), + "funny": funny, + "funny2": funny2, + "funny3": funny3, + "random": my_random, + "cool": my_complex_function, + "bing": my_generated_function, + "nice": nice_2, + "extreme": extreme, + "sin": np.sin, + "cos": np.cos, + "tan": np.tan, + "relu": lambda x: np.maximum(0, x - np.pi), # ELU approximation - 'elu': lambda x: np.where(x - np.pi > 0, x - np.pi, np.expm1(x - np.pi)), - 'linear': lambda x: x - np.pi, # Linear function - 'sigmoid': lambda x: 1 / (1 + np.exp(-(x - np.pi))), - 'exponential': lambda x: np.exp(x - np.pi), + "elu": lambda x: np.where(x - np.pi > 0, x - np.pi, np.expm1(x - np.pi)), + "linear": lambda x: x - np.pi, # Linear function + "sigmoid": lambda x: 1 / (1 + np.exp(-(x - np.pi))), + "exponential": lambda x: np.exp(x - np.pi), # SELU approximation - 'selu': lambda x: np.where(x - np.pi > 0, 1.0507 * (x - np.pi), 1.0507 * (np.exp(x - np.pi) - 1)), + "selu": lambda x: np.where( + x - np.pi > 0, 1.0507 * (x - np.pi), 1.0507 * (np.exp(x - np.pi) - 1) + ), # GELU approximation - 'gelu': lambda x: 0.5 * (x - np.pi) * (1 + np.tanh(np.sqrt(2 / np.pi) * ((x - np.pi) + 0.044715 * np.power((x - np.pi), 3)))) + "gelu": lambda x: 0.5 + * (x - np.pi) + * ( + 1 + + np.tanh( + np.sqrt(2 / np.pi) * ((x - np.pi) + 0.044715 * np.power((x - np.pi), 3)) + ) + ), } diff --git a/pythonaisynth/simple_input_dialog.py b/pythonaisynth/simple_input_dialog.py index 401aafa..68db31d 100644 --- a/pythonaisynth/simple_input_dialog.py +++ b/pythonaisynth/simple_input_dialog.py @@ -3,11 +3,11 @@ class EntryWithPlaceholder(tk.Entry): - def __init__(self, master=None, placeholder="PLACEHOLDER", color='grey'): + def __init__(self, master=None, placeholder="PLACEHOLDER", color="grey"): super().__init__(master) self.placeholder = placeholder self.placeholder_color = color - self.default_fg_color = self['fg'] + self.default_fg_color = self["fg"] self.bind("", self.foc_in) self.bind("", self.foc_out) @@ -16,12 +16,12 @@ def __init__(self, master=None, placeholder="PLACEHOLDER", color='grey'): def put_placeholder(self): self.insert(0, self.placeholder) - self['fg'] = self.placeholder_color + self["fg"] = self.placeholder_color def foc_in(self, *args): - if self['fg'] == self.placeholder_color: - self.delete('0', 'end') - self['fg'] = self.default_fg_color + if self["fg"] == self.placeholder_color: + self.delete("0", "end") + self["fg"] = self.default_fg_color def foc_out(self, *args): if not self.get(): @@ -29,7 +29,16 @@ def foc_out(self, *args): class askStringAndSelectionDialog(simpledialog.Dialog): - def __init__(self, parent, title=None, label_str='', default_str='', label_select='', default_select='', values_to_select_from=[]): + def __init__( + self, + parent, + title=None, + label_str="", + default_str="", + label_select="", + default_select="", + values_to_select_from=[], + ): self.label_str = label_str self.default_str = default_str self.label_select = label_select diff --git a/pythonaisynth/std_redirect.py b/pythonaisynth/std_redirect.py index 6c7f983..7a8881c 100644 --- a/pythonaisynth/std_redirect.py +++ b/pythonaisynth/std_redirect.py @@ -14,15 +14,12 @@ class RedirectedOutputFrame(tk.Frame): def __init__(self, master=None, std_queue=None): super().__init__(master) - self.textbox = scrolledtext.ScrolledText( - self, height=10, font=("TkFixedFont")) - self.textbox.configure( - background=master.style.lookup('TFrame', 'background')) - self.textbox.configure( - foreground=master.style.lookup('TFrame', 'foreground')) + self.textbox = scrolledtext.ScrolledText(self, height=10, font=("TkFixedFont")) + self.textbox.configure(background=master.style.lookup("TFrame", "background")) + self.textbox.configure(foreground=master.style.lookup("TFrame", "foreground")) self.textbox.pack(fill=tk.BOTH, expand=True) - self.textbox.configure(state='disabled') - self.textbox.configure(wrap='word') + self.textbox.configure(state="disabled") + self.textbox.configure(wrap="word") self.textbox.bind("", self.on_resize) self.queue: Queue = Queue(-1) if not std_queue else std_queue self.old_stdout = sys.stdout @@ -32,52 +29,71 @@ def __init__(self, master=None, std_queue=None): tk_after_errorless(self, 100, self.check_queue) # dictionaries to replace formatting code with tags - self.ansi_font_format = {1: 'bold', - 3: 'italic', 4: 'underline', 9: 'overstrike'} - self.ansi_font_reset = {21: 'bold', 23: 'italic', - 24: 'underline', 29: 'overstrike'} + self.ansi_font_format = { + 1: "bold", + 3: "italic", + 4: "underline", + 9: "overstrike", + } + self.ansi_font_reset = { + 21: "bold", + 23: "italic", + 24: "underline", + 29: "overstrike", + } # tag configuration - self.textbox.tag_configure('bold', font=('', 9, 'bold')) - self.textbox.tag_configure('italic', font=('', 9, 'italic')) - self.textbox.tag_configure('underline', underline=True) - self.textbox.tag_configure('overstrike', overstrike=True) + self.textbox.tag_configure("bold", font=("", 9, "bold")) + self.textbox.tag_configure("italic", font=("", 9, "italic")) + self.textbox.tag_configure("underline", underline=True) + self.textbox.tag_configure("overstrike", overstrike=True) # dictionaries to replace color code with tags - self.ansi_color_fg = {39: 'foreground default'} - self.ansi_color_bg = {49: 'background default'} + self.ansi_color_fg = {39: "foreground default"} + self.ansi_color_bg = {49: "background default"} - self.textbox.tag_configure( - 'foreground default', foreground=self.textbox["fg"]) - self.textbox.tag_configure( - 'background default', background=self.textbox["bg"]) + self.textbox.tag_configure("foreground default", foreground=self.textbox["fg"]) + self.textbox.tag_configure("background default", background=self.textbox["bg"]) self.ansi_colors_dark = [ - 'black', 'red', 'green', 'yellow', 'royal blue', 'magenta', 'cyan', 'light gray'] - self.ansi_colors_light = ['dark gray', 'tomato', 'light green', - 'light goldenrod', 'light blue', 'pink', 'light cyan', 'white'] - - for i, (col_dark, col_light) in enumerate(zip(self.ansi_colors_dark, self.ansi_colors_light)): - self.ansi_color_fg[30 + i] = 'foreground ' + col_dark - self.ansi_color_fg[90 + i] = 'foreground ' + col_light - self.ansi_color_bg[40 + i] = 'background ' + col_dark - self.ansi_color_bg[100 + i] = 'background ' + col_light + "black", + "red", + "green", + "yellow", + "royal blue", + "magenta", + "cyan", + "light gray", + ] + self.ansi_colors_light = [ + "dark gray", + "tomato", + "light green", + "light goldenrod", + "light blue", + "pink", + "light cyan", + "white", + ] + + for i, (col_dark, col_light) in enumerate( + zip(self.ansi_colors_dark, self.ansi_colors_light) + ): + self.ansi_color_fg[30 + i] = "foreground " + col_dark + self.ansi_color_fg[90 + i] = "foreground " + col_light + self.ansi_color_bg[40 + i] = "background " + col_dark + self.ansi_color_bg[100 + i] = "background " + col_light # tag configuration - self.textbox.tag_configure( - 'foreground ' + col_dark, foreground=col_dark) - self.textbox.tag_configure( - 'background ' + col_dark, background=col_dark) - self.textbox.tag_configure( - 'foreground ' + col_light, foreground=col_light) - self.textbox.tag_configure( - 'background ' + col_light, background=col_light) + self.textbox.tag_configure("foreground " + col_dark, foreground=col_dark) + self.textbox.tag_configure("background " + col_dark, background=col_dark) + self.textbox.tag_configure("foreground " + col_light, foreground=col_light) + self.textbox.tag_configure("background " + col_light, background=col_light) # regular expression to find ansi codes in string self.ansi_regexp = re.compile(r"\x1b\[((\d+;)*\d+)m") def insert_ansi(self, txt, index="insert"): - first_line, first_char = map( - int, str(self.textbox.index(index)).split(".")) + first_line, first_char = map(int, str(self.textbox.index(index)).split(".")) if index == "end": first_line -= 1 @@ -85,7 +101,7 @@ def insert_ansi(self, txt, index="insert"): if not lines: return # insert text without ansi codes - self.textbox.insert(index, self.ansi_regexp.sub('', txt)) + self.textbox.insert(index, self.ansi_regexp.sub("", txt)) # find all ansi codes in txt and apply corresponding tags opened_tags = {} # we need to keep track of the opened tags to be able to do # self.textbox.tag_add(tag, start, end) when we reach a "closing" ansi code @@ -98,7 +114,7 @@ def apply_formatting(code, code_index): elif code in self.ansi_font_format: # open font formatting tag tag = self.ansi_font_format[code] opened_tags[tag] = code_index - elif code in self.ansi_font_reset: # close font formatting tag + elif code in self.ansi_font_reset: # close font formatting tag tag = self.ansi_font_reset[code] if tag in opened_tags: self.textbox.tag_add(tag, opened_tags[tag], code_index) @@ -106,14 +122,14 @@ def apply_formatting(code, code_index): # open foreground color tag (and close previously opened one if any) elif code in self.ansi_color_fg: for tag in list(opened_tags): - if tag.startswith('foreground'): + if tag.startswith("foreground"): self.textbox.tag_add(tag, opened_tags[tag], code_index) del opened_tags[tag] opened_tags[self.ansi_color_fg[code]] = code_index # open background color tag (and close previously opened one if any) elif code in self.ansi_color_bg: for tag in list(opened_tags): - if tag.startswith('background'): + if tag.startswith("background"): self.textbox.tag_add(tag, opened_tags[tag], code_index) del opened_tags[tag] opened_tags[self.ansi_color_bg[code]] = code_index @@ -123,43 +139,45 @@ def find_ansi(line_txt, line_nb, char_offset): delta = -char_offset # (initial offset due to insertion position if first line + extra offset due to deletion of ansi codes) for match in self.ansi_regexp.finditer(line_txt): - codes = [int(c) for c in match.groups()[0].split(';')] + codes = [int(c) for c in match.groups()[0].split(";")] start, end = match.span() for code in codes: - apply_formatting(code, "{}.{}".format( - line_nb, start - delta)) - delta += end - start # take into account offset due to deletion of ansi code + apply_formatting(code, "{}.{}".format(line_nb, start - delta)) + delta += ( + end - start + ) # take into account offset due to deletion of ansi code # first line, with initial offset due to insertion position find_ansi(lines[0], first_line, first_char) for line_nb, line in enumerate(lines[1:], first_line + 1): - find_ansi(line, line_nb, 0) # next lines, no offset + find_ansi(line, line_nb, 0) # next lines, no offset # close still opened tag for tag, start in opened_tags.items(): self.textbox.tag_add(tag, start, "end") def redirector(self, inputStr): - self.textbox.configure(state='normal') + self.textbox.configure(state="normal") self.textbox.mark_set("insert", "end") - while '\b' in inputStr: - bs_index = inputStr.index('\b') + while "\b" in inputStr: + bs_index = inputStr.index("\b") if bs_index == 0: # Delete the character before the current 'insert' position in the Text widget self.textbox.delete("insert-2c") inputStr = inputStr[1:] else: # Remove the character before the backspace and the backspace itself - inputStr = inputStr[:bs_index-1] + inputStr[bs_index+1:] + inputStr = inputStr[: bs_index - 1] + inputStr[bs_index + 1 :] self.insert_ansi(inputStr, tk.INSERT) # self.textbox.insert(tk.INSERT, inputStr) - self.textbox.configure(state='disabled') + self.textbox.configure(state="disabled") self.textbox.see(tk.END) # Auto-scroll to the end self.old_stdout.write(inputStr) def on_resize(self, event): width = self.textbox.winfo_width() font_width = self.textbox.tk.call( - "font", "measure", self.textbox["font"], "-displayof", self.textbox, "0") + "font", "measure", self.textbox["font"], "-displayof", self.textbox, "0" + ) sys.stdout.write = self.redirector def check_queue(self): @@ -176,8 +194,9 @@ def check_queue(self): except BrokenPipeError: return # delay = 100 - delay = int(500 if self.queue.empty() - else min(5, 100/min(1, self.queue.qsize()/10))) + delay = int( + 500 if self.queue.empty() else min(5, 100 / min(1, self.queue.qsize() / 10)) + ) # self.old_stdout.write(f'Delay: {delay}\n') tk_after_errorless(self.master, delay, self.check_queue) diff --git a/pythonaisynth/synth_gui.py b/pythonaisynth/synth_gui.py index 8316808..a7d48d4 100644 --- a/pythonaisynth/synth_gui.py +++ b/pythonaisynth/synth_gui.py @@ -9,22 +9,21 @@ def __init__(self, parent=None, **kwargs): self.columnconfigure(0, weight=1) self.columnconfigure(1, weight=1) - - param="MIDI PORT" + param = "MIDI PORT" label = ttk.Label(self, text=param) - label.grid(row=0, column=0, sticky='NSW') - options=mido.get_input_names() - self.midi_port_var=tk.StringVar(self, options[0]) + label.grid(row=0, column=0, sticky="NSW") + options = mido.get_input_names() + self.midi_port_var = tk.StringVar(self, options[0]) self.midi_port_option_menu = ttk.OptionMenu( - self, self.midi_port_var, options[0], *(options)) - self.midi_port_option_menu.grid(row=0, column=1, sticky='NSE') + self, self.midi_port_var, options[0], *(options) + ) + self.midi_port_option_menu.grid(row=0, column=1, sticky="NSE") # self.midi_port_var.trace_add('write', lambda *args, key=param, # var=self.midi_port_var: self.on_change(key, var.get(), var)) def get_port_name(self): return self.midi_port_var.get() - - + # def on_change(self, name, value, var): # if hasattr(self, 'on_change_callback'): # if self.on_change_callback: @@ -39,4 +38,3 @@ def get_port_name(self): # self.on_change_callback = func # self.previous_values = {param: var.get() # for param, var in self.params.items()} - diff --git a/pythonaisynth/utils.py b/pythonaisynth/utils.py index 54dac13..b1d4755 100644 --- a/pythonaisynth/utils.py +++ b/pythonaisynth/utils.py @@ -28,6 +28,28 @@ def write(self, msg): except EOFError: exit() + def flush(self): + pass + + def fileno(self): + raise IOError("This TextIO does not have a file descriptor.") + + def isatty(self): + return sys.stdout.isatty() + + def readable(self): + return True + + def writable(self): + return True + + def seekable(self): + return False + + def writelines(self, lines): + for line in lines: + self.write(line) + def DIE(process: Process, join_timeout=30, term_iterations=50): if process: @@ -65,19 +87,19 @@ def calculate_max_batch_size(num_features, dtype=np.float32, memory_buffer=0.1): def messure_time_taken(name, func, *args, wait=True, **kwargs): - if not hasattr(messure_time_taken, 'time_taken'): + if not hasattr(messure_time_taken, "time_taken"): messure_time_taken.time_taken = {} if name not in messure_time_taken.time_taken: messure_time_taken.time_taken[name] = 0 timestamp = time.perf_counter_ns() result = func(*args, **kwargs) - time_taken = (time.perf_counter_ns()-timestamp)/1_000_000 # _000 - print( - f"Time taken for {name}: {time_taken:6.6f}ms") + time_taken = (time.perf_counter_ns() - timestamp) / 1_000_000 # _000 + print(f"Time taken for {name}: {time_taken:6.6f}ms") if wait: input("paused") messure_time_taken.time_taken[name] = max( - messure_time_taken.time_taken[name], time_taken) + messure_time_taken.time_taken[name], time_taken + ) return result @@ -91,13 +113,13 @@ def midi_to_freq(midi_note): def pair_iterator(lst): for i in range(len(lst) - 1): - yield lst[i], lst[i+1] + yield lst[i], lst[i + 1] def note_iterator(lst): - for i in range(len(lst)-1): - yield lst[i], lst[i+1] - yield lst[len(lst)-1], None + for i in range(len(lst) - 1): + yield lst[i], lst[i + 1] + yield lst[len(lst) - 1], None def find_two_closest(num_list, x): @@ -108,7 +130,7 @@ def find_two_closest(num_list, x): return sorted_list[:2] -@ njit +@njit def interpolate(point1, point2, t=0.5): """ Interpolate between two 2D points. @@ -130,7 +152,7 @@ def interpolate(point1, point2, t=0.5): return (x, y) -@ njit +@njit def interpolate_vectorized(point1, point2, t_values): """ Vectorized interpolation between two 2D points. @@ -183,8 +205,8 @@ def map_value_old(x, a1, a2, b1, b2): def random_hex_color(): # Generate a random color in hexadecimal format - color = '{:06x}'.format(random.randint(0x111111, 0xFFFFFF)) - return '#' + color + color = "{:06x}".format(random.randint(0x111111, 0xFFFFFF)) + return "#" + color def random_color(): @@ -193,7 +215,7 @@ def random_color(): def get_prepared_random_color(maxColors=None): - if not hasattr(get_prepared_random_color, 'colors'): + if not hasattr(get_prepared_random_color, "colors"): get_prepared_random_color.colors = [] for i in range(maxColors or 100): while True: @@ -222,22 +244,24 @@ def exec_with_queue_stdout(func: Callable, *args, queue: Queue): def calculate_peak_frequency(signal): - np.savetxt('tmp/why_do_i_need_this_array.txt', signal) - test_data = np.loadtxt('tmp/why_do_i_need_this_array.txt') + np.savetxt("tmp/why_do_i_need_this_array.txt", signal) + test_data = np.loadtxt("tmp/why_do_i_need_this_array.txt") test_data = test_data - np.mean(test_data) # Perform the Discrete Sine Transform (DST) - transformed_signal = dst(test_data, type=4, norm='ortho') + transformed_signal = dst(test_data, type=4, norm="ortho") peak_index = np.argmax(np.abs(transformed_signal)) - peak_freq = (peak_index+1)/2 + peak_freq = (peak_index + 1) / 2 return peak_freq timers = [] -def run_after_ms(delay_ms: int, func: Callable[..., Any], *args: Any, **kwargs: Any) -> None: +def run_after_ms( + delay_ms: int, func: Callable[..., Any], *args: Any, **kwargs: Any +) -> None: """ Schedules a function to be run after a specified delay in milliseconds. @@ -267,7 +291,9 @@ def cleanup_timers(): atexit.register(cleanup_timers) -def tk_after_errorless(master: tk.Tk, delay_ms: int, func: Callable[..., Any], *args: Any): +def tk_after_errorless( + master: tk.Tk, delay_ms: int, func: Callable[..., Any], *args: Any +): def safe_call(master: tk.Tk, func: Callable[..., Any], *args: Any): if master.winfo_exists(): func(*args) @@ -296,7 +322,9 @@ def get_loss_function(loss_name, **kwargs): raise ValueError(f"Loss function '{loss_name}' not found in torch.nn") -def linear_interpolation(data, target_length, device='cpu') -> Tuple[torch.Tensor, torch.Tensor]: +def linear_interpolation( + data, target_length, device="cpu" +) -> Tuple[torch.Tensor, torch.Tensor]: # Convert data to a tensor and move to the specified device data = np.array(data) data_tensor = torch.tensor(data, dtype=torch.float32).to(device) @@ -306,16 +334,22 @@ def linear_interpolation(data, target_length, device='cpu') -> Tuple[torch.Tenso y_values = data_tensor[:, 1] # Generate new x values - new_x_values = torch.linspace( - x_values.min(), x_values.max(), target_length).to(device) + new_x_values = torch.linspace(x_values.min(), x_values.max(), target_length).to( + device + ) # Perform linear interpolation - new_y_values = F.interpolate(y_values.unsqueeze(0).unsqueeze(0), - size=new_x_values.size(0), - mode='linear', - align_corners=True).squeeze() + new_y_values = F.interpolate( + y_values.unsqueeze(0).unsqueeze(0), + size=new_x_values.size(0), + mode="linear", + align_corners=True, + ).squeeze() - return (new_x_values.cpu(), new_y_values.cpu(),) + return ( + new_x_values.cpu(), + new_y_values.cpu(), + ) def center_and_scale(arr): @@ -374,7 +408,8 @@ def timed_generator(iterable): yield item end_time = time.time() print( - f"Time taken for this iteration: {((end_time - start_time)/1_000_000_000):10.9f}s") + f"Time taken for this iteration: {((end_time - start_time)/1_000_000_000):10.9f}s" + ) def timed_loop(condition): @@ -401,9 +436,11 @@ def timed_loop(condition): iteration_count += 1 if total_time >= 100_000_000: # 100 milliseconds - avg_time = (total_time / iteration_count) / \ - 1_000_000 # Convert to milliseconds + avg_time = ( + total_time / iteration_count + ) / 1_000_000 # Convert to milliseconds max_time = max_val / 1_000_000 # Convert to milliseconds print( - f"Time taken for this iteration: {avg_time:10.9f} ms, max_val: {max_time:10.3f} ms") + f"Time taken for this iteration: {avg_time:10.9f} ms, max_val: {max_time:10.3f} ms" + ) total_time, iteration_count = 0, 0 # Reset for the next period From 7aac8e66a239aa7a25ae2f2411a76cf6fe3b93f0 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 25 Feb 2025 16:07:22 +0100 Subject: [PATCH 61/67] test contex fixed --- tests/context.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/context.py b/tests/context.py index aa4aa5d..9924b48 100644 --- a/tests/context.py +++ b/tests/context.py @@ -1,10 +1,7 @@ import os import sys -# autopep8: off -path=os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) +path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) sys.path.insert(0, path) -import src -import main -# autopep8: on \ No newline at end of file +import pythonaisynth From 86e47e3ff4b7aee20493c552ac8cc444d01c1e71 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Tue, 25 Feb 2025 16:40:56 +0100 Subject: [PATCH 62/67] better piano and fuer_elise --- audio_stuff/midi/fuer_elise.py | 40 ------------ audio_stuff/midi/midi_piano.py | 116 ++++++++++++++++++++------------- pythonaisynth/fuer_elise.py | 4 +- 3 files changed, 73 insertions(+), 87 deletions(-) delete mode 100644 audio_stuff/midi/fuer_elise.py diff --git a/audio_stuff/midi/fuer_elise.py b/audio_stuff/midi/fuer_elise.py deleted file mode 100644 index 4c80687..0000000 --- a/audio_stuff/midi/fuer_elise.py +++ /dev/null @@ -1,40 +0,0 @@ -import mido -import time - -# Define the MIDI output port -output = mido.open_output('LoopBe Internal MIDI 1') - -# Define the notes for "Für Elise" -fur_elise = [ - ('E5', 0.5), ('D#5', 0.5), ('E5', 0.5), ('D#5', 0.5), - ('E5', 0.5), ('B4', 0.5), ('D5', 0.5), ('C5', 0.5), - ('A4', 1.5), ('C4', 0.5), ('E4', 0.5), ('A4', 0.5), - ('B4', 1.5), ('E4', 0.5), ('G#4', 0.5), ('B4', 0.5), - ('C5', 1.5), ('E4', 0.5), ('C4', 0.5), ('E4', 0.5), - ('A4', 0.5), ('B4', 1.5), ('E4', 0.5), ('G#4', 0.5), - ('B4', 0.5), ('C5', 1.5) -] - -# Define a function to convert note names to MIDI note numbers - - -def note_to_midi(note): - note_map = {'C': 0, 'C#': 1, 'D': 2, 'D#': 3, 'E': 4, 'F': 5, - 'F#': 6, 'G': 7, 'G#': 8, 'A': 9, 'A#': 10, 'B': 11} - octave = int(note[-1]) - key = note[:-1] - return 12 * (octave + 1) + note_map[key] - - -try: - # Stream the notes over MIDI in a loop - while True: - for note, duration in fur_elise: - midi_note = note_to_midi(note) - output.send(mido.Message('note_on', note=midi_note, velocity=64)) - time.sleep(duration/2) - output.send(mido.Message('note_off', note=midi_note, velocity=64)) -except: - output.panic() -# Close the MIDI output port (this line will never be reached due to the infinite loop) -# output.close() diff --git a/audio_stuff/midi/midi_piano.py b/audio_stuff/midi/midi_piano.py index 27bbae4..8d214b4 100644 --- a/audio_stuff/midi/midi_piano.py +++ b/audio_stuff/midi/midi_piano.py @@ -22,17 +22,17 @@ def changePort(event): # Create a dropdown menu to select the MIDI port -port_menu = tk.OptionMenu(window, selected_port, * - mido.get_output_names(), command=changePort) +port_menu = tk.OptionMenu( + window, selected_port, *mido.get_output_names(), command=changePort +) port_menu.pack() # Create a variable to store the selected MIDI channel selected_channel = tk.StringVar(window) -selected_channel.set('1') # default value +selected_channel.set("1") # default value # Create a dropdown menu to select the MIDI channel -channel_menu = tk.OptionMenu( - window, selected_channel, *[str(i) for i in range(1, 17)]) +channel_menu = tk.OptionMenu(window, selected_channel, *[str(i) for i in range(1, 17)]) channel_menu.pack() # Create a variable to store the selected octave @@ -40,29 +40,31 @@ def changePort(event): selected_octave.set(4) # default value # Create a slider to select the octave -octave_slider = tk.Scale(window, from_=0, to=8, orient='horizontal', - variable=selected_octave, label='Octave') +octave_slider = tk.Scale( + window, from_=0, to=8, orient="horizontal", variable=selected_octave, label="Octave" +) octave_slider.pack() # Function to send MIDI messages -note_states = {i: False for i in range(octaves_to_display*12)} +note_states = {i: False for i in range(octaves_to_display * 12)} -def send_midi_note(note, velocity=127, type='note_on'): +def send_midi_note(note, velocity=127, type="note_on"): global note_states channel = int(selected_channel.get()) - 1 - msg = mido.Message(type, note=note + selected_octave.get() - * 12, velocity=velocity, channel=channel) - if type == 'note_on': + msg = mido.Message( + type, note=note + selected_octave.get() * 12, velocity=velocity, channel=channel + ) + if type == "note_on": # If the note is already on, don't send another note_on message if note_states[note]: return else: note_states[note] = True port.send(msg) - elif type == 'note_off': + elif type == "note_off": note_states[note] = False port.send(msg) # window.after(1*10**3, lambda msg=msg: port.send(msg)) @@ -80,59 +82,81 @@ def send_midi_note(note, velocity=127, type='note_on'): black_key_note = ["C#", "D#", "F#", "G#", "A#"] white_keys_bindings_per_octaves = [ - ['a', 's', 'd', 'f', 'g', 'h', 'j'], ['k', 'l', ';', "'", 'z', 'x', 'c']] -black_keys_bindings_per_octaves = [ - ['w', 'e', 'r', 't', 'y'], ['u', 'i', 'o', 'p', '[']] + ["a", "s", "d", "f", "g", "h", "j"], + ["k", "l", ";", "'", "z", "x", "c"], +] +black_keys_bindings_per_octaves = [["w", "e", "r", "t", "y"], ["u", "i", "o", "p", "["]] current_locale = locale.getlocale() # If the current locale is German, adjust the key bindings if "de_DE" in current_locale: - white_keys_bindings_per_octaves = [['a', 's', 'd', 'f', 'g', 'h', 'j'], [ - 'k', 'l', 'odiaeresis', 'adiaeresis', 'y', 'x', 'c']] + white_keys_bindings_per_octaves = [ + ["a", "s", "d", "f", "g", "h", "j"], + ["k", "l", "odiaeresis", "adiaeresis", "y", "x", "c"], + ] black_keys_bindings_per_octaves = [ - ['w', 'e', 'r', 't', 'z'], ['u', 'i', 'o', 'p', 'udiaeresis']] + ["w", "e", "r", "t", "z"], + ["u", "i", "o", "p", "udiaeresis"], + ] for a in range(octaves_to_display): - if a < len(white_keys_bindings_per_octaves) or a < len(black_keys_bindings_per_octaves): + if a < len(white_keys_bindings_per_octaves) or a < len( + black_keys_bindings_per_octaves + ): white_keys_bindings = white_keys_bindings_per_octaves[a] black_keys_bindings = black_keys_bindings_per_octaves[a] else: - white_keys_bindings = [" "]*len(white_key_note) - black_keys_bindings = [" "]*len(black_key_note) + white_keys_bindings = [" "] * len(white_key_note) + black_keys_bindings = [" "] * len(black_key_note) for i in range(7): button = tk.Button( - keys_frame, text=f'{white_key_note[i]}\n|{white_keys_bindings[i].replace("odiaeresis", "ö").replace("adiaeresis", "ä")}|', bg='white', width=2, height=6) - button.grid(row=0, column=white_keys[i]+a*12) - - def press(event, i=i, a=a): return send_midi_note( - white_keys[i]+a*12, type='note_on') - - def release(event, i=i, a=a): return send_midi_note( - white_keys[i]+a*12, type='note_off') - button.bind('', press) - button.bind('', release) + keys_frame, + text=f'{white_key_note[i]}\n|{white_keys_bindings[i].replace("odiaeresis", "ö").replace("adiaeresis", "ä")}|', + bg="white", + width=2, + height=6, + ) + button.grid(row=0, column=white_keys[i] + a * 12) + + def press(event, i=i, a=a): + return send_midi_note(white_keys[i] + a * 12, type="note_on") + + def release(event, i=i, a=a): + return send_midi_note(white_keys[i] + a * 12, type="note_off") + + button.bind("", press) + button.bind("", release) # Bind the button to a key press event if white_keys_bindings[i] != " ": - window.bind('' % white_keys_bindings[i], press) - window.bind('' % white_keys_bindings[i], release) + window.bind("" % white_keys_bindings[i], press) + window.bind("" % white_keys_bindings[i], release) for i in range(5): button = tk.Button( - keys_frame, text=f'{black_key_note[i]}\n|{black_keys_bindings[i].replace("udiaeresis", "ü")}|', fg='white', bg='black', width=1, height=4) - button.grid(row=0, column=black_keys[i]+a*12, sticky='n') - - def press(event, i=i, a=a): return send_midi_note( - black_keys[i]+a*12, type='note_on') - - def release(event, i=i, a=a): return send_midi_note( - black_keys[i]+a*12, type='note_off') - button.bind('', press) - button.bind('', release) + keys_frame, + text=f'{black_key_note[i]}\n|{black_keys_bindings[i].replace("udiaeresis", "ü")}|', + fg="white", + bg="black", + width=1, + height=4, + ) + button.grid(row=0, column=black_keys[i] + a * 12, sticky="n") + + def press(event, button=button, i=i, a=a): + button.config(relief="sunken") + return send_midi_note(black_keys[i] + a * 12, type="note_on") + + def release(event, button=button, i=i, a=a): + button.config(relief="raised") + return send_midi_note(black_keys[i] + a * 12, type="note_off") + + button.bind("", press) + button.bind("", release) # Bind the button to a key press event if white_keys_bindings[i] != " ": - window.bind('' % black_keys_bindings[i], press) - window.bind('' % black_keys_bindings[i], release) + window.bind("" % black_keys_bindings[i], press) + window.bind("" % black_keys_bindings[i], release) # Run the Tkinter event loop diff --git a/pythonaisynth/fuer_elise.py b/pythonaisynth/fuer_elise.py index c772cb5..2b4f849 100644 --- a/pythonaisynth/fuer_elise.py +++ b/pythonaisynth/fuer_elise.py @@ -1,7 +1,6 @@ import mido import time - # Define the MIDI output port output = mido.open_output("LoopBe Internal MIDI 1") @@ -60,13 +59,16 @@ def note_to_midi(note): try: # Stream the notes over MIDI in a loop + last_note = None while True: for note, duration in fur_elise: midi_note = note_to_midi(note) + last_note = midi_note output.send(mido.Message("note_on", note=midi_note, velocity=64)) time.sleep(duration / 2) output.send(mido.Message("note_off", note=midi_note, velocity=64)) except: output.panic() +output.send(mido.Message("note_off", note=last_note, velocity=64)) # Close the MIDI output port (this line will never be reached due to the infinite loop) # output.close() From eacc43916be15ef4cf4d44c189e1652d3ac997a0 Mon Sep 17 00:00:00 2001 From: Thetecknicker <106349149+thetechnicker@users.noreply.github.com> Date: Wed, 26 Feb 2025 14:00:27 +0100 Subject: [PATCH 63/67] idk --- pythonaisynth/fuer_elise.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pythonaisynth/fuer_elise.py b/pythonaisynth/fuer_elise.py index 2b4f849..17389a3 100644 --- a/pythonaisynth/fuer_elise.py +++ b/pythonaisynth/fuer_elise.py @@ -1,8 +1,17 @@ import mido import time +import os # Define the MIDI output port -output = mido.open_output("LoopBe Internal MIDI 1") +if os.name == "nt": + output = mido.open_output("LoopBe Internal MIDI 1") +else: + try: + output = mido.open_output("Midi Through Port-0") + except: + print("no midi loopback found") + exit() + # Define the notes for "Für Elise" fur_elise = [ From ff489e44ecc2f49d0dad78c3461148566450c3dc Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Mon, 24 Mar 2025 14:19:36 +0100 Subject: [PATCH 64/67] idk --- pythonaisynth/__main__.py | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 pythonaisynth/__main__.py diff --git a/pythonaisynth/__main__.py b/pythonaisynth/__main__.py new file mode 100644 index 0000000..40e2b01 --- /dev/null +++ b/pythonaisynth/__main__.py @@ -0,0 +1,4 @@ +from .main import main + +if __name__ == "__main__": + main() From fb5deeeb46686a52c02df9b98cf6d54885292484 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Mon, 24 Mar 2025 15:06:02 +0100 Subject: [PATCH 65/67] working record function --- pythonaisynth/_version.py | 2 +- pythonaisynth/main.py | 21 +++++++++++++++ pythonaisynth/music.py | 56 ++++++++++++++++++++++++++++++++++----- 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/pythonaisynth/_version.py b/pythonaisynth/_version.py index 8ea6122..df1fd0c 100644 --- a/pythonaisynth/_version.py +++ b/pythonaisynth/_version.py @@ -1 +1 @@ -version = "3.1.0" +version = "3.2.0" diff --git a/pythonaisynth/main.py b/pythonaisynth/main.py index 5ec6bf0..37b43ca 100644 --- a/pythonaisynth/main.py +++ b/pythonaisynth/main.py @@ -138,6 +138,8 @@ def __init__(self, *args, manager: SyncManager = None, **kwargs): self.graph.grid(row=1, column=0, columnspan=3, sticky="NSEW") self.create_controll_column() self.create_status_bar() + self.is_recording = False + # self.is_paused = False # sys.stdout = utils.QueueSTD_OUT(self.std_queue) # def destroy(self): @@ -327,6 +329,8 @@ def create_menu(self): ("Play Music from MIDI Port", self.play_music), ("Play Music from MIDI File", self.play_music_file), ("Play Example", self.play_example), + ("Record to File", self.start_recording), + ("Stop Recording", self.stop_recording), ], ) @@ -535,6 +539,23 @@ def play_example(self): # path = os.path.join(os.path.dirname(__file__), "fuer_elise.py") # subprocess.Popen(["python", path]) + def start_recording(self): + if self.synth and not self.is_recording: + file_path = filedialog.asksaveasfilename( + title="Save Recording", + defaultextension=".wav", + filetypes=(("WAV files", "*.wav"), ("All files", "*.*")), + ) + if file_path: + print(f"Recording will be saved to: {file_path}") + self.synth.start_recording(file_path) + self.is_recording = True + + def stop_recording(self): + if self.synth and self.is_recording: + self.synth.stop_recording() + self.is_recording = False + # for "invalid command" in the tk.TK().after() function when programm gets closed # def start_server(): diff --git a/pythonaisynth/music.py b/pythonaisynth/music.py index 1fd02c6..7ea8484 100644 --- a/pythonaisynth/music.py +++ b/pythonaisynth/music.py @@ -1,16 +1,23 @@ +import ctypes +import multiprocessing +import wave import mido import scipy import torch from .fourier_neural_network import FourierNN from pythonaisynth import utils import atexit -from multiprocessing import Process, Queue, current_process +from multiprocessing import Process, Queue, Value, current_process import sys from tkinter import filedialog import numpy as np import sounddevice as sd import pyaudio +START = 0 +STOP = 1 +PAUSE = 2 + def musik_from_file(fourier_nn: FourierNN): import sounddevice as sd @@ -275,7 +282,12 @@ def apply(self, sound): class Synth2: - def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): + def __init__( + self, + fourier_nn, + stdout: Queue = None, + port_name=None, + ): self.stdout = stdout self.live_synth: Process = None self.notes_ready = False @@ -292,6 +304,16 @@ def __init__(self, fourier_nn, stdout: Queue = None, port_name=None): self.t_buffer = torch.tensor(t, dtype=torch.float32) print(self.t_buffer.shape) self.port_name = port_name + self.command_queue = multiprocessing.Queue() + + def start_recording(self, file_name): + self.command_queue.put((START, file_name)) + + def stop_recording(self): + self.command_queue.put((STOP,)) + + def pause_recording(self): + self.command_queue.put((PAUSE,)) def set_port_name(self, port_name): self.port_name = port_name @@ -350,9 +372,27 @@ def live_synth_loop(self): notes = {} model = self.fourier_nn.current_model.to(self.fourier_nn.device) self.play_init_sound() + output_file = None + is_recoding = False with mido.open_input(self.port_name) as midi_input: while True: + if not self.command_queue.empty(): + c = self.command_queue.get_nowait() + if is_recoding and not (output_file is None): + if c[0] == STOP: + output_file.close() + output_file = None + is_recoding = False + elif c[0] == PAUSE: + is_recoding = False + else: + if c[0] == START: + is_recoding = True + output_file = wave.open(c[1], "wb") + output_file.setnchannels(1) # Mono + output_file.setsampwidth(4) + output_file.setframerate(self.sample_rate) # for _ in utils.timed_loop(True): available_buffer = stream.get_write_available() if available_buffer == 0: @@ -423,8 +463,13 @@ def live_synth_loop(self): audio_data = normalize(audio_data) audio_data *= 1 # oscilating_amplitude audio_data = np.clip(audio_data, -1, 1) + audio_data = audio_data.astype(np.float32) + + if is_recoding: + output_file.writeframes(audio_data) + stream.write( - audio_data.astype(np.float32), + audio_data, available_buffer, exception_on_underflow=True, ) @@ -447,10 +492,9 @@ def run_live_synth(self): atexit.register(utils.DIE, self.live_synth, 0, 0) def __getstate__(self) -> object: - live_synth = self.live_synth - del self.live_synth Synth_dict = self.__dict__.copy() - self.live_synth = live_synth + del Synth_dict["live_synth"] + # del Synth_dict["command_queue"] return Synth_dict def __setstate__(self, state): From 8a4f88f8b2df7afa31965924d10ebf0b81aa6c51 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Mon, 24 Mar 2025 15:06:46 +0100 Subject: [PATCH 66/67] vissible button reaction if using keyboard --- audio_stuff/midi/midi_piano.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/audio_stuff/midi/midi_piano.py b/audio_stuff/midi/midi_piano.py index 8d214b4..afdac84 100644 --- a/audio_stuff/midi/midi_piano.py +++ b/audio_stuff/midi/midi_piano.py @@ -120,9 +120,11 @@ def send_midi_note(note, velocity=127, type="note_on"): button.grid(row=0, column=white_keys[i] + a * 12) def press(event, i=i, a=a): + button.config(relief="sunken") return send_midi_note(white_keys[i] + a * 12, type="note_on") def release(event, i=i, a=a): + button.config(relief="raised") return send_midi_note(white_keys[i] + a * 12, type="note_off") button.bind("", press) From e8bf07bc24f223353f1f10dac5c4367c086e7bc8 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Mon, 24 Mar 2025 15:08:23 +0100 Subject: [PATCH 67/67] bugfix: all keys triggered same button to show effect --- audio_stuff/midi/midi_piano.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/audio_stuff/midi/midi_piano.py b/audio_stuff/midi/midi_piano.py index afdac84..7fe1e54 100644 --- a/audio_stuff/midi/midi_piano.py +++ b/audio_stuff/midi/midi_piano.py @@ -119,11 +119,11 @@ def send_midi_note(note, velocity=127, type="note_on"): ) button.grid(row=0, column=white_keys[i] + a * 12) - def press(event, i=i, a=a): + def press(event, button=button, i=i, a=a): button.config(relief="sunken") return send_midi_note(white_keys[i] + a * 12, type="note_on") - def release(event, i=i, a=a): + def release(event, button=button, i=i, a=a): button.config(relief="raised") return send_midi_note(white_keys[i] + a * 12, type="note_off")

*W+RD>lz{)*{bktR+v!Z|Z%|1)I6#*}{2~dI+=U_5`{|TkmOm^IlH*9HM~EZR*m&J8mkNcH8;MeTMt0*;xC#Ld>ZOtzajnsQBqTZBPf z<~M!cY(SWdE34j3f@>f!{uP+VHNDD^N2}8WG&sxm&5AQ~84h#a2Y1P+2>SjIlUM@v zJsg5G=|0+!Iw;I(f?>Lk{YD%LaF!?s{k)bKFAo|OyDI*WQO(M5%W+07K8DU^)XXp5 zwQH1Psn2w{HlP|+rDvP|1=#$i@Ent~n~{>DT(MRxu>Zj1)hK6-26Get zC9b4-+N%#%r7~Xh)@;m2Ruv0vWV1oI;?PH>A06opas8?Wma`4$`0A#MLyi3vHy$_4 zSL&d94DcT7b;I*nNA|AEOVhZAhK=&BHO#=m3KyK2Q5N()0du1cDt9>K+eFhWQsmI; zgtgyUESiF<5V6wM*gCmp;rrddp0Gly^I*xYE0P~?I?wM_mbwkkaVG~XPJE&Blkmw{ zcCf%2y)Mle-VVRc?9KgmcT7`Nsy9GtP!NA~7L+z+QtrpP7`~3&q{BLlz`P3)TX=TU zrh}bKuBJsR0pmN8o1dRgym5<(8NWw87Nj-|RYC8<6$xyzH9nmYqros~t2JXn8h4W2 z54TvC2ZWix4INAw5<@8!xOZj9k2|wKb@tV0ld)1|IhREh1GT5gwK&k3)2z{ZO)7qq zA5xP>`SKe@4#b9+K99eat%UTKgWc?hD^0+3n`~xBaQ4-%xJH~J$Uv7K)#cm zIIW!gqpiJxs-!$bTqh&lnMXmsmtN&Alluh8Wd9gHViR8FCT(175Mdbk02LYYS5dJiE)lz^fVzr6=^D9(Ttn0D175l*!rw{7jqdQ zB-wn?=F;~Wn_1@Xv&=-7!kqDfM3;8#+-bVifQKca6I!=lk=^G>*psL8w0Ux9X+z#T z;}0$A+#6Ur32xNR#NakE$5S3)Fsnm0zV$o0*^sz~5`$YH$+w)PhA?wEeVY=I+dft2 zW4qN>1)Q_&xH9sXb@5*VcJ!2^Qug2o*Xa+Kp$_{936e72O8D$RZb&)9C2XzjJGelN z?`juV4{k*JQozT@i5sy1>c3z-k zuR!kG3!{q&*vAd2YW0m<8{bT0DxuOUd3&(P&l6cGNpI5y1B3Rw9SBW(Op{jJZ!p>4 zn~GCiFjXxWgd_<7W{)J-G)B@0r2A{$DB3$nG?Ejzss7;xLjHLQfQt1}@W4bMj&X%i zGFc+H@0($qp_NpxK_pe|Nj!ez&0?xb|Fb&oh)zYDmZ@P!uQlO)xg_oC)$bWQ(z`p3 z18|{_q%m2L71gr2iMS+*i{)Y)NBzr#8~K#nCP}pX&rU$3{%;VO(dYOykk-a2OHmPu z9D6g}7&WP(;4IM7-K)7Y~M1U|48 z6U6s+H6B7u+4lAv6+aR*2{}bymn4^+lP0lbJrw)NV#^GtySUW zxw5M_R{HBey`$-<1Ova(T<}JMj33{Q<{6yMQ;6gYWLlx1EX7$sZWbC7vnyU?y~f$* z`OAXB!9l#d-e2Y5s{G^#>T@EsYhv*Y!y))bMm00gY_3-n^wz&={x<;|V+Db*-uuQTXMs=~JpYm_=% zMsAbC6@N5FP4riTFQ4sym*+?DDN`*(G*lruH(!E+M#nF|(U1N#0s- zZq~9M{Rl|w#cYmj#KaSdsEN~^!wNP(YPn=@%#gY5O+C+{cp5UegpsTX5TdpCv3}uy z#E<7`0=+7=JqPpR11cnnxU>1=2+~Ob?f@CaKWiL2YorIU(=MJtq`Y~>Ak!$*WW92< zYPgmE=`8Nzq~dP~S-gy*0;AY-eT_MNv5~`>R}TFOwFb+66`5CSJ6eCp1oJ7|1B*C| z#D)qI{O+X~J~Rgz=kDE*`p#Da`JN8BRmto|eKh!_xL6>$0riln9s+(w$k^MEZ1Ag> zQDfB84TtwXm{gcT>mgjB1(@17W^y@*%MU9K0`B2?y~gi*NK@#)M2tEc%Ujz517PbJ zr#&o0Z3>)=L)bcXz+{dV>{^iW6 zYhIC{r;-j!i>$3GvQWJmNl_&6#sL57Y3oRJ@>!+f{e8QFLK|+uSsRee_xAhWg%OTZ zGmjOrZn=xK3{~8^0V`*vOB1z$^iOxK)t9ohgGFvu3?h^qG-EdnQL=A|8AloqibW(B zZ1cN@B0buZK@kL<1Twz2fH8HAIc&R2iS3N4lD!RScphBLD>F= zzfa*Od4TC&nIMj;*U)+wOJb-8kukE!h&Oy|1`v3I7}*nk*v~k7L~ov zIK``$j6SM25TGj?yglp;y3_8+SEdF2_1K;9egTjNn4!ML9&Tt+y6G|@BVu*dYcGRp z*aFMxaz{qEBxDacwJ2dwRh+en<$9XU-bT0X7nb~IZqfD<4&I18i(lk)wFw35g}`7F zEj%)+uPf<7n+%cx=K1J^9U!?r0OZ^MgdJb{6QSenAnm0c%fy(dnS0142Bn2Q)Zr73 z?$1U(ckADOEY-FSlc&!?_xg&L_7{wNd>XxNzS^X;`hcG;L2mM612MQdhb3vHT(uAy zTo#S;cHk~ccjz|l{BhQ*BrKCzhERPpgs|YAo?94}tqn>b9GxkX^~HTJgn3Yu0+H5Y zefWXFn(xU&CRu+^uDM)QYDA4&@8}r(NOm@b^XzLu0rh^yT7D0=+xhyoR{W1ra_Q`} z9cJ=0uEvQs{r@1x+SjvxLylkhwi5p%;OHth%O8{4n2C?4>Iof|NJ3R{SGoqGH1fd4 zV6Ca)aEZ6Z0`a2zE$+s;@GKIE4||WzD~4swe_z4mKb!h$+H=K;(}IFaHn;K@?HG|Bqx!iBiYbt5wFRC7e-i zDJ`o-_%gG0OqFoVXYsa1B3_sNAlpwpGOd%r57CyX*iPG6mvE*Nv@oBpj?~ zo@vmlA_I$aHeG1lyuOthnwj9(*;8M4Z9WUw)i-w;BMJ+*n6g*)dZ|#@Yhc27prUR3 zn);Y#D}YOec(bR$usA{M!tjRdRAwE_p_x+meqUxo5oQq#aWTxYtdMi5@5&ap1%=P zHIfu*(Xa~Nohl54KN#HNc%WGu9Bd5}Mr>mBN&Lg;a$^ve@Jk7?Bp4Gy=rTXz7 zV8@wFbEwSus)3)Ld)$M~W^UaB{_Ac|TtS*FtLuB$TKZE3(M3?r7&Va9o#(@|6kUpkmOC@emL9ha29mmA@dXY zJA=Q438fv0*BNDWXD0p%6O`nz_cRW%97$BM|20g6E4(mUm9+yHMyWgG$+P^KY2x-*MXsd zb5SM=_FR|0ktN5dVm?t_6fW=;6efEr@bu1@Ip)Rhx*Brvztz?JE4h({9*`R&Rc{M7 z7psSWZmgo{b4h>cSWcSZ>3hZi@rhgkf>+pC zzv+r&smXN_mTy}`Q9WSS;ByyQu(GDF#~M`X5n@*}1u&~sGW%xw@CW+p zm3>>udvV|D5jjVWN}A?%sk%*YO}c`Af`?a}2hkcf(AQ+}(`uGodwUdWm_Jour4bEF)X$~5_AbLyVUyFD*=LN{n0_iiab|O zvh%(dz0=BM=3st4soMlqj1c;gnbdYEnP?S59#W5N@SpU?#(%Fj4r(5{iWqISW}R|v z8*&o=5$x9Bf^lbY-NkJP{7aG1R29dLP}pX2dKv*U6P%#8FDAO^5O8Ci&NA}{4>y*l_Hu6(hNlaz zztNifxZQz2j`Hdif)s1js~s$QdO-rxB-$Z2BB~pdU;HThk1*mc5hLp75v!;EJw}}V zR!rWTl4h5;?k&@1mRfW1-$BGjEdyFPerv2jFVFXsr38L_+)7n2;-o9?R)a;3Qs_Yyx*ExFDXPkd{f ztg5)YQT%VvVGZQ*e?y0-)f?~+Hw3H+MVDrdb;OA(K&jn65^}TCl{Nuiv!{20n-&h? zzHA}_q1Vr#du3q>*nLh}qr;1nO*1$JodFzt%_F|^az{Zv*IK_P&I&IF-iHL%KK}UDWcg2cYg!-rOxg+fhH6FxSjQJLDVCul%F@l zZtT7y6C~lk4{o+#Z_V{Oe;J6l{54~mjx>%0`? z$W@d~ILr^^2vm+G_RWn)yHU)k9*rXZJ7DzcZDHP7+(pHbDp}9O>;yq1M1j))Im^6@ z4#|~fHVdGz%j@*Mfc5gjlajFmVs%!a;{KGH(OL6gUyuYU=sZO_h z1I6HOpVy7vz7_{}W(TuzX(!``zANy`p6pI;X()`%T|5C_WY%?@T>|;V4wDXv+YFzI zTQvyTcgL2|uUajW^EgR?$7K3WDxD~d?|x-|`j-l0T*|6|Lw_s_?VyN$Qf1#96-a9O z1So*0xo(-GY0>-B`qcSJc0*1>hE)QWL_2=;np-&H*bCvjb!@Gz z_wtS~BfnH*Cr6I+6W}?&CD-ILe19BD(~m=`^C#XmAeI^@6i16K1F-Olz&q{#7#7;j z#FU<;@eV1A@McR4@=A@NN&(iH?(DZLGwVUU8&ostlanQsJno=OnV*TgErwO20pdHh zb+0xwrB+EL<@cccjR#29u#aQ&e{vjDn^Z1ckRFOW%vc^+zTA1IS84OL7u}PY#A{Zy z*+-JcWiNIoWiLOk9xGrZBu`<-p8gR$tb43S>C3Z_im*TfXJezT`-*3ljT0;p1OH!Z zXByVTx%P1^3VHys6>&k0XoW&q6hRb)2&j==0}%ls76}xTO+*TW1VyA)0TCfmmSEW= z5h4dAtO*>7fGlB;7$B&D5JK3Kkaf-k`@V0_r}O2_*U3EBb3HTjpZ|T|zvmv2voVxA zgumkfq3Y!?8czlG_Ei@&Li`)Vo#Nai1Q>bSZ5RL*_10UF988Tmkrsnd#UrD6R76$D z_Bc&R;iZ}J+tr)e}#gRhpPWaYMEpADwUr$IsS0t z_Tjv%}ZGW$F*4BO|R3nR8kn4zmoIbMPh}@IQS8JEdn;SOil%p=2?fv!k z`BEuAPu)&Y>l|M`bIW!-+GE_MmAvR#93&Xz7t$EeG-!JWTvkk^mRvCK0HQN&p{T!@ zP^I+lOq?ka({$BjYP33Ny66|Hq)T~UG1WUICcV?TaK$a2sM-5BDS}ErX*K~Eun)CR z-asRIlDdCXYPMfge3L_c=tK?i*pXxK!BL#aN??H_{rZy)gku5wz7nj9{eyQ0YbOnq zCV#TB0-*)P?`%ou8J8rmxcJMJwBG+^Ron0XAGYu}W%;jMD;T7%kE%4O^v&18C5VeE z{Wrn-{~UIa1vbJ#0!t8}DpqZMF0M;pu&s!-V`KgU4Z$e!cT(4qKlEU)+hE4(o3Jon z#s8agcKPTQGVYy^Pdp#roN|^-k5=MiWk`9lR1TFWSI;hq%Yar$N5rD??7AZNu3~{1 z=#iR##pPA>?>_^c^Zm~xfC0#{XO&+9vq*Z6Uix59Ppaq97V3kqGb*a?+7)zgSI~_& zs(t$xb+>#ZZY^BiX0U!x=|7l}zb!r}A5?MGn6wRf7RP`%O<4xYlmnO(za=<}Fe}Nm zWaO`?iS-H1Uo2tw9NOtORe#FuuV*MK!YJ=pn|uCnq$GM@YI- z(}2MT0-8w#ds4ybXGc@GSMU`=!Eyd)f#Gx%9)&3O7ygN0zTif{+O#b{(9`A{m;&MG z>^8z!peOKq3a;m5e!MjV7Jt#=W+kq&p^0vkU2hWy6c!w$(lwlr!b$J)dY|y97Qwcw z_zJx`9HmCWV3%q-R;mp`tP5+l3FDg&7jvOS8-{2U{ow_SQ{X5wQ@S8>;-5Omqfw9O zoIZk-T?t`I({4j876#W=>(nWt?ZIf&#Ja_r@2xc${^WSMmB3nwed~cbV8MB%T7Erv zmPWMqs(3Kqt!>{jPHo!-umM!D8meJ9-tj=;&J?YIATSHxIXl_`M&m>ux|H z9%Oe9#Z0-+0lKfp>pPlK#&F_$d8M}AmrO#B4tvGm; zcsxUOQER&V9iCF^2e=&w>`KCvT&K=3u-iK$%nN);QM0}9G-A~I=*Byd^L(^A&sJ6a z)Bx_57v0zEJvp_AVehL4KhB3<(Xyv{;)Wk?2USR zzOA^HlU5`-G%nwtR?AfG#nk}L(Q3eKE^|?SBO#KDDiJs@RxMwLIt|MX=6xg9slv{M zvn$+5(eKKrvucq|G)u3dmZRbKLes7Rt4=v!lg3!w#F{APu*ChJ>ksavyaxrsc`U!@ zLL0@t2U|~&UC|}dQ%X(c=gGb{v2c<7=0mVq%uH*TrWmrTG~A9a0X+g-Tr^XN zs?&+uF>G-YM58?z_f4-)x_)dO)*}uR-B+sEFVzRF57Jv{XbrW0X7j7)Idz}R{=7;% zkTk*zHH(XRk9{+yQ{9z4mrD#7T;77m||6RXuI7E|%zLMi#r~wNNLw zz+gsoCMG2$=pG@;t8rq_8K$EmSFqvUI{}3~xI0E+D)d^ra*Qm$TnUw)7u%NlQj9XM zp877Jf4B3a14*46Fi|~;8dDjKShqtueP8WRjk3~C|Iq;hS6RJt@I0b&tK-;TxKu(8 zI^}W0XAj~)hz2T$7~kH1_wkH{xgYDSc6d+jo7<8TKasa5c<^+eD69~i>b`x5z*gz+ zc8%7k2Fd9-&NbgPf2M7`BE|kv%pdj+Y@%G_fma}O2PfLm%nRuT(<`ah>h^XCs+smV z);VNFFwvVG8;TD)81C}z=gOcbwz-|N-@~vnS5dmQ%=-Im8t+%b$x<{(h>y8Efd?t! zzy!@?qcBIMPD)gVFEYPaw_4ibK@5SrOW#u(HgbIA$; zPCS)Wo+`c8_3}{N-R(UlMDya>yyrfNY%?$I!?)WhG__Z0#Rd8A0t^ezt8T-!)jV!g zFV*1;4WAgr{08-no!+Zp+VSG-@B2Wrh8aRIWoA_9dBWjkF86g~rKtVK?%u zgk@$Omgx|P>QD^d>g4YGVP&pu_20eCjOmJ5&s^v;9GW9<7lsyB-e`K3+2(&h8K$b4 z+n)6k%=RPKYK75#^yqjL+MM^v2&4To#Tyaio*r<=+taI4E97bZ?*}65Og-tjiDSNR zQoNjolTIe~!l}<49r9t=gqsNyU*sNwWPeY4*n7gt(o+W4>o^+% z(vZCj5PmTn(Aiz^{Md|xbKkrj8X&= z(JZiVXTR=r%{+1xRXi2tQ&*-Nizw*D-$IrT*O)Tlu^kIXvs9 zBW%v5nO!c%&jtu=pPu{QID&MxwYl!b{F;)>75Dg7wKa;8IHuVS8r%47++;>~gIQKz z5@}Uy6Td^F*{{ZPd9cGRzmyE^v1w8XxB zHW!2S{5`O;U*w+fNREu}+Gmps)|@*Q$rm?elfGXhHLv(}RYZB%j|p`C~h{|N6G3b?)f^qaF9 z6XECKUC(_k!z?oMLq>e$tpQR#N2NgK zxtq|iL)GDms=339rq~Wg^64j6Bb;K&bjgD=#~RyRU@CPzLS}7cZOHwwJC?3!yQk5{ z=klv`oHGiweVGkgAxJvyk2fa)*RTUUeb&?#`;f4Y$vqzGr!*sXJ7J$&(2Xz!A0w-c z(#(%*4qwWu-|WJ@)U2Q><9nNQwe zj9h~LFdbBC}EN44% zd3r7)XWEX}^o90G=jt*`uxBNH=}!_ASo=86$0O0ADA6zpbJ$HDS}o#3#dDAjU=@l* z%7>|!OKMF)KRAYj;+9X67l_x#(EJ=0HD)Zc*bpjLGe{7`a|(LKDo0)=M>eLhws!|DP{fHVWW3<0Rj zjs~j8TfRIE3*?Uvv^bfbiWZdwV3uQNQ`~v{QDMLu5x+m?F%zxJM<#fR%T70~V^xXP z_w=*5C73z)xuyOW)=Cfx6j*`c$Uv;Fq5&%_lZIWzvjBjE)rZ!Ls4S`^V8LEw8X|34 zY|XDMj-Lj%X%P>lFL9y_kk(8`<8|C*^0quFN?I~@df8xYZKiL3q9#Khk3I-pYtdwp z05M6CnG%>zL4lnaNPr&R36=L+HvWaMgSDgns{U~F7oBCW>t7dB&SS>mtz+d<5giE# z&xvrrmlzfoSOz+zU2aouz$)11M?RC@sIgzidMB(xUN*gNU4FD4S8Urn-B@gWrpS6y zcaY5EcDwI8EgPj_rV|9L&h5}dL#j*ym$RuqQu)Kk_f$X#IM_%ggsiq1i-L-rF1_nvU%>V!Z literal 0 HcmV?d00001 From 07db1a9968b417a8ae43a5288a860335a698f920 Mon Sep 17 00:00:00 2001 From: thetechnicker Date: Sun, 6 Oct 2024 20:49:55 +0200 Subject: [PATCH 34/67] added katex --- docs/javascripts/katex.js | 10 ++++++++++ mkdocs.yml | 10 ++++++++++ 2 files changed, 20 insertions(+) create mode 100644 docs/javascripts/katex.js diff --git a/docs/javascripts/katex.js b/docs/javascripts/katex.js new file mode 100644 index 0000000..a9417bf --- /dev/null +++ b/docs/javascripts/katex.js @@ -0,0 +1,10 @@ +document$.subscribe(({ body }) => { + renderMathInElement(body, { + delimiters: [ + { left: "$$", right: "$$", display: true }, + { left: "$", right: "$", display: false }, + { left: "\\(", right: "\\)", display: false }, + { left: "\\[", right: "\\]", display: true } + ], + }) +}) \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index a7e84e9..25db272 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -76,3 +76,13 @@ markdown_extensions: - attr_list - def_list - md_in_html + - pymdownx.arithmatex: + generic: true + +extra_javascript: + - javascripts/katex.js + - https://unpkg.com/katex@0/dist/katex.min.js + - https://unpkg.com/katex@0/dist/contrib/auto-render.min.js + +extra_css: + - https://unpkg.com/katex@0/dist/katex.min.css From 0115ddc9c10a63af71c524fdc51fe6921f35a247 Mon Sep 17 00:00:00 2001 From: Thetecknicker Date: Mon, 7 Oct 2024 10:31:33 +0200 Subject: [PATCH 35/67] documentation --- docs/how_to_use.md | 36 --------------------------- docs/how_to_use/basics.md | 50 ++++++++++++++++++++++++++++++++++++++ docs/image.png | Bin 90394 -> 0 bytes docs/img/midi_port.png | Bin 0 -> 116585 bytes docs/img/start_synth.png | Bin 0 -> 116585 bytes mkdocs.yml | 3 ++- 6 files changed, 52 insertions(+), 37 deletions(-) delete mode 100644 docs/how_to_use.md create mode 100644 docs/how_to_use/basics.md delete mode 100644 docs/image.png create mode 100644 docs/img/midi_port.png create mode 100644 docs/img/start_synth.png diff --git a/docs/how_to_use.md b/docs/how_to_use.md deleted file mode 100644 index f89938d..0000000 --- a/docs/how_to_use.md +++ /dev/null @@ -1,36 +0,0 @@ -# HOW TO USE - -## Basics - -### Soundwave Drawing - -You can draw the Shape of the Soundwave inside the big Plot. -The Dots are the individual points of the Line you draw. - -![plot_to_draw_in](./img/plot_to_draw_in.png) - -### Predefined Functions - -There are already some Waveforms predefined. -You can select them in the Select Box labeled **Predefined Functions** - -![predefined_functions](./img/predefined_functions.png) - -![example_function](./img/example_function.png) - -> This is one of the predefined functions, its called **nice**, cause i find it sounds nice and i had no better name, if you have a -> problem with this, find a better name! - -## Training - -Once you have drawn the Shape of the Soundwave you Start the trainings Process by Clicking on the **Start Training** Button. - -![start_training_button](img/start_training_button.png) - -The Trainings Process gets initialized and after some time a Red Line appears in the Plot, this it the current output of the model. - -![while_training](img/while_training.png) - -## Making Music - -> Still a TODO diff --git a/docs/how_to_use/basics.md b/docs/how_to_use/basics.md new file mode 100644 index 0000000..03351af --- /dev/null +++ b/docs/how_to_use/basics.md @@ -0,0 +1,50 @@ +# Basics + +## Soundwave + +### Drawing + +You can draw the Shape of the Soundwave inside the big Plot. +The Dots are the individual points of the Line you draw. + +![plot_to_draw_in](../img/plot_to_draw_in.png) + +### Predefined Functions + +There are already some Waveforms predefined. +You can select them in the Select Box labeled **Predefined Functions** + +![predefined_functions](../img/predefined_functions.png) + +![example_function](../img/example_function.png) + +> This is one of the predefined functions, its called **nice**, cause i find it sounds nice and i had no better name, if you have a +> problem with this, find a better name! + +## Training + +Once you have drawn the Shape of the Soundwave you Start the trainings Process by Clicking on the **Start Training** Button. + +![start_training_button](../img/start_training_button.png) + +The Trainings Process gets initialized and after some time a Red Line appears in the Plot, this it the current output of the model. + +![while_training](../img/while_training.png) + +## Making Music + +To make Music using this Synth, you need to have a valid Midi Input Port. +You can select a Midi Port at the Select Box labeld **MIDI PORT**. + +![midi_port](../img/midi_port.png) + +As soon as the the training Process finishes and you selected the right Midi Port you can start the Synth by pressing the Play Button. + +![play](../img/start_synth.png) + +Once the synth is ready you hear a Sound. Now you can use it. + + +## Midi piano + +In case you have no midi piano or similar device that can send Midi Signals to the Synth we included a simple Piano programm where you can select a Midi Port and play musik with it. \ No newline at end of file diff --git a/docs/image.png b/docs/image.png deleted file mode 100644 index 5c40cc4c637af3b9b1f2b2c208b72726eed6c5b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90394 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