Giter Club home page Giter Club logo

opl3-synth-driver's People

Contributors

djtubig-malicex avatar jpcima avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

opl3-synth-driver's Issues

DLL inclusion causes unrelated applications to crash from time to time

For some reason when including opl3emu.dll in the Drivers32 registry entry so that it appears as a selectable MIDI output device, from time to time I would encounter issues where random applications would fail to load (eg: vmware.exe) or otherwise crash out of nowhere when using specific options (eg: winamp.exe property pages for other DLL plugins). This is likely due to a resource leak/other low-level WinMM API abuse that was not accounted for.

4-op support

Original report by James Alan Nguyen (Bitbucket: djtubig-malicex, GitHub: djtubig-malicex).


Provide a method to play back MIDI files using 4-operator patches. To determine:

  • existing patch format suitability
  • utilities to import/export/convert 4-op patches
  • note allocation logic (6 channels for true 4-op, 9 channels for 2x2op); dynamic or statically mapped to a range?

Resampling options

Original report by Jean Pierre Cimalando (Bitbucket: jpcima, GitHub: jpcima).


The function GenerateResampled of nukedOPL produces an output converted from the internal sample rate of 49716 Hz.

Apparently it's a linear interpolation implemented in fixed point.

Could the sound quality improve in significant manner by providing better resampling methods?

Import Voyetra SuperSAPI! factory patches

Original report by James Alan Nguyen (Bitbucket: djtubig-malicex, GitHub: djtubig-malicex).


A target intention for demonstrating 2x2op patch support is to allow for playback with the Voyetra SuperSAPI! patches.

Current challenges:

  • Per-voice panning not implemented
  • Per-voice detune not implemented
  • Note retrigger (to be investigated; see Telephone patch)
  • Percussion bank does not use OPL Rhyhtm modes. May need to transcode them to standard patches.
  • Voyetra's DOS player omits entire MIDI channels or so, to prevent excessive note-stealing from complex MIDI files. (similar to Win3.1's channel omission)

Time-based events (eg:portamento, modulation/vibrato) and MIDI event rendering should be based on real-time as opposed to being executed on buffer render.

Original report by James Alan Nguyen (Bitbucket: djtubig-malicex, GitHub: djtubig-malicex).


Made obvious with the emscripten experiment, large audio buffers made obvious the delay between MIDI events being processed between buffer arrays being rendered. That is, they are being quantized based on the buffer size which is not what we want.

Need to look at options on how to better improve time-based handling of MIDI events.

Real-time VGM Logging

Original report by James Alan Nguyen (Bitbucket: djtubig-malicex, GitHub: djtubig-malicex).


Provide a method to persist register data to be saved to a .vgm file conforming to at least v1.51 or later specifications. Preferably togglable via configuration to intercept instance in memory, or otherwise by MIDI command similar to S98 logging in VOPMex.

2x2op instrument not playing correctly

I use wopl2syx to convert wopl to a header file and then compile it. It's strange to find that the timbre is not 2x2op, but it sounds like 2op, and the other 2op seems to be lost.

Playback-time patch register modification via MIDI

Original report by James Alan Nguyen (Bitbucket: djtubig-malicex, GitHub: djtubig-malicex).


ValleyBell's MidiPlay supposedly allows advanced users to use MIDI messages to modify their patches during playback runtime via NRPN messages. To investigate whether this method is suitable, or whether or not this behaviour should be incorporated with SysEx.

Currently not a priority, and certainly unlikely without reorganising the in-memory representation of patches.

Support for custom banks loaded in runtime

Original report by Wohlstand (Bitbucket: Wohlstand, GitHub: Wohlstand).


Hello!
I have some bunch of IBK files made by me, and I was used the Jamie O’Connel’s custom FM MIDI Driver to play&record music with it, but it has a poor support of drums (I can't implement full support of them).

That driver (Win 3x / Win 9x):
http://wohlsoft.ru/docs/Sounds/SMBX_OPL/SMBX_OPL_Sounds_src/Software%20for%20FM%20chip/fmsynthJamieOConnel.zip

SMB Timbre tool (DOS 16 bit) which I used to make my mods:
http://wohlsoft.ru/docs/Sounds/SMBX_OPL/SMBX_OPL_Sounds_src/Software%20for%20FM%20chip/sbtimbre.zip

My banks: http://wohlsoft.ru/docs/Sounds/SMBX_OPL/SMBX_OPL_Sounds_src/Software%20for%20FM%20chip/IBK%20banks/

EDIT:
Half year ago I found the ADLMIDI program (which I redesigned into the library) which implements an MIDI-Player over OPL chip emulator and uses a big set of various bank formats. It works light and is not overloads CPU, tested on Pentium IV machine. This also supports overclocking 18-channels 2-op and 6-channels 4-op limits by running multiple copies of chip emulators and then MIDI-player shares notes between all running chip emulators.

Now I got skills and then I quickly made a bank editor for Junglevision format:

https://github.com/Wohlstand/OPL3BankEditor (also on bitbucket too: https://bitbucket.org/Wohlstand/opl3bankeditor)

That format is supported both 2-operator, 4-operator instruments. Then later I have been added more bank formats: DMX, TMB, IBK, BNK (AdLib and HMI), and AIL (also I working on other formats too).

I think, I'll make a new file format which must support:

  • 128 melodic instruments and 128 drum sets (Even as idea, allow support of multiple banks like GS or XG to have able to make full GS/XG instruments set)
  • Three modes: 2-operators (OPL2), double-voice 2-operators (Pseudo 4-operators, like DMX), 4-operators (OPL3)
  • Fine tuning for second voice (Pseudo-4-operators mode only)
  • Note offsets per instrument (to allow octave offsets for some instruments instead of changing a frequency multiplication flags which are may change resulted in sound instead "just up/down one octave")
  • Custom instrument names (especially for GX/XG instrument sets more than standard 128)

**EDIT2: ** The new WOPL format has been created

It is already supported by OPL3 Bank Editor and by libADLMIDI:

The full specification is here: https://github.com/Wohlstand/OPL3BankEditor/blob/master/Specifications/WOPL-and-OPLI-Specification.txt

Feel free to use it on your side!

Add patch modifier maps similar to drum mapper

Original report by James Alan Nguyen (Bitbucket: djtubig-malicex, GitHub: djtubig-malicex).


It turns out, for banks such as CTMIDI and SAPI!, there appears to be a need for things such as transpose, detune, pan locks and perhaps maybe potentially even retrigger periods. Without altering the patch bank structure (for now), like with the drum bank note/key maps, have something for each patch to assign specific properties.

Extensible patch map

Original report by James Alan Nguyen (Bitbucket: djtubig-malicex, GitHub: djtubig-malicex).


Refactor patch retrieval routines to read from an STL map, which should make lookups just as effective but allow for a more programmer-friendly way to expand banks according to the MIDI spec.

eg: Bank Select MSB/LSB categorisation and fallback filters.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.