From 0db570203d8064e5eb585ff3c03cde9627d407a3 Mon Sep 17 00:00:00 2001
From: Abhay Shukla <105139789+shuklabhay@users.noreply.github.com>
Date: Sun, 6 Oct 2024 01:34:21 -0700
Subject: [PATCH] paper static deps (#20)
---
.gitignore | 2 +-
README.md | 24 ++++++----
paper/main.md | 12 -----
paper/paper.md | 45 ++++++++++++++++++
.../audio_processing_validation.py | 13 +++--
src/data_processing/encode_audio_data.py | 9 ++--
src/generate.py | 8 ++--
src/stereo_sample_gan.py | 7 ++-
src/usage_params.py | 30 +++++++-----
src/utils/file_helpers.py | 7 +--
src/utils/generation_helpers.py | 26 +++++-----
src/utils/signal_helpers.py | 24 +++++-----
static/curated_kick_generated_examples.png | Bin 0 -> 319661 bytes
static/curated_kicks_example.wav | Bin 0 -> 1984544 bytes
static/diverse_kick_generated_examples.png | Bin 0 -> 392272 bytes
static/diverse_kicks_example.wav | Bin 0 -> 1984544 bytes
static/generated_audio_example_1.png | Bin 374085 -> 0 bytes
static/generated_audio_example_2.png | Bin 289458 -> 0 bytes
static/generated_audio_example_3.png | Bin 290996 -> 0 bytes
...instrument_one_shot_generated_examples.png | Bin 0 -> 1143290 bytes
static/kick-drum-features.png | Bin 144336 -> 0 bytes
static/magnitudes_vs_loudness.png | Bin 250680 -> 0 bytes
22 files changed, 130 insertions(+), 77 deletions(-)
create mode 100644 paper/paper.md
create mode 100644 static/curated_kick_generated_examples.png
create mode 100644 static/curated_kicks_example.wav
create mode 100644 static/diverse_kick_generated_examples.png
create mode 100644 static/diverse_kicks_example.wav
delete mode 100644 static/generated_audio_example_1.png
delete mode 100644 static/generated_audio_example_2.png
delete mode 100644 static/generated_audio_example_3.png
create mode 100644 static/instrument_one_shot_generated_examples.png
delete mode 100644 static/kick-drum-features.png
delete mode 100644 static/magnitudes_vs_loudness.png
diff --git a/.gitignore b/.gitignore
index 5c6dbd5..5492b88 100644
--- a/.gitignore
+++ b/.gitignore
@@ -165,7 +165,7 @@ cython_debug/
data/
.vscode/
.DS_Store
-outputs/training_progress
+outputs/spectrogram_images
outputs/generated_audio.wav
outputs/generated_audio_[0-9]*
test.wav
\ No newline at end of file
diff --git a/README.md b/README.md
index ccf1a7e..b115b8d 100644
--- a/README.md
+++ b/README.md
@@ -2,13 +2,13 @@
[](https://github.com/shuklabhay/stereo-sample-gan/actions/workflows/push.yml/badge.svg)
-StereoSampleGAN: A lightweight approach high fidelity stereo audio sample generation.
+StereoSampleGAN: A computationally inexpensive approach high fidelity stereo audio sample generation.
## Model Usage
### 1. Prereqs
-- Optional but highly reccomended: Set up a [Python virtual environment.](https://www.youtube.com/watch?v=e5GL1obY_sI)
+- Optional but highly reccomended: Set up a [Python virtual environment.](https://docs.python.org/3/library/venv.html)
- Audio loader package `librosa` requires an outdated version of Numpy
- Install requirements by running `pip3 install -r requirements.txt`
@@ -18,7 +18,7 @@ Specify sample count to generate, output, etc `usage_params.py`
- Generate audio from the Curated Kick model by running `python3 src/run_pretrained/generate_curated_kick.py`
- Generate audio from the Diverse Kick model by running `python3 src/run_pretrained/generate_diverse_kick.py`
-- Generate audio from the One Shot model by running `python3 src/run_pretrained/generate_one_shot.py`
+- Generate audio from the Instrument One Shot model by running `python3 src/run_pretrained/generate_instrument_one_shot.py`
### 3. Train model
@@ -30,7 +30,7 @@ Specify training data paramaters in `usage_params.py`
- Train model by running `python3 src/stereo_sample_gan.py`
- Generate audio (based on current `usage_params.py`) by running `python3 src/generate.py`
-Training progress visualization (Diverse Kick Drum Model):
+Training progress visualization (training Diverse Kick Drum Model):
@@ -40,25 +40,31 @@ Training progress visualization (Diverse Kick Drum Model):
Kick drum generation model trained on ~8000 essentially random kick drums.
-- More variation between each generated sample, audio is occasionally inconsistent and contains some artifacts.
+- More variation between each generated sample, audio is occasionally inconsistent and noisy.
+
+
### Curated Kick Drum
-Kick drum generation model trained on ~4400 slightly more rigorously but still essentially randomly chosen kick drums.
+Kick drum generation model trained on ~4400 kick drums with closer matching overall characteristics.
+
+- Less variation between each drum sample's decay and auditory tone.
-- Less variation between each drum sample's tone, performs slightly better to an auditory test.
+
### Instrument One Shot
Instrument one shot generation model, trained on ~3000 semi-curated instrument one shots.
-- Demonstrates model's capability to generate longer audio, yet fails to generate coherent, useable instrument one shots.
+- Demonstrates model's capability to generate longer audio, yet fails to generate coherent and useable instrument one shots.
+
+
## Directories
- `outputs`: Trained model and generated audio
- `paper`: Research paper / model writeup
-- `static`: Static images and gifs
+- `static`: Static resources
- `src`: Model source code
- `utils`: Model and data utilities
- `data_processing`: Training data processing scripts
diff --git a/paper/main.md b/paper/main.md
index 7920aab..a570184 100644
--- a/paper/main.md
+++ b/paper/main.md
@@ -31,18 +31,6 @@ This model aims to focus on generating a category of audio and wholicsticly lear
### 3.1. Collection
-Training data is primarily sourced from digital production “sample packs.” For kick drums, the main "case study" for this paper, the training data used is a compilation of 7856 kick drum impules with different characteristics and use cases (analog, electronic, pop, hip-hop, beatbox, heavy, punchy, etc), overall providing a diverse range of potential drum sounds to generate that. A metric to watch for model validaiton is how well the model is able to generate the following set of "defining" kick drum characteristics.
-
-A kick drum's "defining" characteristics include:
-
-1. A transient: The “click” at the beginning of the generated audio incorporating most of the frequency spectrum
-2. A fundamental: The sustained, decaying low frequency "rumble" after the transient
-3. An overall "decaying" nature (spectral centroid shifts downwards)
-4. Ample variability between decay times for each sample
-
-
-
Fig 1: Visualization of key features of a kick drum.
-
### 3.2. Feature Extraction/Encoding
specifies audio shape then finds ideal hop length and frame size. Then cut data shape down to remove edge rtifact at end of sample (it egenrates slightly bigger than desired shape and includes an artifact only on those frames so thsi fixes both problems)
diff --git a/paper/paper.md b/paper/paper.md
new file mode 100644
index 0000000..94560f8
--- /dev/null
+++ b/paper/paper.md
@@ -0,0 +1,45 @@
+# StereoSampleGAN: A Computationally Inexpensive Approach High Fidelity Stereo Audio Generation.
+
+Abhay Shukla\
+abhayshuklavtr@gmail.com\
+Continuation of UCLA COSMOS 2024 Research
+
+## 1. Abstract
+
+Existing convolutional aproaches to audio generation often are limited to producing low-fidelity, single-channel, monophonic audio, while demanding significant computational resources for both training and inference. To address these challenges, this work introduces StereoSampleGAN, a novel audio generation architecture that combines a Deep Convolutional Wasserstein GAN (WGAN), attention mechanisms, and loss optimization techniques. StereoSampleGAN allows high-fidelity, stereo audio generation for audio samples while being remaining computationally efficient. Training on three distinct sample datasets with varying spectral overlap–two of kick drums and one of tonal one shots–StereoSampleGAN demonstrates promising results in generating high quality simple stereo sounds. While successfully understanding how to generate the "shape" of required audio, it displays notable limiatations in achieving the correct "tone," in some cases even generating incoherent noise. These results indicate finite limitations and areas for improvement to this approach of audio generation.
+
+## 2. Introduction
+
+## 3. Data Manipulation
+
+## 3.1 Datasets
+
+This paper utilizes three distinct data sets engineered to measure the model's resilince to variation in spectral content.
+
+1. Curated Kick Drum Set: Kick drum impulses with primarily short decay profiles.
+
+2. Diverse Kick Drum Set: Kick drum impulses with greater variation in decay profile and overall harmonic content.
+
+3. Instrument One Shot Set: Single note impulses capturing the tonal qualities and spectral characteristics of varying synthesizer and instrument sounds.
+
+These datasets provide robust frameworks for determining the model's response to scaled variation within training data. Most audio is sourced from online "digital audio production sample packs" which compile sounds for a wide variety of generes and use cases.
+
+## 3.2 Feature Extraction and Encoding
+
+## 4. Model Implementation
+
+### 4.1. Architecture
+
+### 4.2. Training
+
+## 5. Results and Discussion
+
+### 5.1. Evaluation
+
+The model generated 44.1k high quality audio, but not audio of high quality (important distinction). Shape vs tone (fundamental completely missing), why it makes sense (limitations to ft, training for shape of img not AUDIO)
+
+### 5.2. Contributions
+
+## 6. Conclusion
+
+## 7. References
diff --git a/src/data_processing/audio_processing_validation.py b/src/data_processing/audio_processing_validation.py
index 06a2b5e..096c190 100644
--- a/src/data_processing/audio_processing_validation.py
+++ b/src/data_processing/audio_processing_validation.py
@@ -4,21 +4,24 @@
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import random
-from usage_params import compiled_data_path, training_sample_length
+from usage_params import UsageParams
from utils.signal_helpers import (
stft_and_istft,
)
+# Initialize sample selection
+params = UsageParams()
+
def choose_random_sample():
audio_files = [
f
- for f in os.listdir(compiled_data_path)
- if os.path.isfile(os.path.join(compiled_data_path, f))
+ for f in os.listdir(params.compiled_data_path)
+ if os.path.isfile(os.path.join(params.compiled_data_path, f))
]
if audio_files:
sample_name = random.choice(audio_files)
- sample_path = os.path.join(compiled_data_path, sample_name)
+ sample_path = os.path.join(params.compiled_data_path, sample_name)
return sample_path, sample_name
else:
return None, None
@@ -27,4 +30,4 @@ def choose_random_sample():
# Analyze fourier transform audio degradation
sample_path, sample_name = choose_random_sample()
-stft_and_istft(sample_path, "test", training_sample_length)
+stft_and_istft(sample_path, "test", params.training_sample_length)
diff --git a/src/data_processing/encode_audio_data.py b/src/data_processing/encode_audio_data.py
index 7167e01..ed5c389 100644
--- a/src/data_processing/encode_audio_data.py
+++ b/src/data_processing/encode_audio_data.py
@@ -8,18 +8,19 @@
load_loudness_data,
)
from utils.signal_helpers import encode_sample_directory
-from usage_params import training_audio_dir, compiled_data_path
+from usage_params import UsageParams
# Encode audio samples
+params = UsageParams()
if len(sys.argv) > 1:
visualize = sys.argv[1].lower() == "visualize"
else:
visualize = False
-encode_sample_directory(training_audio_dir, compiled_data_path, visualize)
+encode_sample_directory(params.training_audio_dir, params.compiled_data_path, visualize)
real_data = load_loudness_data(
- compiled_data_path
+ params.compiled_data_path
) # datapts, channels, frames, freq bins
-print(f"{training_audio_dir} data shape: {str(real_data.shape)}")
+print(f"{params.training_audio_dir} data shape: {str(real_data.shape)}")
diff --git a/src/generate.py b/src/generate.py
index 446db5f..a0865dd 100644
--- a/src/generate.py
+++ b/src/generate.py
@@ -1,9 +1,7 @@
from utils.generation_helpers import generate_audio
-from usage_params import (
- model_to_generate_with,
- training_sample_length,
-)
+from usage_params import UsageParams
# Generate based on usage_params
-generate_audio(model_to_generate_with, training_sample_length)
+params = UsageParams()
+generate_audio(params.model_to_generate_with, params.training_sample_length, True)
diff --git a/src/stereo_sample_gan.py b/src/stereo_sample_gan.py
index 4d107ca..e3c841b 100644
--- a/src/stereo_sample_gan.py
+++ b/src/stereo_sample_gan.py
@@ -10,20 +10,23 @@
load_loudness_data,
)
-from usage_params import compiled_data_path
+from usage_params import UsageParams
# Constants
LR_G = 0.003
LR_C = 0.004
# Load data
-all_spectrograms = load_loudness_data(compiled_data_path)
+params = UsageParams()
+all_spectrograms = load_loudness_data(params.compiled_data_path)
all_spectrograms = torch.FloatTensor(all_spectrograms)
+
train_size = int(0.8 * len(all_spectrograms))
val_size = len(all_spectrograms) - train_size
train_dataset, val_dataset = random_split(
TensorDataset(all_spectrograms), [train_size, val_size]
)
+
train_loader = DataLoader(train_dataset, batch_size=BATCH_SIZE, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=BATCH_SIZE, shuffle=False)
diff --git a/src/usage_params.py b/src/usage_params.py
index a103673..a4520e2 100644
--- a/src/usage_params.py
+++ b/src/usage_params.py
@@ -1,16 +1,22 @@
# Main params
-audio_generation_count = 2 # Audio examples to generate
+class UsageParams:
+ def __init__(self):
+ self.audio_generation_count = 2 # Audio examples to generate
-# Training params
-training_sample_length = 1.5 # seconds
-outputs_dir = "outputs" # Where to save your generated audio & model
+ # Training params
+ self.training_sample_length = 1.5 # seconds
+ self.outputs_dir = "outputs" # Where to save your generated audio & model
-model_save_name = "StereoSampleGAN-InstrumentOneShot" # What to name your model save
-training_audio_dir = "data/one_shots" # Your training data path
-compiled_data_path = "data/compiled_data.npy" # Your compiled data/output path
-model_save_path = f"{outputs_dir}/{model_save_name}.pth"
+ self.model_save_name = (
+ "StereoSampleGAN-InstrumentOneShot" # What to name your model save
+ )
+ self.training_audio_dir = "data/one_shots" # Your training data path
+ self.compiled_data_path = (
+ "data/compiled_data.npy" # Your compiled data/output path
+ )
+ self.model_save_path = f"{self.outputs_dir}/{self.model_save_name}.pth"
-# Generating audio
-model_to_generate_with = model_save_path # Generation model path
-generated_audio_name = "generated_audio" # Output file name
-visualize_generated = True # Show generated audio spectrograms
+ # Generating audio
+ self.model_to_generate_with = self.model_save_path # Generation model path
+ self.generated_audio_name = "generated_audio" # Output file name
+ self.visualize_generated = True # Show generated audio spectrograms
diff --git a/src/utils/file_helpers.py b/src/utils/file_helpers.py
index 03c3f3a..ae4e960 100644
--- a/src/utils/file_helpers.py
+++ b/src/utils/file_helpers.py
@@ -3,9 +3,10 @@
import torch
import soundfile as sf
-from usage_params import model_save_path
+from usage_params import UsageParams
# Constants
+params = UsageParams()
GLOBAL_SR = 44100
@@ -26,9 +27,9 @@ def save_model(model):
# Save model
torch.save(
model.state_dict(),
- model_save_path,
+ params.model_save_path,
)
- print(f"Model saved at {model_save_path}")
+ print(f"Model saved at {params.model_save_path}")
def get_device():
diff --git a/src/utils/generation_helpers.py b/src/utils/generation_helpers.py
index 59bd46d..fb2d918 100644
--- a/src/utils/generation_helpers.py
+++ b/src/utils/generation_helpers.py
@@ -1,18 +1,16 @@
import os
import torch
from architecture import Generator, LATENT_DIM
-from usage_params import (
- outputs_dir,
- generated_audio_name,
- audio_generation_count,
- visualize_generated,
-)
+from usage_params import UsageParams
from utils.file_helpers import get_device, save_audio
from utils.signal_helpers import audio_to_norm_db, graph_spectrogram, norm_db_to_audio
# Generation function
-def generate_audio(generation_model_save, len_audio_in):
+params = UsageParams()
+
+
+def generate_audio(generation_model_save, len_audio_in, save_images=False):
device = get_device()
generator = Generator()
@@ -26,7 +24,7 @@ def generate_audio(generation_model_save, len_audio_in):
generator.eval()
# Generate audio
- z = torch.randn(audio_generation_count, LATENT_DIM, 1, 1)
+ z = torch.randn(params.audio_generation_count, LATENT_DIM, 1, 1)
with torch.no_grad():
generated_output = generator(z)
@@ -34,16 +32,20 @@ def generate_audio(generation_model_save, len_audio_in):
print("Generated output shape:", generated_output.shape)
# Visualize and save audio
- for i in range(audio_generation_count):
+ for i in range(params.audio_generation_count):
current_sample = generated_output[i]
audio_info = norm_db_to_audio(current_sample, len_audio_in)
audio_save_path = os.path.join(
- outputs_dir, f"{generated_audio_name}_{i + 1}.wav"
+ params.outputs_dir, f"{params.generated_audio_name}_{i + 1}.wav"
)
save_audio(audio_save_path, audio_info)
- if visualize_generated is True:
+ if params.visualize_generated is True:
vis_signal_after_istft = audio_to_norm_db(audio_info)
- graph_spectrogram(vis_signal_after_istft, "generated audio (after istft)")
+ graph_spectrogram(
+ vis_signal_after_istft,
+ f"{params.generated_audio_name}_{i + 1}",
+ save_images,
+ )
diff --git a/src/utils/signal_helpers.py b/src/utils/signal_helpers.py
index 5f8c414..7e8ae11 100644
--- a/src/utils/signal_helpers.py
+++ b/src/utils/signal_helpers.py
@@ -10,10 +10,7 @@
import plotly.subplots as sp
import scipy
-from usage_params import (
- training_sample_length,
- outputs_dir,
-)
+from usage_params import UsageParams
from utils.file_helpers import (
GLOBAL_SR,
delete_DSStore,
@@ -26,8 +23,9 @@
DATA_SHAPE = 256
# STFT Helpers
+params = UsageParams()
GLOBAL_WIN = 510
-GLOBAL_HOP = int(training_sample_length * GLOBAL_SR) // (DATA_SHAPE - 1)
+GLOBAL_HOP = int(params.training_sample_length * GLOBAL_SR) // (DATA_SHAPE - 1)
window = scipy.signal.windows.kaiser(GLOBAL_WIN, beta=12)
@@ -126,7 +124,9 @@ def load_audio(path):
y, sr = librosa.load(path, sr=GLOBAL_SR, mono=False)
if y.ndim == 1:
y = np.stack((y, y), axis=0)
- y = librosa.util.fix_length(y, size=int(training_sample_length * GLOBAL_SR), axis=1)
+ y = librosa.util.fix_length(
+ y, size=int(params.training_sample_length * GLOBAL_SR), axis=1
+ )
return y
@@ -165,7 +165,7 @@ def scale_data_to_range(data, new_min, new_max):
# Validation helpers
-def graph_spectrogram(audio_data, sample_name, save=False):
+def graph_spectrogram(audio_data, sample_name, save_images=False):
fig = sp.make_subplots(rows=2, cols=1)
for i in range(2):
@@ -197,19 +197,19 @@ def graph_spectrogram(audio_data, sample_name, save=False):
)
fig.update_layout(title_text=f"{sample_name}")
- if save is False:
+ if save_images is False:
fig.show()
else:
- fig.write_image(f"outputs/training_progress/{sample_name}")
+ fig.write_image(f"outputs/spectrogram_images/{sample_name}.png")
def generate_sine_impulses(num_impulses=1, outPath="model"):
amplitude = 1
for i in range(num_impulses):
- t = np.arange(0, training_sample_length, 1 / GLOBAL_SR)
+ t = np.arange(0, params.training_sample_length, 1 / GLOBAL_SR)
freq = np.random.uniform(0, 20000)
audio_wave = amplitude * np.sin(2 * np.pi * freq * t)
- num_samples = int(training_sample_length * GLOBAL_SR)
+ num_samples = int(params.training_sample_length * GLOBAL_SR)
audio_signal = np.zeros(num_samples)
audio_wave = audio_wave[:num_samples]
@@ -240,7 +240,7 @@ def stft_and_istft(path, file_name, len_audio_in):
vis_istft.shape,
)
- save_path = os.path.join(outputs_dir, f"{file_name}.wav")
+ save_path = os.path.join(params.outputs_dir, f"{file_name}.wav")
save_audio(save_path, istft)
graph_spectrogram(stft, "stft")
diff --git a/static/curated_kick_generated_examples.png b/static/curated_kick_generated_examples.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d83d31645c677ffcfb2a4fd196f219845fae867
GIT binary patch
literal 319661
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