Skip to content

soficis/Slowverb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

68 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Slowverb 🎡

πŸš€ Try Slowverb Live β†’ https://slowverb.vercel.app/


Slowverb is a web-based audio editor for creating slowed + reverb, vaporwave, and other dreamy audio effects. It runs entirely in your browserβ€”no installation or server uploads required. All audio processing happens on your machine using WebAssembly (WASM) technology.

⚠️ Browser Compatibility: This application has been tested on Google Chrome and Brave browsers. Other browsers (Firefox, Safari, Edge) may work but are not officially supported.


Table of Contents

  1. What is Slowverb?
  2. Key Features
  3. How It Works
  4. Getting Started (Users)
  5. Effect Presets
  6. Visualizers
  7. Export Formats
  8. Project Library
  9. Technical Architecture
  10. Developer Setup
  11. Project Structure
  12. License

What is Slowverb?

Slowverb takes any audio file and applies a combination of effects to transform it:

  • Slowing down the tempo (speed).
  • Shifting the pitch (higher or lower).
  • Adding reverb (echo/room ambiance).
  • Applying EQ warmth (bass boost/lo-fi character).

The result is the signature "slowed + reverb" sound popular in vaporwave, lo-fi hip hop, and chillwave music.

Why Local Processing?

Slowverb uses FFmpeg.wasm, a WebAssembly port of the industry-standard FFmpeg audio tool. This means:

  • Your audio files are processed directly in the browser.
  • No need for a backend server to handle audio encoding.
  • Faster response times since there's no network upload/download.

Key Features

🎚️ Real-Time Effect Controls

The editor screen provides interactive sliders for:

Parameter Range Description
Tempo 0.5x – 2.0x Slow down or speed up the audio.
Pitch -12 to +12 semi Lower or raise the pitch.
Reverb 0% – 100% Add room echo and decay.
Echo 0% – 100% Add a repeating echo effect.
EQ Warmth 0% – 100% Boost low frequencies for a warmer, lo-fi sound.

✨ High-Quality (HQ) Audio Engine

Slowverb now defaults to high-quality processing for all presets:

  • HQ Slowed (SoundTouch): Uses the industry-standard SoundTouch algorithm for time-stretching. This prevents the "phasing" or "metallic" artifacts common in basic slowdowns, resulting in a cleaner, more natural sound even at extreme speeds.
  • HQ Reverb (Tone): Utilizes an advanced reverb engine with configurable room scale, damping, and stereo width. It provides a much denser and more immersive atmosphere than standard algorithmic reverbs. Recent tuning has refined the gain staging (up to +42dB compensation) and echo feedback to eliminate unwanted percussion artifacts.
  • HQ Enabled by Default: All built-in presets leverage these HQ features for a professional, consistent audio experience.

πŸ“Š Waveform Display

The waveform panel shows a visual representation of your audio file. You can click anywhere on the waveform to seek to that position in the track.

🎧 Preview Mode

Before exporting, you can generate a real-time preview of your processed audio. The editor displays live progress updates (Decoding -> Effects -> Mastering) so you know exactly when your preview is ready to play. This lets you hear changes as you tweak the sliders, without waiting for a full render.

πŸ’Ύ Automatic Project Saving

Slowverb uses your browser's IndexedDB storage to automatically save your projects. This means:

  • Your work is saved locally, even if you close the tab.
  • You can return later and pick up where you left off via the Library screen.

πŸ“€ Multiple Export Formats

Export your finished audio in one of four formats:

Format Quality Best For
MP3 Compressed (128-320 kbps) Sharing, streaming, small files.
AAC Compressed (128-256 kbps) Modern codec, better quality/size.
WAV Uncompressed (Lossless) Professional use, no quality loss.
FLAC Compressed (Lossless) Archiving, high-quality storage.

πŸŽ›οΈ Mastering & Quality

Slowverb features a professional-grade mastering engine powered by PhaseLimiter. This ensures your tracks have consistent loudness and punch without clipping.

The New PhaseLimiter Interface

Access the standalone PhaseLimiter AI interface from the home screen to master multiple files at once. It features:

  • Batch Processing: Drop up to 50 files for automated mastering.
  • Target LUFS: Choose your loudness level (e.g., -14 for Streaming, -11 for Club).
  • Bass Preservation: Maintain low-end punch even during aggressive limiting.
  • Zip Export: Bundle all mastered tracks into a single ZIP archive.

Mastering Quality Levels

