AI Computer Engineering Honors Thesis at Dartmouth College Thayer School of Engineering
Author: Taka Khoo
Primary Advisor: Peter Chin
Secondary Consultant: Michael Casey
The Token U-Net is a 1.08 billion parameter neural network architecture designed for token-to-token audio enhancement. Below is the complete architecture diagram:
Complete Token U-Net architecture with encoder-decoder structure, CBAM attention, FiLM modulation, gated skip connections, and multi-head outputs for token prediction and auxiliary tasks.
📄 View Full Thesis PDF (253 pages)
The complete 253-page honors thesis document is available for download and contains:
- Comprehensive literature review and related work
- Detailed mathematical foundations and architectural descriptions
- Complete experimental methodology and results
- Extensive ablation studies and analysis
- Full bibliography and appendices
Direct Link: KHOO_THESIS.pdf (20.3 MB)
The thesis provides an in-depth exploration of token-based audio restoration, curriculum learning strategies, and the complete Token U-Net architecture. All figures, equations, and experimental results are thoroughly documented.
Note: All visualizations, diagrams, and result images are available in the thesis_images/ folder for detailed inspection of the architecture, training dynamics, and experimental results.
IMPORTANT: The main, most recent, and complete source code is located in the Curriculum_Tokenize_Master/ folder.
This folder contains the full implementation of:
- EnCodec tokenization pipeline
- Curriculum-aware training system
- Complete Token U-Net architecture with attention mechanisms
- All auxiliary heads (mask, gain, compression, stereo, perceptual)
- Precomputation utilities for efficient training
- Inference and evaluation scripts
All other folders (src/, CBAMFiLMUNet + InvLSTM src/, DeepUnet & LSTM src/, etc.) are experimental baselines and earlier iterations.
- Introduction
- Problem Statement
- Architecture Overview
- Mathematical Foundations
- Dataset and Preprocessing
- Training Pipeline
- Evaluation and Results
- Code Structure
- Usage Guide
- Future Work
Over the past decade, music production has become increasingly democratized. Affordable digital tools and platforms like TikTok and SoundCloud have empowered countless bedroom producers to create and share music globally. However, achieving a polished, professional sound remains a significant challenge. Mixing and especially finalizing audio for clarity, loudness, and playback consistency remains a black box for many creators.
Most creators work with a final bounced mix, where all effects are flattened into a single stereo file, leaving no room for detailed post-production. Conventional post-production workflows often depend on access to individual stems and the expertise of trained engineers using specialized hardware or software. However, the majority of modern creators only have access to a single stereo mix—often recorded in non-ideal conditions—and lack the tools or knowledge to perform nuanced adjustments.
This thesis addresses a critical gap: Can we design a system that restores and enhances fully mixed music audio, even when it is degraded and stemless, in a generalizable, accessible way?
This work imagines a future where intelligent audio cleanup, handling things like echo, muddiness, or reverb, is available to any creator, regardless of environment or experience. Our system, which combines token representations, curriculum learning, and perceptually aligned objectives, aims to move beyond hand-crafted signal chains and towards learned audio enhancement built for realism and accessibility.
How can we restore and enhance fully mixed music audio - without access to stems, without expert supervision, and without manual DSP intervention - using a deep learning system that generalizes between genres, degradations, and real-world recording conditions?
Fully mixed music tracks, or "bounced" files, embed not just the instruments and vocals but also every EQ curve, compression setting, reverb trail, and gain adjustment applied during mixing. Once exported, these effects are irreversibly entangled in the final waveform. Unlike speech, music is diverse in genre, instrumentation, tempo, and timbre, making the problem more difficult and much less studied when approached without source separation.
- No ground truth stems: Most users have no access to isolated instrument or vocal tracks.
- Entangled effects: Artifacts are non-linear and inseparable, invalidating additive noise models.
- Non-professional conditions: Audio may be clipped, distorted, or captured on consumer-grade equipment.
- No definitive target: Multiple "clean" versions may be equally perceptually valid, complicating supervision.
Most importantly, restoration must be feasible: it must operate on accessible hardware, provide interpretable outputs, and outperform existing approaches in perceptual quality and objective metrics.
While speech enhancement and stem-based mastering have received substantial attention, there is no state-of-the-art system specifically designed to restore fully mixed, stemless music recordings under real-world conditions. Most related work targets isolated effects or speech; none operate together in all five effects on degraded music without stems.
Visual comparison showing the fundamental differences between speech (narrowband, formant-based) and music (broadband, harmonic-rich) signals. This distinction is crucial for understanding why speech-focused models fail on music restoration tasks.
The core innovation of this work is operating entirely in discrete token space using Meta AI's EnCodec. Rather than predicting waveforms or spectrograms directly, our model learns to map degraded token sequences to clean token sequences.
-
Compression and Speed: A 30-second stereo clip is reduced to only a
$[16 \times 2250]$ token matrix, allowing fast training and GPU-efficient batching. - Semantic Abstraction: Tokens encode perceptual features such as timbre, attack, stereo width, and distortion.
- Multi-Effect Compatibility: EnCodec tokens reflect all aspects of musical structure, serving as a universal substrate for learning simultaneous restoration tasks.
- Phase Preservation: Unlike spectrograms, tokens preserve phase information implicitly through the EnCodec decoder.
EnCodec's encoder-quantizer-decoder architecture with residual vector quantization (RVQ) and adversarial discriminators for high-fidelity audio compression.
- Sample Rate: 48,000 Hz (decoded), 22.05 kHz (training input)
- Frame Rate: 75 fps
- Codebooks: 16 RVQ stages
- Codebook Size: 1024 entries per codebook
-
Token Shape:
$[16 \times 2250]$ for 30-second clips - Total Bandwidth: 24 kbps (stereo)
EnCodec performs
where
The effective bit rate is:
For our configuration:
Each residual block implements:
where
CBAM applies sequential channel and temporal attention to enhance feature representations:
Complete CBAM module showing channel attention (top) and spatial/temporal attention (bottom) pathways.
Channel Attention:
Temporal Attention:
Final Output:
Detailed view of the spatial attention mechanism within CBAM, showing how max and average pooling are combined with convolution to generate spatial attention weights.
FiLM layers modulate features using learned affine parameters:
FiLM (Feature-wise Linear Modulation) layer showing how learned $\gamma$ (gamma) and $\beta$ (beta) parameters perform channel-wise scaling and shifting of feature maps.
where
To balance local detail and global abstraction, we use gated skip connections:
Each
To support reverberant decay modeling and echo patterns, we include a dilated temporal context block:
This expands the effective receptive field without additional layers, enabling long-range dependency modeling for reverb tails and echo patterns.
where
-
Mask Head Loss (Dereverberation): $$\mathcal{L}{\text{mask}} = \frac{1}{B \cdot n_q \cdot T} \sum{b,q,t} \text{BCE}(\hat{\mathbf{M}}{b,q,t}, \mathbf{M}{b,q,t})$$
-
Gain Head Loss: $$\mathcal{L}{\text{gain}} = \frac{1}{B} \sum{b=1}^{B} (g_b - g_b^*)^2$$
-
Compression Head Loss:
$$\mathcal{L}_{\text{comp}} = | \mathbf{c} - \mathbf{c}^* |_2^2$$ -
Stereo Head Loss:
$$\mathcal{L}_{\text{stereo}} = | \mathbf{s} - \mathbf{s}^* |_2^2$$ -
Perceptual Head Loss: $$\mathcal{L}{\text{perc}} = \frac{1}{B} \sum{b=1}^{B} \left| \hat{\mathbf{p}}_b - \mathbf{p}_b \right|_2^2$$
-
Mel Spectrogram Loss:
$$\mathcal{L}_{\text{mel}} = | \log(\hat{M} + \epsilon) - \log(M + \epsilon) |_1$$ -
STFT Spectral Loss: $$\mathcal{L}{\text{STFT}} = \frac{1}{B} \sum{b=1}^{B} \left| |\text{STFT}(\hat{y}_b)| - |\text{STFT}(y_b)| \right|_2^2$$
The total training loss combines all components:
$$ \begin{aligned} \mathcal{L}{\text{total}} = &; \mathcal{L}{\text{CE}}
- \lambda_{\text{mask}} \mathcal{L}_{\text{mask}}
- \lambda_{\text{perc}} \mathcal{L}{\text{perc}} \ & + \lambda{\text{gain}} \mathcal{L}_{\text{gain}}
- \lambda_{\text{stereo}} \mathcal{L}_{\text{stereo}}
- \lambda_{\text{comp}} \mathcal{L}{\text{comp}} \ & + \lambda{\text{STFT}} \mathcal{L}_{\text{STFT}}
- \lambda_{\text{time}} \mathcal{L}_{\text{time}}
- \lambda_{\text{mel}} \mathcal{L}_{\text{mel}}
- \lambda_{\text{tok_spec}} \mathcal{L}_{\text{tok_spec}} \end{aligned} $$
Typical weight values:
Progression of all auxiliary losses (mask, perceptual, gain, stereo, compression) throughout curriculum training. Note the stage-wise resets and overall decreasing trend.
Complete loss landscape showing primary cross-entropy loss alongside all weighted auxiliary components during training.
A parametric EQ filter is modeled as:
with parameters:
- Center frequency:
$f_c \sim \mathcal{U}(300, 5000)$ Hz - Quality factor:
$Q \sim \mathcal{U}(0.5, 2.0)$ - Gain:
$g \sim \mathcal{U}(-6, +6)$ dB
A soft-knee compressor:
with parameters:
- Threshold:
$\theta \sim \mathcal{U}(-24, -6)$ dB - Ratio:
$r \sim \mathcal{U}(1.5, 4.0)$ - Makeup gain:
$m \sim \mathcal{U}(0, 3)$ dB
Convolution with an exponentially decaying impulse response:
where
- Decay constant:
$\tau \sim \mathcal{U}(0.2, 1.0)$ - Impulse duration:
$T \sim \mathcal{U}(50, 400)$ ms
Delayed and attenuated copy of the signal:
with parameters:
- Delay:
$\tau \sim \mathcal{U}(100, 250)$ ms - Attenuation:
$\alpha \sim \mathcal{U}(0.1, 0.5)$
Simple global amplitude scaling:
Illustration of how multiple degradations compound in real-world audio, creating entangled artifacts that require joint restoration.
We use the Free Music Archive (FMA) Medium dataset, which contains 25,000 tracks (30 seconds each) across 16 genres. This dataset is ideal because:
- Realistic Content: Contains naturally produced or recorded bounced stereo tracks, often lacking professional mastering
- Diversity: Spans genres, instrumentation, production styles, and loudness profiles
- Accessibility: Creative Commons licensed, suitable for academic use
- Standardized Format: Fixed 30-second segments at 22.05 kHz
Our training curriculum consists of five progressively difficult stages:
Visualization of the curriculum learning progression, showing how degradations are introduced progressively from identity mappings to full random combinations.
- Stage 0 – Identity: Clean audio paired with itself; model must reconstruct tokens exactly
- Stage 1 – Single Effect: One degradation (EQ, gain, compression, reverb, or echo)
- Stage 2 – Double Effects: Two degradations applied in random order
- Stage 3 – Triple Effects: Three randomly selected effects
- Stage 4 – Full Random: Up to five simultaneous degradations
Stages 3 and 4 have "stronger" variants with widened parameter ranges to enforce generalization.
Each audio pair is preprocessed into a structured PyTorch .pt file containing:
-
X, Y: Tokenized degraded and clean inputs
$\in \mathbb{Z}^{n_q \times T}$ -
scales: Per-frame scale factors from EnCodec
$\in \mathbb{R}^{T}$ -
Y_stft_mag: STFT magnitudes of clean audio
$\in \mathbb{R}^{n_q \times F \times T}$ (FP16) -
mel_spec: Mel spectrogram of clean waveform
$\in \mathbb{R}^{M \times T}$ (FP16) - metadata: Sample rate, bandwidth, degradation parameters, SHA-256 hashes
- wav_o, wav_m: Cached original and degraded waveforms (optional)
Visual representation of the "frozen lunchbox" .pt file format, showing all precomputed features bundled together for efficient training.
This "frozen lunchbox" design enables:
- 40× speedup in data loading compared to on-the-fly encoding
- Full reproducibility via SHA-256 hashes
- Support for all loss functions without recomputation
Complete pipeline from raw audio to precomputed token bundles, showing the demastering, tokenization, and feature extraction stages.
- Audio Loading: Load 30-second clips, resample to 22.05 kHz, normalize to peak amplitude -1.0 dBFS
- Degradation Application: Apply randomly sampled effects from the current curriculum stage
- EnCodec Tokenization: Encode both clean and degraded audio to 48 kHz tokens at 24 kbps
- Feature Extraction: Compute STFT magnitudes, mel spectrograms, and auxiliary statistics
- Serialization: Save all features to
.ptfiles with comprehensive metadata
The training pipeline uses a curriculum learning approach where degradations are progressively introduced based on difficulty. This ensures:
- Stable Convergence: Model learns simple restorations before complex ones
- Better Generalization: Gradual exposure prevents overfitting to specific degradation patterns
- Interpretable Progress: Each stage builds on previous knowledge
Training dynamics showing learning rate schedules, batch size adjustments, gradient accumulation, and recovery from OOM/NaN events throughout curriculum stages.
Stage advancement is controlled by dual criteria:
-
Validation Loss Plateau Detection:
Exponential moving average:
$$\hat{L}t^{\text{val}} = \alpha L_t^{\text{val}} + (1 - \alpha)\hat{L}{t-1}^{\text{val}}$$
Plateau detected when:
$$|\hat{L}t^{\text{val}} - \hat{L}{t-k}^{\text{val}}| < \delta$$
for
$p$ consecutive epochs, where$p$ is a threshold parameter.Minimum epochs per stage:
$$t_{\min} = \max(10, \lfloor N_{\text{train}} / 100 \rfloor)$$ -
Training Loss Stagnation:
Fallback criterion:
$$\sigma(L_{t-n}^{\text{train}}, \dots, L_t^{\text{train}}) < \epsilon$$ for
$n=8$ epochs, where$\sigma$ denotes standard deviation and$\epsilon$ is a threshold parameter.
| Stage | Dropout | Bottleneck | Max LR | Epochs |
|---|---|---|---|---|
| Stage 0 | 0.00 | False | 5e-4 | 15 (fixed) |
| Stage 1 | 0.00 | True | 4e-5 | Variable |
| Stage 1 Stronger | 0.00 | True | 3e-5 | Variable |
| Stage 2 | 0.05 | True | 2e-5 | Variable |
| Stage 3 | 0.08 | True | 1.5e-5 | Variable |
| Stage 3 Stronger | 0.10 | True | 1e-5 | Variable |
| Stage 4 | 0.15 | True | 8e-6 | Variable |
| Stage 4 Stronger | 0.15 | True | 5e-6 | Variable |
- Optimizer: AdamW with
- Learning Rate Schedule: OneCycleLR for Stage 0, CosineAnnealingLR for later stages
- Mixed Precision: FP16 training with automatic mixed precision (AMP)
- Gradient Clipping: L2 norm clipping at threshold 10.0
- Batch Size: Adaptive, starting at 4, increasing up to 32 based on memory
Loss weights are activated progressively:
- Stage 0: Only
- Stage 1+: Audio-domain and auxiliary losses incrementally activated
- Stage 3-4: All loss terms enabled
- Primary: NVIDIA RTX 6000 Ada (48 GB VRAM)
- Development: NVIDIA RTX 3070 Ti (8 GB VRAM)
- OOM Recovery: Automatic batch size reduction and checkpoint resumption
- NaN Detection: Gradient monitoring and automatic recovery
- Checkpointing: Every 5-10 epochs, plus best model tracking
- Audio Logging: Periodic audio samples for perceptual validation
- Comprehensive Logging: CSV logs, JSON metrics, visualization plots
We evaluate restoration quality using multiple metrics:
-
SNR (Signal-to-Noise Ratio):
$$\text{SNR}(x, \hat{x}) = 10 \cdot \log_{10} \left( \frac{\sum_t x(t)^2}{\sum_t (x(t) - \hat{x}(t))^2} \right)$$ -
PESQ (Perceptual Evaluation of Speech Quality): ITU-T P.862-based, range
$[-0.5, 4.5]$ -
STOI (Short-Time Objective Intelligibility):
$$\text{STOI}(x, \hat{x}) = \frac{1}{K} \sum_{k=1}^{K} \text{corr}(x_k, \hat{x}_k)$$ -
ERLE (Echo Return Loss Enhancement):
$$\text{ERLE}(t) = 10 \cdot \log_{10} \left( \frac{\mathbb{E}[y^2(t)]}{\mathbb{E}[\hat{e}^2(t)]} \right)$$
| Method | SNR ↑ | PESQ ↑ | STOI ↑ | Avg Score |
|---|---|---|---|---|
| Token U-Net (Ours) | 13.1 | 3.40 | 0.89 | 0.786 |
| DeepVQE | 14.1 | 3.41 | 0.91 | 0.775 |
| 2-Stage U-Net | 13.8 | 3.43 | 0.92 | 0.697 |
| Mimilakis DRC | 12.2 | 3.12 | - | 0.678 |
| Effect | Token U-Net | DeepVQE | Specialist Best |
|---|---|---|---|
| EQ | 0.84 | 0.75 | 0.86 (Smit EQ) |
| Gain | 0.88 | 0.76 | - |
| Compression | 0.82 | 0.81 | 0.89 (Mimilakis) |
| Reverb | 0.80 | 0.85 | 0.91 (Speech Dereverb) |
| Echo | 0.83 | 0.84 | 0.89 (Li Echo) |
Key Findings:
- Token U-Net achieves balanced performance across all effects
- Specialist models excel on their target effect but underperform on others
- Token U-Net shows lowest variance (0.047) and highest robustness index (0.7883)
Token usage histograms showing the distribution of EnCodec tokens before and after restoration. The model learns to utilize a broader token vocabulary, indicating improved representation capacity.
Listening tests on 30 tracks with mixed degradations revealed:
- Increased transient clarity compared to spectrogram-based U-Nets
- Better stereo field preservation and panning accuracy
- Less "pumping" or spectral smearing under heavy compression and reverb
- More natural reverberation tails when restoration fails (graceful degradation)
Curriculum_Tokenize_Master/
├── token_unet.py # Main Token U-Net architecture
├── token_train.py # Curriculum-aware training script
├── token_dataset.py # PyTorch dataset for token pairs
├── token_inference.py # Inference and evaluation script
├── precompute_tokens.py # Token precomputation pipeline
├── demastering.py # Audio degradation generation
├── token_utils.py # Utility functions
├── token_constants.py # Constants and configuration
├── token_train_utils.py # Training helper functions
├── token_data_utils.py # Data loading utilities
├── token_plot_utils.py # Visualization utilities
└── token_baseline.py # Baseline model implementations
Main model class implementing the 1.08B parameter U-Net:
class TokenUNet(nn.Module):
def __init__(self, n_q: int, k: int = 1024, base_dim: int = 384,
depth: int = 4, checkpointing: bool = False,
use_bottleneck: bool = False, dropout: float = 0.10):
# Architecture initializationKey Methods:
forward(x): Forward pass returning logits and auxiliary outputsset_dropout(dropout): Dynamically adjust dropout rateget_num_params(): Return parameter count
PyTorch Dataset for loading precomputed token pairs:
class TokenPairDataset(Dataset):
def __init__(self, base_dir, stages=None, model_type="48khz",
bandwidth=24.0, force_audio=False, return_specs=False,
return_meta=False, cache_wav=False):
# Dataset initializationKey Features:
- Loads from precomputed
.ptfiles or encodes on-the-fly - Supports multiple curriculum stages
- Returns tokens, scales, spectrograms, and metadata
Main training loop with curriculum learning:
def train_curriculum(args):
# Stage-by-stage training with automatic advancement
# OOM recovery, NaN handling, checkpointing
# Comprehensive logging and visualizationThe repository includes several baseline implementations for comparison:
- Baseline Test/: Early spectrogram-based U-Net experiments
- DeepUnet & LSTM src/: Deep U-Net with LSTM parameter prediction
- CBAMFiLMUNet + InvLSTM src/: U-Net with CBAM, FiLM, and inverse LSTM
- VocoderUNet & LSTM src/: U-Net with neural vocoder integration
- GriffinLimNetTraining/: Griffin-Lim based spectrogram inversion
-
Clone the repository:
git clone https://github.com/takakhoo/AI_Neural_AudioCodec_Remastering.git cd AI_Neural_AudioCodec_Remastering -
Install dependencies:
pip install -r requirements.txt
-
Install EnCodec:
cd externals/encodec pip install -e . cd ../..
-
Download and Setup FMA Medium dataset:
The Free Music Archive (FMA) dataset is used for training. To install and set it up:
# Clone the FMA repository git clone https://github.com/mdeff/fma.git cd fma # Install FMA dependencies pip install --upgrade pip setuptools wheel pip install numpy==1.12.1 # workaround for resampy pip install -r requirements.txt # Download FMA Medium dataset (25,000 tracks, 30s each, 22 GiB) cd data curl -O https://os.unil.cloud.switch.ch/fma/fma_metadata.zip curl -O https://os.unil.cloud.switch.ch/fma/fma_medium.zip # Verify integrity echo "f0df49ffe5f2a6008d7dc83c6915b31835dfe733 fma_metadata.zip" | sha1sum -c - echo "c67b69ea232021025fca9231fc1c7c1a063ab50b fma_medium.zip" | sha1sum -c - # Uncompress unzip fma_metadata.zip unzip fma_medium.zip cd ../.. # Place FMA Medium dataset in the project's data directory # The expected path is: data/raw/fma_medium/fma_medium/
For more information about the FMA dataset, visit: https://github.com/mdeff/fma
Note: The FMA Medium dataset contains 25,000 tracks (30 seconds each) across 16 genres, which is ideal for our curriculum learning approach.
-
Generate curriculum degradation stages:
# Stage 0 (Identity) python Curriculum_Tokenize_Master/demastering.py --stage 0 --seed 42 # Stage 1 (Single effect) python Curriculum_Tokenize_Master/demastering.py --stage 1 --seed 42 # Stage 3 with stronger parameters python Curriculum_Tokenize_Master/demastering.py --stage 3 --stronger --seed 42
-
Precompute tokens:
python Curriculum_Tokenize_Master/precompute_tokens.py --stage stage0_identity python Curriculum_Tokenize_Master/precompute_tokens.py --stage stage1_single # ... repeat for all stages
Full curriculum training:
python Curriculum_Tokenize_Master/token_train.py \
--base_dir experiments/curriculums \
--output_dir CurriculumTraining \
--resume_from_checkpoint path/to/checkpoint.pt # OptionalTrain until specific stage:
python Curriculum_Tokenize_Master/token_train.py \
--base_dir experiments/curriculums \
--output_dir CurriculumTraining \
--until_stage stage3_tripleKey training arguments:
--base_dir: Directory containing curriculum stage folders--output_dir: Output directory for checkpoints and logs--resume_from_checkpoint: Path to checkpoint for resuming--until_stage: Stop training at specified stage--batch_size: Initial batch size (default: 4)--num_workers: Data loading workers (default: 4)
Run inference on a stage:
python Curriculum_Tokenize_Master/token_inference.py \
--checkpoint path/to/best_model.pt \
--stage_dir experiments/curriculums/stage4_full_stronger \
--output_dir Inference_Results/stage4External audio inference:
python external_inference.py \
--checkpoint path/to/best_model.pt \
--input_audio path/to/degraded_audio.wav \
--output_audio path/to/restored_audio.wavThe inference script automatically computes:
- SNR, PESQ, STOI metrics
- Mel spectrogram comparisons
- Audio output files
- CSV metrics files
Incorporate genre awareness to align restorations with musical aesthetics:
- Explicit genre labels via FiLM conditioning
- Self-supervised genre inference from audio
- Genre-tuned attention mechanisms
Extend to stem-level processing:
- Multi-source token encoders with inter-stem attention
- Source separation frontend (Conv-TasNet, Open-Unmix)
- Conditioned token diffusion for per-instrument enhancement
Enable user-specified restoration goals:
- Text prompt conditioning (e.g., "make this warmer and less compressed")
- Reference audio conditioning
- Latent edit vectors for directional enhancement
Optimize for live applications:
- Streaming-compatible architecture with chunk-wise processing
- Causal upsampling for low-latency inference
- Model compression via pruning, distillation, or quantization
Advance toward zero-shot, prompt-driven systems:
- Multimodal token fusion (audio + text + genre tags)
- Semantic remixing (e.g., "make this more ambient")
- Unsupervised prompt tuning for label-free intent modeling
If you use this work in your research, please cite:
@thesis{khoo2025tokenunet,
title={Token U-Net: Neural Audio Codec Remastering for Full-Mix Music Restoration},
author={Khoo, Taka},
school={Dartmouth College},
year={2025},
type={Honors Thesis},
advisor={Peter Chin},
consultant={Michael Casey}
}- Advisors: Peter Chin (Primary), Michael Casey (Secondary)
- Dartmouth LISP Lab for computational resources
- Meta AI for the EnCodec codec
- FMA Dataset contributors for the training data
This project is licensed under the MIT License. See LICENSE file for details.
For questions, issues, or collaborations, please open an issue on GitHub or contact the author.
Last Updated: November 2025













