Recently the OpenIV team has made the carcols.ymt file available as an XML file which allows editing. Big thanks to them for that as this is what makes this project possible. You can find the carcols.xml here: https://www.gta5-mods.com/tools/carcols-ymt-converted-into-xml-format
Anyways on to the meat of it. The carcols is where all vehicle sirensettings are configured. Vehicle developers are probably familiar with this and most, but not all, vehicles currently released have been configured to work with sirensettings 1. Looking in the carcols we can see exactly where siren setting 1 is configured and learn about the structure of sirens. This is a shortened portion of the configuration for siren setting 1:
The full xml contains definitions for all 20 siren elements in order, but I have removed sirens 2-20 for the sake of making it easier to read. So far, here is what I have learned:
The game engine caps the maximum number of sirens at 20 per sirensetting.
Custom sirensettings can be added to the file and used.
Corona colors and intensity can be edited for each individual siren (format for color: AARRGGBB). They can also be removed completely.
Each individual siren can have it's own individual flash pattern (and these can be user created, not just selected from a list)
Headlight and taillight flashing can be configured with custom flash patterns - one user has already released a modification that enables headlight flashing.
You can set the number of "beats" per minute that the lights will flash using sequencerBPM value. This value will apply to all of the sirens for that specific sirensetting.
You can set individual sirens to be rotating or non-rotating and configure their speeds.
So far I have not done any work with rotating lights. For non-rotating lights, the flash pattern can be custom configured by editing the sequencer value under "flashiness" for each siren. In the snippet of code posted above, the siren uses the following configuration:
At first glance it looks to be just a random number. This is actually a 32-bit integer, and when you view it in binary, the flash pattern becomes clear:
So this siren uses a simple alternating flash pattern - off, on, off, on, off, on, etc. These can be configured to create new and far more complex flash patterns than are currently in the game. Along with increasing the sequencer beats per minute you can create some neat stuff.
Here is a (very quickly) thrown together demo to showcase possible patterns. This vehicle uses 6 sirens: two for all the red and blue lights, two for the traffic advisor (which is an extra), and two for the headlight strobes. The headlight strobe coronas have been modified to be white and the vehicle uses a completely custom sirensetting. The pattern for the red and blue lights has been customized for alternating speeds.
Again, this is just rough stages of research so far, but I wanted to share what I had found with the community. Hopefully this will be useful for vehicle developers in designing cars which are non-ELS but offer similar levels of functionality. I will be updating this thread with further research as I discover new things.