Level Engine Description Processing Time
Simple Soft Clipper Basic peak limiting. Prevents red-lining. Instant
Lite (L3) PhaseLimiter (Lite) Single-band lookahead limiting with spectral balancing. Fast
Pro (L5) PhaseLimiter (Pro) Multi-band AI optimization. Uses heuristic search to find perfect DSP parameters for your specific audio. Slow

Note: The "Pro" mode (Level 5) runs a complex optimization loop directly in your browser. It provides the highest quality and most transparent loudness but may take 20-60 seconds per track.

To enable mastering in the editor:

  1. Open the editor screen.
  2. Toggle the "Mastering" switch in the unified bubble.
  3. Adjust the Quality slider to your preference.
  4. Regenerate your preview to hear the difference.

For batch mastering, use the PHASELIMITER button on the home screen.


How It Works

Here's a simplified breakdown of what happens when you use Slowverb:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Your Audio  β”‚ ──► β”‚  FFmpeg.wasm      β”‚ ──► β”‚  Processed     β”‚
β”‚  File (.mp3) β”‚     β”‚  (in Web Worker)  β”‚     β”‚  Output (.mp3) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β–²                       β”‚
       β”‚                       β–Ό
   File Picker           DSP Filter Chain
   (Browser API)         (tempo, pitch, reverb, etc.)
  1. Import: You select an audio file using the browser's file picker.
  2. Load: The file is loaded into memory (not uploaded anywhere).
  3. Process: FFmpeg.wasm applies audio filters (tempo, pitch, reverb, etc.) in a background Web Worker.
  4. Master (Optional): If enabled, the audio is passed to the PhaseLimiter engine (Lite or Pro) for loudness maximization.
  5. Preview: A short preview is generated so you can hear the result.
  6. Export: The full audio is rendered and downloaded to your computer.

Getting Started (Users)

  1. Open the app: Go to https://slowverb.vercel.app/.
  2. Import a file: Click "Drop audio file here" or "click to browse" to select an MP3, WAV, FLAC, M4A, AAC, or OGG file.
  3. Choose a preset: Click the preset button (e.g., "Slowed + Reverb") to apply a pre-configured effect.
  4. Fine-tune: Adjust the sliders (Tempo, Pitch, Reverb, Echo, Warmth) to taste.
  5. Preview: Click the Preview button to hear a sample of the processed audio.
  6. Export: Navigate to the Export screen, choose your format (MP3, AAC, WAV, FLAC), and click Start Export.
  7. Download: Once processing is complete, your new audio file will download automatically.

Effect Presets

Slowverb includes 13 curated presets to get you started quickly:

Preset Tempo Pitch Reverb Echo Warmth Description
Slowed + Reverb 0.95x -2 semi 49% 20% 40% Classic dreamy vaporwave.
Slowed + Reverb 2 0.74x -4.5 semi 28% 15% 50% Precise -25.926% slowdown.
Slowed + Reverb 3 0.81x -3.2 semi 35% 20% 50% -19% speed with balanced reverb.
Slow Chill 0.94x -3.5 semi 59% 38% 83% Smooth slowed sound with warm reverb.
Vaporwave Chill 0.78x -3 semi 56% 40% 70% Warm, nostalgic, lo-fi.
Nightcore 1.25x +4 semi 21% 10% 20% Fast, high-pitched, energetic.
Echo Slow 0.65x -4 semi 42% 80% 50% Ultra slow with cascading echoes.
Lo-Fi 0.92x -1 semi 35% 30% 80% Relaxed, warm, dusty sound.
Ambient Space 0.70x -2.5 semi 63% 60% 30% Ethereal, floating atmosphere.
Deep Bass 0.80x -5 semi 28% 20% 90% Heavy low-end focus.
Crystal Clear 1.00x +2 semi 14% 10% 10% Crisp, bright, clean.
Underwater 0.72x -3.5 semi 59% 50% 60% Muffled, submerged atmosphere.
Synthwave 1.05x +1 semi 42% 40% 40% Retro 80s vibes.
Slow Motion 0.55x -6 semi 49% 60% 50% Extreme slow-down effect.
Manual 1.00x 0 semi 0% 0% 50% Start from scratch.

πŸ’Ύ Custom Presets

You can now create your own custom presets!

  1. Select Manual mode or tweak any existing preset.
  2. Click the Save button that appears in the preset list header.
  3. Give your preset a name and description.
  4. It will appear at the bottom of the presets list, saved to your browser's local storage.

Visualizers

While your audio plays, Slowverb displays an animated visualizer that reacts to the music. Choose from 12 retro-inspired visual styles:

Visualizer Description
Pipes Windows 3D Pipes homage with neon gradients.
Starfield Warp A classic starfield "flight through space" effect driven by audio volume.
Maze Neon Neon maze runner with turn frequency driven by mid frequencies.
Maze Repeat CPU-based neon maze with specialized repeating patterns.
Fractal Dream Mandelbrot/Julia fractal zooms with shifting color palettes.
Fractal Dreams 3D Enhanced fractal journey with spatial warping and chromatic effects.
WMP Retro Nostalgic Windows Media Player-style bars and waves.
Mystify Classic polygon morphing screensaver.
DVD Bounce Bouncing logo homage that changes color on impact.
Rainy Window 90s PC box gazing at a stormy day with lightning.
Rainy Window 3D GPU-accelerated 3D scene with PC, CRT, rain, and lightning.
Time Gate 3D time portal tunnel with temporal distortion effects.

Visualizers are rendered using GPU shaders (GLSL) via Flutter's FragmentShader API.


Export Formats

Format Description
MP3 The most widely compatible format. Small file sizes (lossy compression). Configurable bitrate (128-320 kbps).
AAC Modern, efficient codec. Better quality than MP3 at the same bitrate. Configurable bitrate (128-256 kbps).
WAV Uncompressed, lossless audio. Large file sizes. Best for professional editing.
FLAC Lossless compression. Smaller than WAV, but with no quality loss. Good for archiving.

Note: FLAC export is only enabled when the source audio is a lossless format (WAV, FLAC). If you import an MP3, exporting to FLAC won't improve quality.


Project Library

Slowverb automatically saves your work to IndexedDB, your browser's built-in database. This includes:

  • The original filename.
  • Your selected preset.
  • All effect parameters.
  • The last export format and date.

To access your saved projects:

  1. Go to the Library screen from the import page.
  2. Click Open on any project to resume editing.
  3. Click Delete to remove a project from storage.

Tip: If you clear your browser's site data, your saved projects will be lost.


Technical Architecture

Slowverb is built with a modern, modular architecture:

Frontend (UI Layer)

  • Flutter Web: Cross-platform UI framework compiled to HTML/CSS/JavaScript.
  • State Management: flutter_riverpod for reactive state management.
  • Routing: go_router for URL-based navigation.

Audio Engine

  • FFmpeg.wasm: A WebAssembly port of FFmpeg (@ffmpeg/ffmpeg). Handles all DSP (Digital Signal Processing) tasks.
  • PhaseLimiter WASM: Custom C++ port of the PhaseLimiter engine for professional mastering.
  • Web Workers:
    • audio_worker.js: Handles FFmpeg processing.
    • phase_limiter_pro_worker.js: Handles "Pro" mode mastering (intensive).
  • Filter Chain: The Dart code constructs an FFmpeg filter chain string based on your settings (e.g., atempo=0.85,asetrate=44100*0.9,aecho=...).

Audio Playback

  • Web Audio API (via just_audio): For real-time audio playback.
  • Blob URLs: Processed audio is converted to a Blob URL for seamless playback.

Persistence

  • IndexedDB (via idb_shim): Stores project metadata and file handles (where supported).
  • File System Access API (Chrome/Edge): Allows re-opening files without re-selecting them.

Developer Setup

Prerequisites

  • Flutter SDK: 3.22.0 or higher.
  • Node.js: (Optional) For testing the JavaScript worker.
  • Chrome or Brave: For development and testing.

Installation

# 1. Clone the repository
git clone https://github.com/soficis/Slowverb.git
cd Slowverb

# 2. Navigate to the web project
cd web

# 3. Install Flutter dependencies
flutter pub get

# 4. Run the development server
# 4. Run the development server
flutter run -d chrome

WASM Build Setup (Optional)

To modify or rebuild the PhaseLimiter C++ engine:

  1. Install Emscripten: Follow the Emscripten SDK instructions.
  2. Build WASM Modules:
cd wasm/phaselimiter

# Windows
./build.ps1

# Linux/macOS
./build.sh

This will compile adapter_pro.cpp and copy the resulting phaselimiter_pro.js and phaselimiter_pro.wasm to web/web/js/.

Production Build

cd web
flutter build web --wasm --release

The output will be in web/build/web/. You can deploy this folder to any static hosting service (Vercel, Netlify, GitHub Pages, etc.).


Project Structure

