OPNA2608 / libopenpmd

Open-Source library to parse PMD files.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

libopenpmd

A WIP project to write an open-source C library capable of parsing both the MML and the compiled versions of the PMD sound driver's music files.

The aim is to write a stripped-down, cross-platform - Windows, macOS, Linux and DOS on actual PC-98s - library for parsing and handling PMD files. This goal is being approached by doing a from-the-ground-up, hopefully clean effort to understand and document the binary formats based on my own experiments with the official manual and compiler with the help of prior documentation efforts.

Roadmap

  • - Not started
  • [D] - Not working
  • [C] - Can fully parse existing file
  • [B] - Can properly modify & overwrite existing file
  • [A] - Can generate file from scratch, either empty or from supplied data
  • - Implemented to a satisfactory degree

  • Handle PMD-related bank formats
    • [A] P86
    • PPS
    • PPC
    • PVI
    • PZI
    • FF
    • ... Other, non-PC-98 bank formats
  • Handle PC-98 PMD modules
  • Handle PC-98 MML files
  • -> A PC-98 PMD compiler (reasonably accurate to the original one) & decompiler

Further ideas

  • Support for non-PC-98 module & MML formats?
    • IBM PC
    • FM Towns
    • X68000
    • PX
  • An expanded PMD syntax & custom PMD version?
  • A PMD module space optimiser? (e.g. loop analysis & unrolling)
  • A new PMD player???

Current status

I'm redoing the codebase. I'll start with smaller, more urgent goals like the various sample / patch bank formats to get a better feel for the language & platform limitations.

Currently writing code to parse, load, create & modify P86 banks. Figuring out what the API should look like as I go, depending on what I need to implement everything to a satisfactory degree. From there it's just a matter of copy-pasting function declarations & reimplementing them according to the formats, at least for the simple banks.

Credits

About

Open-Source library to parse PMD files.

License:GNU Lesser General Public License v3.0


Languages

Language:C 87.0%Language:CMake 7.9%Language:Nix 5.1%