Skip to content

Latest commit

ย 

History

52 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿš€ JMPlayer (JJoMe MIDI-OPL Player)

image JMPLAYER_R24b

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 ยท ํ•œ๊ตญ์–ด

๐ŸŒŸ Features

  • Format Support: Playback and parsing of Korean retro formats (.SOP, .GYB, .NOB, .OKM / .OKA, .IMS / .ISS), standard AdLib .ROL files, 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.

๐Ÿ› ๏ธ Quick Build Guide

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.bat

For detailed instructions, please refer to BUILD_GUIDE.md.

๐Ÿ“„ License & Credits

  • 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.

๐Ÿ”— Companion projects

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 ๋‹จ๋… ์‚ฌ์šฉ์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

About

A retro media player for OPL and MIDI music files based on AdPlug library.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages