OpenVoicing Launch the app →

Reference

The reference desk

Every shortcut, every format, every flag, in one place. This is where you look something up: the complete keyboard reference, what the app opens and exports, which browsers and devices work, what the sync colors mean, how offline and install behave, and answers to the questions people actually ask.

05.1

Keyboard shortcuts

For power users and anyone who would rather not reach for the mouse.

OpenVoicing is built to run from the keyboard. Almost every action has a shortcut, and if you forget one you never have to leave the app to find it. Press ? at any time to open the in-app shortcut sheet, which is the authoritative source; the tables below mirror it. If you would rather search for an action by name than memorize a key, press Cmd+K (macOS) or Ctrl+K (Windows and Linux) to open the command palette and type what you want to do.

A note on the modifier keys used below: Cmd is the Command key on macOS, and its equivalent on Windows and Linux is Ctrl. Where a shortcut uses Shift, hold Shift together with the listed key.

Transport (works in every mode)

These control playback and are available whether you are in Listen, Practice, or Edit.

KeyAction
SpacePlay or pause
− / +Slow down or speed up by 5% (pitch stays the same)
hToggle half speed
[Set the loop start at the current playhead (during playback)
]Set the loop end at the current playhead (during playback)
1 to 9Recall a saved loop
Tip. Because and + move in 5% steps, you can creep a hard passage down to a tempo you can actually play, then nudge it back up 5% at a time as you get comfortable. The pitch never shifts, so the music stays in tune at every speed.

Sync (aligning a recording to the score)

Use these in Practice mode when you have a recording or a YouTube video attached and you are placing or fixing sync points.

KeyAction
pPlant a sync point at the playhead (this is how you tap sync bar by bar)
Cmd/Ctrl+ZUndo a sync edit
← / →Nudge a focused sync marker earlier or later
Tip. To tap sync a recording, press play and press p on each bar's downbeat as it goes by. If one marker lands slightly off, click it to focus it and use the arrow keys to nudge it into place rather than redoing the whole pass.

Editor (Edit mode only)

Turn on Edit (top-right) to use these. Many of them assume a note is selected or that you are in note-input mode (press N to enter it, where typing pitches places notes and advances automatically).

KeyAction
a to gSet the pitch of the selected or next note
Shift+a to gAdd a note to the current chord
← / →Move the selection to the previous or next note
Shift+← / →Extend the selection
↑ / ↓Transpose the note up or down (hold Shift for a whole octave)
1 2 4 8 6 3Set the note value (whole, half, quarter, eighth, sixteenth, and so on)
.Toggle a dot on the note value
+ / −Sharpen or flatten the note
Shift+3Toggle a triplet
rTurn the selection into a rest
bRepeat the previous bar
tTie to the next note
jRespell the note enharmonically (for example G-sharp to A-flat)
lEdit the lyric under the note
iInsert a beat
xDelete a beat
Cmd/Ctrl+CCopy
Cmd/Ctrl+XCut
Cmd/Ctrl+VPaste
Cmd/Ctrl+ZUndo (add Shift to redo)
EscDeselect

A word on Delete in Edit mode: pressing Delete does not remove a note from the bar; it clears the selected note to a rest, and that is fully undoable with Cmd/Ctrl+Z. This keeps the bar's rhythm intact so you do not accidentally shift everything after it.

General

KeyAction
?Show the shortcut sheet
Cmd/Ctrl+KOpen the command palette (search every action by name)

If you are ever unsure whether an action has a shortcut, open the command palette: it lists actions with their bound keys, so it doubles as a discoverable menu of everything the app can do.

05.2

Supported file formats

What you can open and what you can export.

OpenVoicing reads standard notation formats so you can bring in music you already have, and it exports formats that keep your work portable and yours.

Files you can open

Choose File → Open score file and pick any of these:

FormatExtensionsNotes
MusicXML.musicxml, .xml, .mxlThe interchange format almost every notation app exports. Uncompressed, older, and compressed variants all open.
Guitar ProGuitar Pro filesTab and multi-track guitar arrangements come in with their tracks intact.
OpenVoicing bundle.ovbThe app's own portable package. Restores the score, any packed recordings, and the sync map exactly as saved.

If your notation software (Finale, Sibelius, MuseScore, Dorico, and others) can export MusicXML, OpenVoicing can open it. If you want to start from nothing instead, choose File → New score for a blank piece.

Files you can export

ExportMenuWhat it contains
.ovb bundleFile → Export bundleThe whole interactive piece: score, any recording, and the sync map together in one self-contained file.
Plain MusicXMLFile → ExportThe score alone, to reopen in another notation app. Drops the recording and sync (those are OpenVoicing concepts) but preserves the notation.

Anyone with the .ovb file, or an embedded player pointed at it, sees the identical interactive piece with no account required. Under the hood a bundle is a standard ZIP archive with a manifest.json at its root, so it is a normal, inspectable file, not a black box.

What lives inside a bundle

A bundle's manifest records the score type (one of musicxml, guitarpro, or alphatex) and a list of recordings. Each recording is either an audio take packed inside the archive or a youtube reference to a video by id. When any recording points at media that is not packed inside the file (a YouTube video), the bundle is marked external, which signals that it needs a network connection to play and can break if that video is later removed. Audio-only bundles carry everything inside themselves and stay fully self-contained.

Audio formats inside a bundle

When you add an audio recording, the safe and recommended choice is MP3, because it decodes in every major browser (this is specifically why recordings play in Safari; see browser and device support). The format also accepts other widely decodable audio: Ogg Vorbis, FLAC, and WAV. Browser-based playback decodes audio through the Web Audio API, so anything the platform's decoder accepts will work, but MP3 is the most universally safe.

Tip. If you build bundles from the command line, the ovb CLI (ovb create) takes the same score formats and an optional --recording audio file or --youtube link, and ovb validate checks that a bundle is well-formed before you host it.
05.3

Browser and device support

Runs in the browser, plays in Safari, works on phones.

OpenVoicing runs entirely in the browser. There is nothing to install to use it, though you can install it as an app if you want (see offline use and installing).

Supported browsers

The app targets current versions of the major browsers:

  • Google Chrome (and Chromium-based browsers such as Microsoft Edge and Brave)
  • Mozilla Firefox
  • Apple Safari on macOS and iOS

Use an up-to-date version. The app relies on modern web platform features (the Web Audio API for playback and pitch-preserving time-stretch, service workers for offline use, and standard ES modules), all of which are well supported in recent releases of these browsers.

Why recordings play in Safari: they are MP3

Synced audio recordings are stored as MP3, and that is a deliberate choice. MP3 decodes natively in Safari, Chrome, and Firefox alike, so a bundle with an audio recording plays the same in all three. This matters most for Safari and iOS users, where more exotic audio codecs are not guaranteed to decode. If you author bundles yourself, sticking with MP3 audio is the single best thing you can do to make sure your piece plays for everyone, including people on iPhones and iPads.

Playback decodes through the Web Audio API, so any format the browser's own decoder accepts will also work (Ogg Vorbis, FLAC, WAV), but those are not universal across Safari the way MP3 is.

Notes playback and the soundfont

When you choose to hear the computer play the written notation (the Notes source, as opposed to a real recording), the sound comes from a General MIDI soundfont that is about 24 MB. The first time you use Notes playback the browser downloads that soundfont, so the very first note can be silent or slightly delayed while it loads. After that it is cached and plays instantly. If Notes playback is quiet or slow on first use, this download is almost always the reason; give it a moment.

YouTube-synced pieces need a connection

A piece synced to a YouTube video plays that video through YouTube's official embedded player. The video is embedded, never downloaded, so a YouTube-backed piece needs an internet connection to play and will not work offline. Audio-file recordings, by contrast, are packed into the bundle and play offline. If you embed such a piece on your own site behind a Content-Security-Policy, your host must allow framing https://www.youtube-nocookie.com.

Autoplay

Browsers block audio from starting until you interact with the page. This is a browser policy, not a bug: the first press of Play (or the spacebar) is the gesture that unlocks sound, and everything plays normally from there.

Mobile and touch

The app works on phones and tablets, including iOS Safari. Touch works for the things you would expect (tapping Play, dragging to select a loop, tapping sync points). Full editing is more comfortable on a device with a physical keyboard, since the editor leans heavily on keyboard shortcuts, but playing and practicing are entirely usable by touch.

At a glance

CapabilitySupport
Chrome, Edge, BraveFull support, current versions
FirefoxFull support, current versions
Safari, macOS and iOSFull support; MP3 audio decodes natively
Phones and tabletsPlay and practice by touch; editing best with a keyboard
Audio-only bundlesPlay offline once cached
YouTube-synced piecesNeed a network connection
05.4

Sync-confidence flags

What the blue, amber, and red numbers over each bar mean.

When you align a real recording (or a YouTube video) to the score, OpenVoicing shows a colored number above each bar on the waveform. These are sync-confidence flags. They are a quick visual read on how evenly each bar's sync marker is spaced relative to its neighbors, so you can spot a marker that may have landed in the wrong place without listening to the whole thing.

What each color means

FlagMeaningWhat to do
BlueWell aligned. Spaced consistently with the bars around it.Nothing. Most bars in a clean sync are blue.
AmberWorth a glance. Spacing is a little different from its neighbors.Check it: slightly misaligned, or a genuine musical event.
RedProbably off. Spacing is noticeably out of pattern.A likely candidate to drag or nudge into place.

Why a real performance can legitimately flag amber or red

The flags measure evenness, not correctness, so a bar can be flagged and still be perfectly synced. A genuine tempo change, a ritardando, a fermata, or expressive rubato will make one bar's marker sit at a different spacing than the bars around it, and that shows up as amber or red even though nothing is wrong. In other words, the colors point you at bars to check, not bars that are definitely broken. Trust your ears: if a flagged bar sounds aligned when you play it back with the score, it is fine.

How to fix a bar that really is off

  1. Play the passage back with Follow turned on so the cursor tracks the recording.
  2. When the cursor drifts from the note you actually hear, note which bar is off (its flag is usually amber or red).
  3. Click that bar's sync marker to focus it.
  4. Nudge it with the ← / → arrow keys until the cursor lands on the beat, or drag the marker into place on the waveform.
  5. If you make a mistake, Cmd/Ctrl+Z undoes the sync edit.
Tip. Auto sync (available when you attach an audio file) places all the markers at once and usually produces a wall of blue. Tap sync, where you press p on each downbeat, is more prone to the odd stray marker, so amber and red are most useful for cleaning up a tapped pass.
05.5

Offline use and installing

Autosave, offline behavior, and installing it as an app.

OpenVoicing is a Progressive Web App (PWA). In practice that means two things: your work is saved automatically without any account, and after your first visit the app itself works offline.

Autosave: there is no Save button

Everything you do saves automatically to your browser as you go. The header shows "All changes saved." so you always know your work is captured. There is deliberately no Save button to hunt for. If you reload the page or come back later, your last session is restored right where you left it. Because this storage lives in your browser, it is tied to that browser on that device; to keep a copy, move a piece to another machine, or hand it to someone else, export an .ovb bundle (or MusicXML for the score alone).

Caveat. Since your work lives in the browser's storage, clearing your browsing data or site data for the app will erase saved pieces. Export a bundle before you clear browser data if you want to keep anything.

Working offline

The app is cached on your first visit, so it loads and runs without a connection after that. The notation renderer, its worker and fonts, the interface, and any audio-only bundles all work offline. Two things do need the network:

  • YouTube-synced pieces, because the video streams from YouTube and is never downloaded. Offline, the score still opens but the video will not play. Pieces backed by an audio file packed into the bundle play fully offline.
  • The first Notes-playback soundfont download. The General MIDI soundfont is about 24 MB, too large to preload, so it is fetched and cached the first time you use Notes playback. Do that once while online and it is available offline afterward.

Installing it as a standalone app

Because it is a PWA, you can install OpenVoicing to your desktop or home screen and launch it in its own window like a native app:

  1. Open the app in Chrome, Edge, or Safari.
  2. In Chrome or Edge, use the install icon in the address bar (or the browser menu's "Install" option).
  3. On iOS Safari, use the Share sheet and choose "Add to Home Screen."
  4. Launch it from your dock, taskbar, or home screen; it opens in a clean standalone window.

Updates and stale caches

The app updates itself: when a new version is deployed, the service worker picks it up on your next load and refreshes the cache. If you ever suspect you are seeing an old version after an update, a hard reload forces it to update immediately. This is the fix behind the classic "old version keeps loading" symptom.

05.6

Frequently asked questions

The questions real users, teachers, and developers ask.

Does slowing down change the pitch?

No. Speed and pitch are independent. Slowing the tempo keeps every note at its correct pitch, for both the notation playback and a synced recording. You can drop a passage to 50% or even 25% and it stays in tune, which is what makes it useful for learning by ear.

What is the slowest and fastest I can go?

Speed ranges from 25% (0.25x) up to 150% (1.5x). The / + buttons and keys move in 5% steps for fine control, and pressing h toggles half speed as a quick shortcut. When a piece is synced to a YouTube video, speed snaps to YouTube's own steps (0.25x, 0.5x, and so on) because the video player controls playback.

Where are my changes saved? Is there a Save button?

There is no Save button. Everything autosaves to your browser automatically, and the header shows "All changes saved." Reloading restores your last session. To keep a copy or move it elsewhere, export an .ovb bundle or MusicXML.

Do I need an account or an internet connection?

No account, ever. After your first visit the app itself works offline, and pieces with an audio recording packed inside them play offline too. The only things that need a connection are YouTube-synced pieces (the video streams from YouTube) and the one-time download of the soundfont used for Notes playback.

What files can I open?

MusicXML (.musicxml, .xml, .mxl), Guitar Pro files, and OpenVoicing .ovb bundles. You can also start a blank piece with File → New score.

What can I export?

An .ovb bundle (the whole interactive piece: score, recording, and sync in one self-contained file) or plain MusicXML (the score alone, to open in other notation apps).

Can I share a piece without the app?

Yes. Export an .ovb bundle. It is a single self-contained file that holds the score, recording, and sync. Share the file, or embed the player pointed at it. Anyone who opens it sees the same interactive piece, no account needed.

What is the default demo piece?

When you first open the app, a demo loads so you can try everything right away. The default is Bach's Invention No. 8, a score with a synced audio recording, so you can press play, slow it down, loop a passage, and see the notation follow a real performance without importing anything of your own first.

What are the Listen, Practice, and Edit modes?

Listen is a clean player for just viewing and playing. Practice reveals the practice tools: tempo, looping, count-in, metronome, and recording sync. Edit turns the piece into a full notation editor where you can change notes, voices, ornaments, and dynamics. You switch modes with the toggle in the top-right.

Why is a bar marked amber or red?

Those are sync-confidence flags. Amber or red means that bar's sync marker is spaced differently from its neighbors, so it might be misaligned, or it might be a real tempo change, fermata, or rubato. Blue means it looks well aligned. See sync-confidence flags for how to check and fix a bar.

What is the difference between Auto sync and tap sync?

Auto sync aligns a recording to the score automatically and lines up every bar at once; it is available when you attach an audio file. Tap sync is manual: you press play and tap each bar's downbeat (the p key) as it goes by. YouTube videos are synced by tapping, unless you also attach an audio file of the same performance to unlock Auto sync and a waveform.

Can I sync the score to a YouTube video?

Yes. In the Recording and sync panel, choose Add → YouTube video and paste a link or video id. The video appears above the score and the notation follows it as it plays. Because the video streams from YouTube, a bundle that references it is marked external: it needs a connection and breaks if the video is later removed. For a waveform and Auto sync (and finer speed), you can additionally attach an audio file of the same performance.

Why does audio only start after I click?

Browsers block sound until you interact with the page. Your first press of Play (or the spacebar) is the gesture that unlocks audio. This is expected browser behavior, not a fault in the app.

Notes playback is silent or slow at first. Why?

Notes playback uses a General MIDI soundfont of about 24 MB that downloads the first time you use it. The first note can be quiet or delayed while it loads, then it is cached and plays instantly afterward. Do this once while online and it works offline later.

Will a recording play in Safari and on my iPhone?

Yes, as long as the audio is MP3, which is the recommended and default choice. MP3 decodes in Safari, Chrome, and Firefox, so audio recordings play everywhere, including iOS.

Can I use the app without a mouse?

Largely, yes. Most actions have keyboard shortcuts, and Cmd/Ctrl+K opens a command palette that searches every action by name. The editor in particular is designed around the keyboard.

I updated but keep seeing the old version. What do I do?

That is the service worker cache serving the previous version. It updates on your next load, but you can force it immediately with a hard reload.

Is it really free and open source?

Yes. The app and format are open source. The bundle format is an open, documented spec, and a bundle is a plain ZIP archive you own and can host anywhere static. There is no hosted service to depend on and nothing to lock you in.

Can I put a piece on my own website?

Yes. Host the .ovb bundle anywhere static, include the embed script, and point a div at the bundle URL. There is also a JavaScript SDK (OpenVoicing.create) with methods like play, pause, seek, and setSpeed, plus ready, state, and position events, so you can drive the player from your own code. See the embeddable player reference for the full API.

Keep going