Skip to content

Releases: voca-synth/svp2midi

Release list

v0.1.0

Choose a tag to compare

@didvc didvc released this 12 Sep 14:58

First release of svp2midi, a small command-line tool that turns a Synthesizer V
project into a plain MIDI file.

Point it at a .svp and it writes a .mid holding the notes, the tempo map, the
meter changes and the lyrics. From there the melody opens in any DAW or notation
editor, or plays back through a soundfont on whatever instrument you like.

$ svp2midi song.svp
Main Vocals -> song_Main_Vocals.mid
  443 notes, 504.5 beats, pitch C#3-C#5

Install

go install github.com/voca-synth/svp2midi@latest

Or download a binary for your platform from the assets below, unpack it and drop
it somewhere on your PATH. Every archive carries the README and the license
alongside the binary, and checksums.txt has SHA-256 sums for all five.

What it does

Run it with no options and it converts the first track that has notes in it,
writing the result next to the project. -list prints the track names with
their note counts, -t picks one by name, and -o decides where the file
lands. The instrument, channel, velocity and tick resolution are all adjustable,
and -no-lyrics leaves the words out. Full usage lives in the README.

Notes come across with their onset, length and pitch intact. Tempo and meter
changes carry over in full, including changes partway through a song. Lyrics
become MIDI lyric events attached to their notes, which notation software reads
automatically. Reused note groups are flattened onto the timeline at each
placement, muted groups are skipped, and a group transposed by whole semitones
arrives transposed.

Pitch bends, vibrato and hand-drawn pitch curves are left out. That movement is
what makes a vocal sound like a vocal, and writing it into MIDI as pitch bend
sounds wrong on any keyboard instrument, since a piano cannot bend. What you get
is the written melody as discrete notes. Dynamics come out flat for the same
sort of reason: the project has no per-note velocity to copy, so -velocity
sets one value for the file.

On timing

Synthesizer V measures time in blicks, at 705,600,000 to the quarter note. That
number divides evenly by 480 ticks, so at the default resolution every onset and
every note end lands on a whole tick with nothing left over. Nothing rounds and
nothing drifts across a long song. Pick an odd resolution and values round to
the nearest tick, halves to even, with the error staying under half a tick and
never accumulating.

Notes on this build

Built with Go 1.25 for Linux, macOS and Windows. There are no third-party
dependencies: the MIDI writer and the project reader are both part of the
package. The test suite reads written files back with a separate parser rather
than trusting the writer that produced them.

Disclaimer

An independent, community-maintained tool with no affiliation with Dreamtonics
Co., Ltd. and no endorsement from them. Synthesizer V is a trademark of
Dreamtonics Co., Ltd., named here only to describe what the tool works with.
Converting a file changes nothing about who owns the music inside it.