mirror of
https://github.com/chocolate-doom/research.git
synced 2024-11-24 21:11:11 +00:00
122074db7b
Subversion-branch: /research Subversion-revision: 1667 |
||
---|---|---|
.. | ||
e1m1-cropped.mid | ||
gen-priorities | ||
gen-sequence | ||
gen-sequence2 | ||
gen-sequence5 | ||
novoices.mid | ||
novoices.processed.txt | ||
novoices2.mid | ||
novoices2.processed.txt | ||
novoices5.mid | ||
novoices5.processed.txt | ||
priorities.mid | ||
priorities.processed.txt | ||
priorities.results.txt | ||
README |
Investigating how Doom decides on a voice to discard when it runs out of OPL voices. Findings so far: * The instrument affects the voice that is released (different instruments give different results). It is the instrument data that is significant, not the instrument number (identical instruments behave the same - 87/88) * Sometimes notes are not turned off when they should be. Sometimes notes are turned off when they should not be (bug?) * DMX maintains a linked list of the most recently-allocated voices. These are searched backwards when finding a voice to free, so the most recently allocated voices are the first to be freed. * Different MIDI channels have different "priorities", somehow affected by the instrument in use on that channel. * When no voices are available, the will search back through the allocated voices list and discard the most recently used voice from a channel of a lower priority to the channel for the new note. * If no lower-priority voices are available, a voice from the same channel will be discarded. * If no voices from lower priority channels are available, and none from the same channel, the first voice in the list is discarded, ignoring priority. * Priority seems to be determined by MIDI instrument number - lower instruments have a higher priority than higher instruments, so instrument 0 defeats 1, 1 defeats 2, etc. * If a double voice instrument is played, and there are no free voices, a voice will be sacrificed to play the first voice of the instrument, but the second voice will not be played.