Age | Commit message (Collapse) | Author |
|
|
|
- Move most of inline classes methods into own CC file
- Move Input into own header with own CC file to share it with the puzzle game
- Created virtual destructors and resolved weak vtable trouble between of Tetris's classes
- Remove static declarisons of Tetris class. Instead, let it be member of UserInterface
- Fixed forgot note-offs while sorting events row with zero length notes
- Fixed crash caused by unsafe access by reference to element of array that was modified/reallocated one or multiple times
- Stabilize dealing with zero-length notes
|
|
|
|
|
|
|
|
Feel free to create something like GS or XG bank :wink:
|
|
- Attempt to support hardware OPL and add build of classic ADLMIDI into CMake
- Added new API functions
- Added C++ Extras are needed for classic ADLMIDI player
- Error string is no more static. Static variant is kept for initialization errors only.
|
|
By default every flag will have "auto" type which means mode will be set in dependence on a bank.
|
|
|
|
|
|
Also a small optimizing:
- Convert Note-ON with zero velocity into Note-OFF event
- Don't re-sort row, just put note-off into begin of the row instead
|
|
|
|
|
|
This imperfection existed a whole age in most of MIDI players over OPL2/OPL3 chips, it means beginning of a new era!
|
|
|
|
|
|
Still not working :-(
|
|
|
|
...But keep it be togglable through macro definition
|
|
- Added more detailed error information while parsing MIDI file
- Added abiltiy to retrieve loop points time positions
- Added ability to change playing tempo by giving multiplier
- Removed old commented code
TODO:
- implement meta-information store and a way to retreive it
- implement hook-ability for every MIDI event
- implement ability to mute/solo every channel
|
|
Loop events are converting into in-library own types are compact, easier and faster to process without having to re-parse markers or have any extra code in standard event handlers
|
|
- MidiTrackPos renamed into MidiTrackRow
- TempoMarker renamed into TempoChangePoint
|
|
This will prevent possible crash on attempt to parse wrong or damaged MIDI file
|
|
Don't do lots of loops when is possible to iterate all previous events in one run
|
|
- Move all private variables into MIDIplay class away from public ADL_MIDIPlayer structure
- Comment out most of legacy code
- Implement new-style ReadVarLenEx for error-checked var-len value reading process
TODO: Stabilize this and implement missing fields and API calls (meta-data retreiving)
|
|
Testing and stabilizing is needed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
All parsed events will be stored into special time marked containers and will be sorted by type to avoid possible issues caused by incorrect order of meta or note-on/off events, etc.
Time markers are needed to easier detect seconds position to seek.
TODO: Fix IMF playback
|
|
|
|
|
|
* Smooth finalizing of song when loop is disabled (old ugly hack has been removed :wink:)
* Added an ability to reset song position to begin (very helpful when song reaches the end)
* Avoided possible crashes on attempt to fetch sample data without opening of MIDI file
|
|
TODO: Fix support for real 4-operator support for dynamical instruments which now are silent. 2-op and pseudo-4-op still work fine.
|
|
|
|
|
|
Make function for every real MIDI event which we are able to call independently from the common events stream.
MIDI streamer will be moved into own module which will process MIDI files and pass events into realtime module.
Then, make public API which will allow use realtime MIDI for making drivers and player plugins.
|
|
|
|
|
|
|
|
|
|
|
|
(when bass drums are taking too high tone)
|
|
other code has been moved into separated files
|