{"id":51025272,"url":"https://github.com/andreimatveyeu/voxfont","last_synced_at":"2026-06-21T19:01:14.728Z","repository":{"id":365635642,"uuid":"1273019419","full_name":"andreimatveyeu/voxfont","owner":"andreimatveyeu","description":"Console MIDI/SoundFont player with a two-panel terminal interface, powered by FluidSynth","archived":false,"fork":false,"pushed_at":"2026-06-18T07:45:48.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-18T08:23:45.979Z","etag":null,"topics":["fluidsynth","midi","midi-player","music-player","ratatui","rust","sf2","soundfont","terminal","tui"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andreimatveyeu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-18T06:22:21.000Z","updated_at":"2026-06-18T07:45:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/andreimatveyeu/voxfont","commit_stats":null,"previous_names":["andreimatveyeu/voxfont"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/andreimatveyeu/voxfont","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreimatveyeu%2Fvoxfont","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreimatveyeu%2Fvoxfont/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreimatveyeu%2Fvoxfont/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreimatveyeu%2Fvoxfont/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreimatveyeu","download_url":"https://codeload.github.com/andreimatveyeu/voxfont/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreimatveyeu%2Fvoxfont/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34622271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fluidsynth","midi","midi-player","music-player","ratatui","rust","sf2","soundfont","terminal","tui"],"created_at":"2026-06-21T19:01:14.039Z","updated_at":"2026-06-21T19:01:14.721Z","avatar_url":"https://github.com/andreimatveyeu.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# voxfont\n\nA console MIDI / SoundFont player with a two-panel interface. The left panel\nbrowses MIDI files (with their durations), the right panel browses SoundFonts\n(`.sf2` / `.sf3`, with their sizes). Pick a SoundFont, then play MIDI files\nthrough it. Playback is handled by [FluidSynth](https://www.fluidsynth.org/).\n\nIn the MIDI panel a `.zip` archive is browsed just like a directory: step into\nit with \u003ckbd\u003eEnter\u003c/kbd\u003e, navigate its subfolders, and play files straight from\nit (the selected file is extracted to a temporary file behind the scenes).\n\nThe two-panel, keyboard-driven interface is inspired by the\n[mocp](https://moc.daper.net/) console music player.\n\n```\n┌ MIDI files — ~/midi ─────────────────┐┌ SoundFonts — ~/sf2 ──────────────────┐\n│   [+] classics/                      ││   [+] banks/                         │\n│ ♪ CANYON.MID                    2:08 ││ ♪ CT8MGM.SF2                    8.2M │\n│   PASSPORT.MID                  1:17 ││   2MBGMGS.SF2                   2.1M │\n│   popcorn.mid                   1:24 ││   AweROMGM.sf2                  1.1M │\n│   axelf.mid                     3:02 ││   FluidR3_GM.sf2                148M │\n│   entertainer.mid               1:53 ││   RolandSC55.sf2                 32M │\n└──────────────────────────────────────┘└──────────────────────────────────────┘\n┌ Player ──────────────────────────────────────────────────────────────────────┐\n│ ▶ PLAY  CANYON.MID  [00:07/02:08]  ♩5:2 4/4 120BPM  SF: CT8MGM.SF2  Vol 60%  │\n│ ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░  6% │\n└──────────────────────────────────────────────────────────────────────────────┘\n```\n\n## Why voxfont\n\nHear how a MIDI file sounds through different SoundFonts in seconds — no DAW, no\nplugins, no mouse.\n\n- **Fast browsing** — arrows, paging, and `/` search; `i` jumps to any folder.\n- **Instant A/B** — swap the SoundFont under the playing track with one keypress.\n- **At a glance** — durations, sizes, live bar·beat, tempo, and a progress bar.\n- **Lightweight** — launches instantly and drives FluidSynth directly.\n- **Remembers** — restores your directories and SoundFont next time.\n\n## Build\n\nRequires a Rust toolchain and the FluidSynth shared library\n(`libfluidsynth.so`). No dev headers are needed — the bindings are hand-written.\n\n```sh\ncargo build --release\n```\n\nIf FluidSynth lives somewhere the build script doesn't probe, point it at the\ndirectory containing `libfluidsynth.so`:\n\n```sh\nFLUIDSYNTH_LIB_DIR=/path/to/lib cargo build --release\n```\n\n## Run\n\n```sh\nvoxfont [-R \u003cdriver\u003e] [MIDI_DIR [SOUNDFONT_DIR]]\n```\n\n- `-R`, `--driver \u003cdriver\u003e` — audio backend, `jack` (default) or `alsa`. When\n  given it is used verbatim, with no fallback. When omitted, voxfont uses the\n  `VOXFONT_AUDIO_DRIVER` env override if set, otherwise tries jack, pulseaudio,\n  then alsa in turn.\n- `MIDI_DIR` — starting directory for the left (MIDI) panel.\n- `SOUNDFONT_DIR` — starting directory for the right (SoundFont) panel.\n\nThe directories are optional. The precedence is: command-line argument, then the\ndirectory remembered from the previous session, then `$HOME`.\n\nRun `voxfont --help` for the full usage summary.\n\n### Saved session\n\nOn exit, voxfont remembers the two panel directories and the loaded SoundFont,\nand restores them on the next launch. The state is stored at\n`$XDG_CONFIG_HOME/voxfont/state.conf` (default `~/.config/voxfont/state.conf`).\n\nForce a specific audio backend if the default doesn't produce sound:\n\n```sh\nVOXFONT_AUDIO_DRIVER=pipewire voxfont ~/midi ~/soundfonts   # or alsa, pulseaudio, jack\n```\n\nQuick non-interactive check of the audio/FluidSynth path:\n\n```sh\nvoxfont --selftest /path/to/font.sf2 /path/to/song.mid\n```\n\n## Keys\n\n| Key | Action |\n| --- | --- |\n| `Tab` | switch between MIDI / SoundFont panels |\n| `↑ ↓` `PgUp` `PgDn` `Home` `End` | move the cursor |\n| `Enter` | enter directory · **play** MIDI · **load** SoundFont |\n| `U` | go up a directory |\n| `Space` / `p` | pause / resume |\n| `s` | stop |\n| `← →` | seek 5s · `[` `]` seek 30s |\n| `n` | toggle **next** mode (auto-play the next file when one ends) |\n| `r` | toggle **repeat** mode |\n| `\u003c` `\u003e` | volume −1 / +1 · `,` `.` volume −5 / +5 |\n| `Alt`+`1`…`9` | set volume 10%…90% |\n| `H` | toggle hidden files · `Ctrl`+`r` reload panel |\n| `/` or `g` | incremental search in the active panel |\n| `h` / `?` | help · `q` / `Q` quit |\n\nA SoundFont must be loaded (right panel → `Enter`) before MIDI playback works.\nThe **next** and **repeat** modes (shown on the player bar) combine to control\nwhat happens when a track ends:\n\n| next | repeat | behaviour |\n| --- | --- | --- |\n| off | off | play the file, then stop |\n| off | on | loop the current track |\n| on | off | play through the directory, then stop |\n| on | on | loop the whole directory |\n\n## License\n\nLicensed under either of\n\n- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or\n  \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e)\n- MIT license ([LICENSE-MIT](LICENSE-MIT) or\n  \u003chttp://opensource.org/licenses/MIT\u003e)\n\nat your option.\n\nvoxfont dynamically links [FluidSynth](https://www.fluidsynth.org/), which is\nlicensed under the GNU LGPL 2.1. LGPL permits this linking from a permissively\nlicensed program; FluidSynth itself remains under its own license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreimatveyeu%2Fvoxfont","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreimatveyeu%2Fvoxfont","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreimatveyeu%2Fvoxfont/lists"}