[go: up one dir, main page]

Menu

Tree [22bd09] main v48 / gtk3 /
 History

HTTPS access


File Date Author Commit
 build 2025-09-09 Jason Hall Jason Hall [560f13] Latest
 Makefile 2025-09-11 Jason Hall Jason Hall [e8cdda] Fireworks
 README.md 2025-09-05 Jason Hall Jason Hall [679ad8] Latest
 aiff.cpp 2025-09-08 Jason Hall Jason Hall [b506bb] Latest
 aiff.h 2025-09-08 Jason Hall Jason Hall [b506bb] Latest
 audio_player.h 2025-09-11 Jason Hall Jason Hall [22bd09] Drag and drop support8
 audioconverter.cpp 2025-09-04 Jason Hall Jason Hall [537893] Latest
 audioconverter.h 2025-09-04 Jason Hall Jason Hall [9dc9ba] Latest
 bubbles.cpp 2025-09-10 Jason Hall Jason Hall [676cc6] Latest
 cache.cpp 2025-09-05 Jason Hall Jason Hall [f12c19] Queue system seems to work
 convert_icon.sh 2025-09-05 Jason Hall Jason Hall [390a63] Latest
 convertflactowav.cpp 2025-09-05 Jason Hall Jason Hall [d31380] Latest
 convertflactowav.h 2025-09-05 Jason Hall Jason Hall [d31380] Latest
 convertm4atowav.cpp 2025-09-05 Jason Hall Jason Hall [b20c81] Latest
 convertm4atowav.h 2025-09-05 Jason Hall Jason Hall [b20c81] Latest
 convertmidi.cpp 2025-09-04 Jason Hall Jason Hall [4bdcc0] Latest
 convertoggtowav.cpp 2025-09-08 Jason Hall Jason Hall [36a174] Rearranged
 convertoggtowav.h 2025-09-05 Jason Hall Jason Hall [9e85de] Latest
 convertopustowav.cpp 2025-09-08 Jason Hall Jason Hall [219c6c] Latest
 convertopustowav.h 2025-09-08 Jason Hall Jason Hall [cf511d] Latest
 dbopl.cpp 2025-09-04 Jason Hall Jason Hall [3c0119] First Test
 dbopl.h 2025-09-04 Jason Hall Jason Hall [3c0119] First Test
 dbopl_wrapper.cpp 2025-09-04 Jason Hall Jason Hall [3c0119] First Test
 dbopl_wrapper.h 2025-09-04 Jason Hall Jason Hall [3c0119] First Test
 equalizer.cpp 2025-09-09 Jason Hall Jason Hall [dde2e1] Latest
 equalizer.h 2025-09-09 Jason Hall Jason Hall [dde2e1] Latest
 fireworks.cpp 2025-09-11 Jason Hall Jason Hall [e8cdda] Fireworks
 icon.cpp 2025-09-05 Jason Hall Jason Hall [390a63] Latest
 icon.h 2025-09-05 Jason Hall Jason Hall [390a63] Latest
 icon.png 2025-09-05 Jason Hall Jason Hall [7bf946] Latest
 instruments.cpp 2025-09-04 Jason Hall Jason Hall [3c0119] First Test
 keyboard.cpp 2025-09-09 Jason Hall Jason Hall [29d6ba] Latest
 m3u.cpp 2025-09-09 Jason Hall Jason Hall [acfca8] Latest
 main.cpp 2025-09-11 Jason Hall Jason Hall [22bd09] Drag and drop support8
 matrix.cpp 2025-09-10 Jason Hall Jason Hall [a6755e] Matrix
 midiplayer.cpp 2025-09-05 Jason Hall Jason Hall [1fc4f9] Latest
 midiplayer.h 2025-09-04 Jason Hall Jason Hall [3c0119] First Test
 opus.cpp 2025-09-08 Jason Hall Jason Hall [219c6c] Latest
 vfs.cpp 2025-09-08 Jason Hall Jason Hall [e72f43] Latest
 vfs.h 2025-09-05 Jason Hall Jason Hall [f12c19] Queue system seems to work
 virtual_mixer.cpp 2025-09-04 Jason Hall Jason Hall [3c0119] First Test
 virtual_mixer.h 2025-09-04 Jason Hall Jason Hall [3c0119] First Test
 visualization.cpp 2025-09-11 Jason Hall Jason Hall [e8cdda] Fireworks
 visualization.h 2025-09-11 Jason Hall Jason Hall [e8cdda] Fireworks
 wav_converter.cpp 2025-09-04 Jason Hall Jason Hall [3c0119] First Test
 wav_converter.h 2025-09-04 Jason Hall Jason Hall [3c0119] First Test

Read Me

🎶 GTK Music Player

A minimalist music player that doesn't mess around. Built with GTK3 and SDL2, this is your no-nonsense jukebox that happens to have excellent taste in both modern formats and retro MIDI synthesis.

✨ What It Does

  • 🎧 Full Playback Control
    Play, pause, stop, rewind/fast-forward (5-second jumps), and skip between tracks. All the buttons you actually need, none of the bloat you don't.

  • 📜 Visual Queue Management
    Add multiple files, see what's playing, remove tracks individually, and toggle repeat mode. The queue is right there where you can see it—no hidden mysteries.

  • 🔊 Flexible Volume Control
    Scale from whisper-quiet (10%) to surprisingly loud (300%) with a smooth slider that actually responds to your input.

  • ⏱️ Progress Tracking
    Draggable progress bar with real-time timestamps. Know where you are, jump to where you want to be.

  • 🎵 Comprehensive Format Support

  • WAV – Direct playback, no conversion needed
  • MP3 – Decoded to WAV in memory
  • OGG Vorbis – Converted on-the-fly
  • FLAC – Lossless audio, handled gracefully
  • MIDI (.mid/.midi) – Here's where it gets interesting...

🎹 The MIDI Magic

This player includes real-time OPL3 synthesis for MIDI files. That means your .mid files get processed through an emulated Yamaha OPL3 chip—the same sound generator that powered classic DOS games and early PC audio cards.

Want to hear what your favorite MIDI sounded like on a 1990s Sound Blaster? Now you can. It's nerdy, it's nostalgic, and it sounds exactly like you remember (or wish you could remember).

🛠️ Building This Thing

Dependencies

You'll need these libraries installed:
- GTK3 – For the user interface
- SDL2 – Audio backend and OPL3 emulation
- libFLAC – FLAC format support
- libvorbis – OGG Vorbis decoding
- Standard build tools – gcc, make, the usual suspects

Compilation

make
./build/linux/musicplayer

That's it. No configure scripts, no cmake mysteries, just straightforward compilation.

💭 Design Philosophy

This player does one thing well: plays your local audio files without fuss. No streaming APIs, no cloud integration, no telemetry, no subscription prompts. Just you, your music collection, and a player that gets out of the way.

The interface is clean but not minimalist to a fault—you can see your queue, control playback intuitively, and the progress bar actually lets you seek to specific positions. Revolutionary concepts, apparently.

🎮 Bonus Points

The OPL3 MIDI synthesis isn't just a gimmick—it's a faithful recreation of how these files were meant to sound on period hardware. If you've got a collection of game music MIDIs or just appreciate the warm, slightly crunchy tone of FM synthesis, this feature alone makes the player worth trying.

Plus, the virtual file system handles format conversions in memory, so your disk doesn't get cluttered with temporary WAV files every time you play an MP3.


Made with C++, SDL2, and an appreciation for both modern convenience and retro authenticity.

📄 License

MIT License – use it, modify it, distribute it. Just don't remove the attribution when you do.

Author: Jason Hall
Repository: https://github.com/jasonbrianhall/midi_player