Slowverb/
β”œβ”€β”€ wasm/                         # C++ Source for WASM Modules
β”‚   └── phaselimiter/             # PhaseLimiter (Pro) Source
β”‚       β”œβ”€β”€ stubs/                # IPP/TBB/FFTW Stubs
β”‚       β”œβ”€β”€ adapter_pro.cpp       # JS <-> C++ Bridge
β”‚       └── CMakeLists.txt        # Build Configuration
β”œβ”€β”€ web/                          # Flutter Web Application
β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   β”œβ”€β”€ app/                  # App configuration, routing, colors
β”‚   β”‚   β”œβ”€β”€ domain/               # Data models (entities, repositories)
β”‚   β”‚   β”‚   β”œβ”€β”€ entities/         # EffectPreset, Project, AudioMetadata, etc.
β”‚   β”‚   β”‚   └── repositories/     # AudioEngine interface
β”‚   β”‚   β”œβ”€β”€ engine/               # Audio engine implementation
β”‚   β”‚   β”‚   β”œβ”€β”€ wasm_audio_engine.dart  # Main engine class
β”‚   β”‚   β”‚   └── filter_chain_builder.dart # FFmpeg filter string builder
β”‚   β”‚   β”œβ”€β”€ features/             # UI Screens
β”‚   β”‚   β”‚   β”œβ”€β”€ import/           # File import screen
β”‚   β”‚   β”‚   β”œβ”€β”€ editor/           # Main audio editor
β”‚   β”‚   β”‚   β”œβ”€β”€ export/           # Export screen
β”‚   β”‚   β”‚   β”œβ”€β”€ library/          # Project library
β”‚   β”‚   β”‚   β”œβ”€β”€ settings/         # Settings screen
β”‚   β”‚   β”‚   β”œβ”€β”€ about/            # About screen
β”‚   β”‚   β”‚   └── visualizer/       # GPU visualizers
β”‚   β”‚   β”œβ”€β”€ providers/            # Riverpod state providers
β”‚   β”‚   └── utils/                # Utility functions
β”‚   β”œβ”€β”€ web/
β”‚   β”‚   β”œβ”€β”€ index.html            # Entry HTML
β”‚   β”‚   β”œβ”€β”€ manifest.json         # PWA manifest
β”‚   β”‚   └── js/
β”‚   β”‚       β”œβ”€β”€ audio_worker.js   # Web Worker (FFmpeg processing)
β”‚   β”‚       β”œβ”€β”€ phase_limiter_pro_worker.js # Web Worker (Pro Mastering)
β”‚   β”‚       └── slowverb_bridge.js # Dart ↔ JS interop
β”‚   β”œβ”€β”€ shaders/                  # GLSL fragment shaders for visualizers
β”‚   β”‚   β”œβ”€β”€ pipes_3d.frag
β”‚   β”‚   β”œβ”€β”€ starfield.frag
β”‚   β”‚   β”œβ”€β”€ maze_3d.frag
β”‚   β”‚   └── wmp_retro.frag
β”‚   └── pubspec.yaml              # Flutter dependencies
β”œβ”€β”€ docs/                         # Documentation
└── README.md                     # This file

License

This project is licensed under the GNU General Public License v3.0 (GPLv3).

FFmpeg Attribution

Slowverb uses FFmpeg compiled to WebAssembly via @ffmpeg/ffmpeg. FFmpeg is licensed under LGPL 2.1. No modifications were made to the FFmpeg source code.

PhaseLimiter Integration

Slowverb features a custom WebAssembly port of the PhaseLimiter engine (originally by Shin Fukuse). This powers the Lite and Pro mastering qualities, providing transparent peak limiting and loudness maximization directly in the browser.

How It Works (Technical Breakdown)

PhaseLimiter uses a multi-stage process to achieve professional loudness:

  1. Multi-Band Analysis (FFT): The audio is split into multiple frequency bands using Fast Fourier Transforms.
  2. Loudness Modeling: The engine calculates multi-band loudness vectors, accounting for human hearing sensitivity (K-weighting/EBU R128 models).
  3. Heuristic Optimization (AI): In Pro (Level 5) mode, the engine runs a global optimization algorithm (Differential Evolution or PSO). It tries thousands of parameter combinations for threshold, gain, and ratio across all bands to minimize the distance between your audio and a professional "gold standard" reference.
  4. DSP Application: Once optimized, multi-band compressors and a lookahead limiter are applied to the audio signal.
  5. Soft Clipping: A final soft clipper ensures that even with aggressive gain, the audio never exceeds 0 dBFS.

The integration replaces heavy desktop dependencies (Intel IPP/TBB) with standard C++ and custom FFT implementations to ensure high performance in a single-threaded WebAssembly environment.

PhaseLimiter - MIT License
Copyright (c) 2023 Shin Fukuse
https://github.com/ai-mastering/phaselimiter

πŸš€ Try Slowverb Live β†’ https://slowverb.vercel.app/

About

Create dreamy slowed + reverb vaporwave remixes

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •