Skip to content

kassoulet/unsid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

unsid

SID → faux-stereo WAV converter

Left  channel  →  MOS 6581  (warm, gritty, classic distortion)
Right channel  →  MOS 8580  (clean, precise, refined filters)

unsid renders the same Commodore 64 .sid file simultaneously through multiple independent emulation engines to create an organic stereo width or isolated per-voice stems.


Features

  • Stereo Mode: Renders the SID through a 6581 and 8580 simultaneously.
  • Stems Mode: Parallel rendering of individual voices (3 per chip) as separate mono WAVs.
  • Flexible Duration: Supports seconds or M:SS format (e.g., 6:12).
  • Robust Detection: Automatically detects song duration via MD5, with fallback to filename lookup.

Requirements

Requirement Notes
libsidplayfp ≥ 2.0 apt install libsidplayfp-dev / brew install libsidplayfp
Rust ≥ 1.70
C++ toolchain g++ or clang++ (needed by the sys crate's build script)

Usage

unsid [OPTIONS] <INPUT>

Arguments:
  <INPUT>   Input .sid (or .mus) file

Options:
  -o, --output <PATH>       Output WAV file  [default: <input>.wav]
  -n, --tune <N>            Sub-tune number (0 = file default)  [default: 0]
  -r, --rate <HZ>           Sample rate in Hz                   [default: 44100]
  -d, --duration <DUR>      Max duration in seconds or M:SS     [default: 0]
      --stems               Render 6 individual voice stems (3x2)
      --chunk <SAMPLES>     Render chunk size                   [default: 4096]
      --filter-6581 <F>     6581 filter curve 0.0–1.0           [default: 0.5]
      --filter-8580 <F>     8580 filter curve 0.0–1.0           [default: 0.5]
  -h, --help
  -V, --version

Examples

# Convert to stereo — output is 'song.wav'
unsid song.sid

# Convert with duration as M:SS
unsid song.sid -o out.wav --duration 6:12

# Generate 6 parallel stem files (3 voices x 2 chips)
unsid song.sid --stems

Song Length Detection

unsid automatically downloads the Songlengths.txt database if it is missing. Once present, it detects the duration of your SID files using the database:

  1. MD5 Lookup: The tool calculates the MD5 hash of your .sid file and searches for a match in the database.
  2. Filename Fallback: If the MD5 hash is not found, it attempts to match the file's name against the database entries.

Listening tips

The 6581/8580 difference is most pronounced in:

  • Filter-heavy tunes — the 6581 filter distorts warmly; the 8580 stays transparent.
  • Digi-samples (4th-voice tricks) — the 6581 passes them clearly; the 8580 nearly mutes them without the "digiboost" mod.
  • Combined waveforms — slightly thinner on 8580, adding airiness to the right channel.

Use a pair of headphones or a stereo-imager plugin to best appreciate the width.


Crate dependency

unsid depends on sidplayfp-sys for the Rust FFI bindings to libsidplayfp, plus:

Crate Purpose
clap 4 CLI argument parsing
hound 3 Pure-Rust WAV writer
anyhow 1 Ergonomic error handling

License

MIT

About

Unsid renders the same Commodore 64 .sid file simultaneously through multiple independent emulation engines to create an organic stereo width or isolated per-voice stems.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors