https://www.youtube.com/@jjome_Plus
JMPlayer is a simple MIDI and retro chiptune player written in C++ using the Qt6 framework. It is built to play and visualize 1990s Korean retro music formats (such as .SOP, .GYB, .NOB, .OKM / .OKA, and .IMS / .ISS) along with standard .ROL (AdLib) and VGM/VGZ chiptunes, utilizing software OPL3 emulation and SoundFont engines.
๐ User Manual: English ยท ํ๊ตญ์ด
- Format Support: Playback and parsing of Korean retro formats (
.SOP,.GYB,.NOB,.OKM/.OKA,.IMS/.ISS), standard AdLib.ROLfiles, and VGM/VGZ chiptunes. - Visualizer:
- 16-channel volume VU meters and attack peak visualization.
- Piano Roll window showing active note layouts.
- Dynamic instrument name cards displaying active FM patches.
- Lyrics Display: Basic lyrics support with syllable-level highlighting and text decoding (Johab/EUC-KR).
- Audio Engine: Software OPL3 synthesis via AdPlug and SoundFont (.sf2) playback powered by TinySoundFont.
- Nuked-SC55 (optional): Play through the Nuked-SC55 emulator with no virtual MIDI cable (no loopMIDI). A stock build stays silent โ build it with the patch in
emulator-patch/. The emulator is not shipped with JMPlayer.
This project requires CMake and Qt6 (MinGW 64-bit).
# 1. Clone the repository
git clone https://github.com/jihodaya/jmplayer.git
cd JMPlayer
# 2. Run the automated release build script (Windows)
.\build_release.batFor detailed instructions, please refer to BUILD_GUIDE.md.
- Project Code: Released under the MIT License (see
LICENSE). Free to use, modify, distribute and sell; just keep the copyright notice. - Third-party Dependencies: Dynamically linked to Qt 6 (LGPL v3) and AdPlug (LGPL v2.1) to comply with LGPL requirements.
- Credits: Thanks to BK (๋ณ์ฝ๋๊ณ ๋) for providing the sample song collection (
BK/folder). - Nuked-SC55: A separate program, not part of JMPlayer โ by nukeykt with the GUI fork by linoshkmalayil, under the MAME License (non-commercial). Only JMPlayer's own patch is included here.
JMPlayer can stream its OPL2/OPL3 register writes to a Raspberry Pi over MIDI โ the OPL register tunnel โ so a song played here comes out of the Pi's DAC.
| Project | What it is |
|---|---|
| mt32-extend | Bare-metal Raspberry Pi jukebox, and a fork of mt32-pi that receives the tunnel. It gives mt32-pi OPL playback it otherwise has no way to do. |
| rp2040-midi-bridge | USB MIDI โ serial MIDI bridge for the RP2040, one way to get the stream from the PC to the Pi. |
Neither is required to use JMPlayer on its own.
JMPlayer๋ Qt6 ํ๋ ์์ํฌ์ C++๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋ ๋ฏธ๋(MIDI) ๋ฐ ๋ ํธ๋ก ์นฉํ ์ฌ์๊ธฐ์
๋๋ค. 1990๋
๋ PC ํต์ ์์ ์ ์ฃผ๋ก ์ฐ์ด๋ ๊ตญ์ฐ ๊ณ ์ ์์
ํ์ผ ํฌ๋งท๋ค(.SOP, .GYB, .NOB, .OKM/OKA, .IMS/ISS)๊ณผ ํ์ค ์ ๋๋ฆฝ ํฌ๋งท์ธ .ROL, ๊ทธ๋ฆฌ๊ณ VGM/VGZ ์นฉํ ํ์ผ๋ค์ OPL3 ์๋ฎฌ๋ ์ด์
๊ณผ ์ฌ์ด๋ํฐํธ(SoundFont) ์์ง์ ํ์ฉํ์ฌ ์ฌ์ํ๊ณ ์๊ฐํํฉ๋๋ค.
๐ ์ฌ์ฉ์ ๋งค๋ด์ผ: ํ๊ตญ์ด ยท English
- ํฌ๋งท ์ฌ์ ์ง์: ๊ตญ์ฐ ๊ณ ์ ํฌ๋งท ํ์ผ(
.SOP,.GYB,.NOB,.OKM/.OKA,.IMS/.ISS) ๋ฐ ํ์ค ์ ๋๋ฆฝ ํ์ผ(.ROL), VGM/VGZ ์นฉํ ํ์ผ ์ฌ์. - ์๊ฐํ (Visualizer):
- 16์ฑ๋ ๋ณผ๋ฅจ VU ๋ ๋ฒจ ๋ชจ๋ํฐ ๋ฐ ์ดํ Peak ํ์.
- ์ํ ์ฐ์ฃผ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํผ์๋ ธ ๋กค(Piano Roll) ์ฐฝ.
- ํ์ฑํ๋ FM ํจ์น ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ ๊ธฐ ์ด๋ฆ ์นด๋.
- ๊ฐ์ฌ ํ์: ์กฐํฉํ(Johab) ๋ฐ ์๊ฒฐํ(EUC-KR) ๊ฐ์ฌ ํ ์คํธ์ ์์ ๋จ์ ํ์ด๋ผ์ดํ ํ์.
- ์ค๋์ค ์์ง: AdPlug ๊ธฐ๋ฐ์ ์ํํธ์จ์ด OPL3 ์๋ฎฌ๋ ์ด์ ๋ฐ TinySoundFont ๊ธฐ๋ฐ์ ์ฌ์ด๋ํฐํธ(.sf2) ์ฌ์.
- Nuked-SC55 (์ ํ): ๊ฐ์ MIDI ์ผ์ด๋ธ(loopMIDI) ์์ด Nuked-SC55 ์๋ฎฌ๋ ์ดํฐ๋ก ์ฌ์. ์๋ณธ ๋น๋๋ ์๋ฆฌ๊ฐ ๋์ง ์์ผ๋ฉฐ,
emulator-patch/์ ํจ์น๋ก ์ง์ ๋น๋ํด์ผ ํฉ๋๋ค. ์๋ฎฌ๋ ์ดํฐ๋ ํจ๊ป ๋ฐฐํฌ๋์ง ์์ต๋๋ค.
๋ณธ ํ๋ก์ ํธ๋ CMake ๋ฐ Qt6 (MinGW 64-bit) ํ๊ฒฝ์์ ๋น๋๋ฉ๋๋ค.
# 1. ๋ ํฌ์งํ ๋ฆฌ ํด๋ก
git clone https://github.com/jihodaya/jmplayer.git
cd JMPlayer
# 2. ์๋์ฐ์ฉ ๋ฆด๋ฆฌ์ฆ ๋น๋ ์๋ํ ์คํฌ๋ฆฝํธ ์คํ
.\build_release.bat๋ณด๋ค ์์ธํ ๋น๋ ๋ฐฉ๋ฒ์ BUILD_GUIDE.md ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
- ํ๋ก์ ํธ ์์ค ์ฝ๋: MIT ๋ผ์ด์ ์ค๋ก ๋ฐฐํฌ๋ฉ๋๋ค(
LICENSE์ฐธ๊ณ ). ์ ์๊ถ ๊ณ ์ง๋ง ์ ์งํ๋ฉด ์์ ๋กญ๊ฒ ์ฌ์ฉยท์์ ยท๋ฐฐํฌยทํ๋งคํ์ค ์ ์์ต๋๋ค. - ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: LGPL ๋ผ์ด์ ์ค ์ค์๋ฅผ ์ํด Qt 6 (LGPL v3) ๋ฐ AdPlug (LGPL v2.1) ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋์ ๋งํฌ(DLL) ๋ฐฉ์์ผ๋ก ๋น๋๋ฉ๋๋ค.
- ์ ๊ณต์ ๊ธฐ์ฌ: ์์ ํ
์คํธ๋ฅผ ์ํด ์ํ ์ฐ์ฃผ๊ณก ์ธํธ(
BK/ํด๋)๋ฅผ ์ ๊ณตํด ์ฃผ์ BK (๋ณ์ฝ๋๊ณ ๋) ๋๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค. - Nuked-SC55: JMPlayer์ ์ผ๋ถ๊ฐ ์๋ ๋ณ๊ฐ์ ํ๋ก๊ทธ๋จ์ ๋๋ค โ nukeykt ์์, GUI ํฌํฌ๋ linoshkmalayil, MAME ๋ผ์ด์ ์ค(๋น์์ ). ์ฌ๊ธฐ์๋ JMPlayer์ ํจ์น๋ง ํฌํจ๋ฉ๋๋ค.
JMPlayer๋ OPL2/OPL3 ๋ ์ง์คํฐ ์ฐ๊ธฐ๋ฅผ MIDI๋ก ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ ํ๋ ค๋ณด๋ผ ์ ์์ต๋๋ค (OPL ๋ ์ง์คํฐ ํฐ๋). ์ฌ๊ธฐ์ ์ฌ์ํ ๊ณก์ด ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด์ DAC์ผ๋ก ๋์ต๋๋ค.
| ํ๋ก์ ํธ | ์ค๋ช |
|---|---|
| mt32-extend | ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ๋ฒ ์ด๋ฉํ ์ฅฌํฌ๋ฐ์ค์, ํฐ๋์ ์์ ํ๋ mt32-pi ํฌํฌ. mt32-pi๊ฐ ์๋ ๋ชป ํ๋ OPL ์ฌ์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. |
| rp2040-midi-bridge | USB MIDI โ ์๋ฆฌ์ผ MIDI ๋ธ๋ฆฟ์ง(RP2040). PC์์ ํ์ด๋ก ์ ํธ๋ฅผ ๋๊ธฐ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค. |
๋ ๋ค JMPlayer ๋จ๋ ์ฌ์ฉ์๋ ํ์ํ์ง ์์ต๋๋ค.