Denman Island, British Columbia
Alesis BRC SysEx Information |
The Alesis BRC generates and responds to MMC (MIDI Machine Control) and MTC (MIDI Time Code) messages. Since these are well-documented elsewhere on the 'Net, I won't discuss them here. However, the BRC also generates and responds to other SysEx messages, in particular data download and upload messages.
Alesis has chosen to keep the SysEx dump format for the BRC (ADAT controller) secret. I have tried to decipher at least the song information, because I wanted to be able to download it into a database. The following information is what I have been able to discover.
| F0 | SysEx |
| 00 00 0E | Alesis manufacturer ID |
| 09 | BRC |
| id | Unit ID (0-126); 127 (7F) indicates all units |
| op | Operation Code |
| <data> | depends on Operation Code; may not exist |
| F7 | EOX |
Can be sent to or received from the BRC.
This message is sent from the BRC in response to the Dump Song nn? prompt. It consists of a single song block. See below for details of the song block.
When sent to the BRC, the song data are loaded into the BRC's memory.
These messages are sent as a group from the BRC in response to the Dump AllData? prompt. Twenty-two individual SysEx messages are sent. The first two contain the Global Data (block 20) and Tempo Map (block 21) blocks. The remaining 20 messages (blocks 0-19) are song blocks for the 20 possible songs in the BRC's memory. See below for details of the song block. All 22 SysEx messages in the group use the 01h OpCode. The first byte in each data block can be 0-19, identifying the 20 songs, and 20 and 21 for the Global Data and Tempo Map blocks, respectively. Song messages are 823 bytes long, including the SysEx bytes. The Global Data block is 187 bytes, and the Tempo Map block is 697 bytes.
When sent to the BRC, the data are loaded into the BRC's memory.
Response is the same as the request. Values of st byte are: 00h for off, 7Fh for on. Values of sw byte are:
Response is the same as the request.
| sw byte | st byte | Meaning |
|---|---|---|
| 3 | 2 | Absolute, Normal |
| 3 | 3 | Relative, Normal |
| 3 | 4 | SMPTE |
| 3 | 8 | Bars |
| 4 | 0 | SMPTE 24 fps |
| 4 | 1 | SMPTE 25 fps |
| 4 | 2 | SMPTE 29.97 fps |
| 4 | 3 | SMPTE 29.97 fps drop |
| 4 | 4 | SMPTE 30 fps |
| 4 | 5 | SMPTE 30 fps drop |
| 0Bh | 0-9 | Set Display Contrast |
Response is the same as the request. I don't know what this does or indicates.
Response is the same as the request. Values of st byte are: 00h for off, 7Fh for on. Values of sw byte are:
Response is the same as the request. Values of st1 byte are:
Response is the same as the request. I don't know what this does or indicates.
Values for data bytes are:
If more than one data byte is present, each selected group is turned on in turn. This does not appear particularly useful. As each group is turned on, a 59h message with one data byte is sent, indicating the selected group. I have not found an "all off" message yet; The "All Clear" button does not generate a SysEx message. Nor have I found any way to set or detect the settings of the track Record Enable switches.
The BRC does not send or receive MIDI Song Select (F3h) messages. Instead, it uses OpCode 5Ah SysEx messages. The sn byte is the song number (1-20). The BRC does not acknowledge this message, but it does respond to it.
This is a request for the BRC's software version number(?). The data block can be empty, so the entire message is 8 bytes long. When the BRC receives it, it responds with the OpCode 44h message.
This message selects the specified locate number from the current song, and goes to that location. ln is the locate number (1-20). 00 is for manual; 21 for Punch-In; 22 for Punch-Out.
This message is sent to the BRC. In response, the BRC sends a 4Ch message containing the number of ADAT tape drives currently slaved to the BRC.
Response is the same as the request. The BRC display changes to tempo map mode. I have not explored the possibilities of this message. Probably it accepts some data.
The BRC responds to this by transmitting a 00h message containing the data for requested song number. The sn byte is 1-19 for the song number (1-19) or 20 for Global Data; 21 for Tempo Map. 00 downloads a 822-byte message which has no song number byte, and no useful data!
BUG ALERT!. Version 2.04 of the BRC software (possibly others too?) bas a bug that affects this message. The developers appear to have become confused about block numbers (0-19) vs. song numbers (1-20). This request uses song numbers (1-19) for songs 1-19, and block numbers (20, 21) for the global data and tempo map. A song number of 0 will return garbage. There is no way to obtain song 20! Furthermore, since there appears to be no "Request All Blocks" message, the only way to obtain data for song 20 is to get the user to do the download from the BRC's panel.
It would be logical to have such a request, indeed, it is almost inconceivable not to have it. Still, I have not yet discovered this message, if it exists.
It would also be nice to have a Display Text message. I have not yet discovered this message, if it exists.
This message is sent from the BRC in response to an OpCode 07h message. The data block consists of two bytes (v1 and v2), containing the values 02 and 04. This could possibly be the software revision number, meaning in this case 2.04.
Sent from the BRC in response to a 57h message. The nt byte contains the number of ADAT slave machines.
The data block of a Song message (excluding the 7 preceding bytes of SysEx info and the trailing EOX) is 815 bytes long. The first 3 bytes are unencoded. The first byte (0-19) is the song number-1. The second byte is 06h, and the third byte is 44h. The meanings of these two bytes are unknown.
The remaining 812 bytes are encoded such that eight physical 7-bit bytes contain seven logical 8-bit bytes. The first logical 8-bit byte consists of the first 7-bit byte (at the low-order end) and one low-order bit from the next 7-bit byte (at the high-order end). The second 8-bit byte consists of the remaining 6 bits of the second 7-bit byte (at the low-order end) and two low-order bits from the third 7-bit byte (at the high order end). Etc.
After decoding the 7-bit data into 8-bit bytes, the song data is as follows:
| bytes (numbering from 1) | meaning |
|---|---|
| 1-10 | song name |
| 11-14 | time (see below) |
| 15-22 | Locate 1 name |
| 23-30 | Locate 2 name |
| ... | ... |
| 179-186 | Locate 20 name |
| 187-190 | Locate 1 time (see below) |
| 191-194 | Locate 2 time (see below) |
| ... | ... |
| 255-258 | Locate 20 time (see below) |
| remaining | unknown |
Song and locate times are sent as 4-byte integers, representing the number of 48kHz samples since the beginning of the tape. The four bytes are sent high-byte first.
The zero time is some arbitrary point near the physical start of tape. The time shown on the BRC console and the ADAT front panels as '00:00:00' is sent in the SysEx messages as 5760000, which is 02:00:00. In other words, to extract the 'panel' time, you must subtract 2 minutes from the 4-byte integer value.
Home
Copyright © 2005 Keith Walker
Last modified: 3-Jan-2005