Unfortunately this is not something so easily done.
I've been making some modifications to P25Reflector and P25Gateway for my own areas amateur radio linked system and have also pondered having announcements.
The way MMDVM (well P25Clients) is implemented at least for P25 is taking captured UDP voice frames, modifying the header and then injecting those frames back when you move to a given channel/talkgroup (reflector)
P25Gateway is actually compiled (hard coded) with announcements for the official channels like North America. In order to add your own announcement you would have to capture P25 voice frames, convert them to UDP frames, modify the header and then modify several C++ source files within P25Gateway and then re-compile and replace the binary on every repeater/hotspot that you wanted to have this announcement.
Perhaps someday it could be supported but I find it unlikely due to the lack of simple software allowing a quick capture and header modification of P25 voice frames. It would also require the developers completely re-write how speech is handled.
I'll link to the gateway source below and give a few examples of what I mean.
Below you can see several calls that are hard coded to bring up various announcements based on the talkgroup id.
Below you can see most of the SpeechNA.h file which contains the UDP voice frames.
Code: Select all
#if !defined(SPEECH_NA_H)
#define SPEECH_NA_H
const unsigned char SPEECH_NA[] = {
0x94U, 0x4CU, 0x82U, 0x8EU, 0x6DU, 0x65U, 0x00U, 0x0EU, 0x09U, 0x6FU, 0xD8U,
0x80U, 0x94U, 0x58U, 0x2EU, 0xB8U, 0xC6U, 0x4DU, 0xD8U, 0x0FU, 0x66U, 0xD5U,
0x90U, 0xC0U, 0xCCU, 0xD1U, 0x95U, 0x7DU, 0x1CU, 0x40U, 0x6DU, 0xA9U, 0x86U,
0x90U, 0x5CU, 0x04U, 0x85U, 0x6EU, 0x79U, 0x90U, 0x4EU, 0x54U, 0x2EU, 0x37U,
0x90U, 0x23U, 0xFCU, 0x7FU, 0x7AU, 0x6BU, 0x00U, 0x0FU, 0x1AU, 0x4EU, 0x5EU,
0xA0U, 0x51U, 0x1CU, 0x2EU, 0x99U, 0xA9U, 0x00U, 0x0EU, 0xF8U, 0xC4U, 0xD5U,
0xA0U, 0x5DU, 0x15U, 0x73U, 0xA0U, 0x0FU, 0x9CU, 0x8FU, 0x6AU, 0xBAU, 0xBCU,
0x84U, 0x48U, 0xAEU, 0x2EU, 0x74U, 0xB7U, 0x18U, 0x0FU, 0x37U, 0xAEU, 0x1DU,
0x90U, 0x54U, 0x44U, 0x98U, 0x44U, 0xCFU, 0x58U, 0x48U, 0x3BU, 0xBDU, 0x7EU,
0x90U, 0x43U, 0xDAU, 0x6FU, 0x59U, 0xE0U, 0x58U, 0x4FU, 0x14U, 0xEEU, 0x4FU,
0x80U, 0x90U, 0x39U, 0x2FU, 0xDDU, 0x63U, 0x30U, 0x00U, 0x0CU, 0x03U, 0x18U,
0x90U, 0x4FU, 0x94U, 0x71U, 0xD4U, 0x68U, 0x00U, 0x0DU, 0xF2U, 0x45U, 0x77U,
0x84U, 0x49U, 0xAAU, 0x4CU, 0x94U, 0xC5U, 0x00U, 0x0FU, 0x3BU, 0xFBU, 0x0CU,
0x94U, 0x4CU, 0x82U, 0x05U, 0x25U, 0x1FU, 0x98U, 0x2CU, 0xA8U, 0x45U, 0x3BU,
0x94U, 0x40U, 0xEFU, 0xF8U, 0xBFU, 0x07U, 0x08U, 0x8EU, 0x7EU, 0x8EU, 0x0AU,
0x84U, 0x51U, 0x1AU, 0x83U, 0xFAU, 0xE8U, 0x00U, 0x0CU, 0xDCU, 0x8FU, 0x7BU,
0x50U, 0x48U, 0x9EU, 0xD5U, 0x39U, 0x36U, 0x00U, 0x67U, 0x5EU, 0x1CU, 0x14U,
0x50U, 0x44U, 0xC2U, 0x9EU, 0xFEU, 0x9DU, 0x20U, 0x70U, 0x9AU, 0xD5U, 0x49U,
0x4CU, 0x50U, 0x7DU, 0xF2U, 0x58U, 0x9AU, 0x00U, 0x71U, 0x90U, 0xA0U, 0xFEU,
0x80U, 0x50U, 0xCAU, 0x88U, 0xD7U, 0xFBU, 0x5BU, 0x00U, 0x0FU, 0x21U, 0x27U,
0x5CU, 0x54U, 0x64U, 0x36U, 0x47U, 0xBBU, 0x00U, 0x38U, 0xB3U, 0x9BU, 0x04U,
0x50U, 0x52U, 0x59U, 0x99U, 0xABU, 0xD2U, 0x00U, 0x6DU, 0x81U, 0x95U, 0x99U,
0x14U, 0xC9U, 0x8DU, 0xE9U, 0xF3U, 0xFFU, 0x00U, 0xAFU, 0x99U, 0x6BU, 0xD8U,
0x25U, 0xFFU, 0xDCU, 0x67U, 0xDFU, 0x9CU, 0x81U, 0xA4U, 0xFEU, 0xAEU, 0x87U,
0x2AU, 0x5BU, 0xE4U, 0x1FU, 0x63U, 0xDCU, 0xC3U, 0x30U, 0x46U, 0x50U, 0x7CU,
0x2AU, 0xE7U, 0xFAU, 0x14U, 0x60U, 0xECU, 0xE1U, 0xCFU, 0x34U, 0x10U, 0xA5U,
0x2EU, 0xDDU, 0x17U, 0xC0U, 0xB2U, 0xD8U, 0xFFU, 0xB6U, 0xFCU, 0x25U, 0x48U,
0x2FU, 0x6CU, 0x97U, 0xE8U, 0x8BU, 0x69U, 0xFCU, 0x36U, 0xE9U, 0x0AU, 0x93U,
0x80U, 0x2FU, 0x4FU, 0xA5U, 0xD4U, 0x37U, 0x98U, 0xFEU, 0x9BU, 0x79U, 0x48U,
0x2BU, 0x6FU, 0xC0U, 0x87U, 0x94U, 0x70U, 0xF9U, 0x17U, 0x08U, 0x6EU, 0xAFU,
0x2AU, 0xFFU, 0xC0U, 0x95U, 0x13U, 0xE1U, 0xE3U, 0x08U, 0xFCU, 0x15U, 0xA6U,
0x32U, 0x5EU, 0xB9U, 0xD5U, 0x13U, 0x06U, 0xC9U, 0x97U, 0x60U, 0x46U, 0x53U,
0x41U, 0xCBU, 0xA9U, 0xACU, 0xC8U, 0x44U, 0x80U, 0xBEU, 0x96U, 0xBEU, 0xA2U,
0x35U, 0x70U, 0xEEU, 0x0CU, 0x3EU, 0x18U, 0x81U, 0xB4U, 0x91U, 0x6AU, 0x53U,
0x31U, 0xBBU, 0x2CU, 0x44U, 0x72U, 0x15U, 0x01U, 0xC4U, 0x0AU, 0x61U, 0x6AU,
0x1EU, 0x6DU, 0x48U, 0xFDU, 0x47U, 0x8DU, 0x02U, 0x14U, 0x4DU, 0x38U, 0x5BU,
0x2AU, 0xFFU, 0xE2U, 0x0AU, 0x65U, 0xF2U, 0xE0U, 0xD9U, 0x54U, 0x9CU, 0x38U,
0x80U, 0x2EU, 0x6DU, 0xB3U, 0xB9U, 0x8BU, 0x47U, 0xF1U, 0xD4U, 0x52U, 0x7AU,
0x2EU, 0x6EU, 0xD1U, 0x3FU, 0xC2U, 0xABU, 0xF9U, 0x0EU, 0xBBU, 0x1CU, 0x5AU,
0x26U, 0x77U, 0xE8U, 0x14U, 0xE8U, 0x5FU, 0xA2U, 0xD6U, 0xDBU, 0x65U, 0x2DU,
0x27U, 0x4CU, 0xFBU, 0x09U, 0xE2U, 0xB4U, 0x80U, 0xF7U, 0x13U, 0xBAU, 0xAEU,
0x2BU, 0x48U, 0x9FU, 0xA5U, 0x5DU, 0x23U, 0xFFU, 0xFBU, 0x46U, 0xD5U, 0x25U,
0x2BU, 0x59U, 0xA6U, 0xB3U, 0x89U, 0x50U, 0xFEU, 0x49U, 0xF6U, 0xF6U, 0x1CU,
0x2BU, 0x69U, 0xDEU, 0x94U, 0x92U, 0xC4U, 0xF9U, 0x24U, 0x55U, 0x0BU, 0xDBU,
0x2BU, 0x6DU, 0x90U, 0xA9U, 0x8EU, 0xFEU, 0xF1U, 0x65U, 0x73U, 0xEAU, 0x62U,
0x2BU, 0x6FU, 0xD0U, 0x89U, 0x05U, 0x40U, 0xFCU, 0xDAU, 0x9BU, 0x22U, 0x29U,
0x80U, 0x2BU, 0x6EU, 0xD1U, 0x8BU, 0x4DU, 0x51U, 0xFCU, 0x4CU, 0xE8U, 0xEDU,
0x2BU, 0x4DU, 0xFAU, 0x8AU, 0x06U, 0xE6U, 0xFDU, 0x45U, 0x78U, 0x66U, 0xB3U,
0x2BU, 0x4AU, 0xBDU, 0xB5U, 0x40U, 0x7DU, 0xFDU, 0x7FU, 0x7CU, 0x37U, 0x5AU,
0x2EU, 0xDFU, 0x70U, 0x71U, 0x61U, 0xE4U, 0x80U, 0x76U, 0xCAU, 0xB2U, 0xC5U,
0x39U, 0x4EU, 0xC3U, 0x4FU, 0xF4U, 0x34U, 0x00U, 0xDDU, 0x8BU, 0x60U, 0x36U,
0x29U, 0x5FU, 0x70U, 0xD2U, 0x98U, 0x84U, 0x00U, 0x4DU, 0x49U, 0x4EU, 0xC3U,
0x38U, 0xCFU, 0x8FU, 0x15U, 0x51U, 0xCFU, 0x80U, 0xC4U, 0xBBU, 0x15U, 0x48U,
0x22U, 0x97U, 0x10U, 0x20U, 0xD9U, 0xBEU, 0x00U, 0x6FU, 0x1FU, 0x30U, 0xD9U,
0x2EU, 0x5FU, 0xF5U, 0x82U, 0x17U, 0x05U, 0x00U, 0x89U, 0x63U, 0x04U, 0x1EU,
0x80U, 0x32U, 0xFEU, 0x45U, 0x84U, 0x13U, 0x7BU, 0xFDU, 0x97U, 0x58U, 0x82U,
0x37U, 0x65U, 0x3AU, 0x63U, 0x38U, 0xC7U, 0xD8U, 0x15U, 0x0AU, 0x55U, 0xCCU,
0x3EU, 0xD3U, 0x35U, 0x39U, 0xB7U, 0x93U, 0xF4U, 0x99U, 0xE8U, 0x3EU, 0xEFU,
0x42U, 0xD4U, 0xDEU, 0x98U, 0x1CU, 0x1DU, 0xFCU, 0x74U, 0x70U, 0x38U, 0x68U,
0x3EU, 0xD5U, 0x55U, 0x23U, 0xEBU, 0x65U, 0xFEU, 0x3AU, 0x3FU, 0x80U, 0xDFU,
0x42U, 0x53U, 0x59U, 0x43U, 0x62U, 0xF9U, 0xFDU, 0xC5U, 0xBCU, 0x9FU, 0x42U,
0x42U, 0x3FU, 0x4AU, 0xF9U, 0x05U, 0x14U, 0x80U, 0xF2U, 0x4CU, 0x69U, 0xF9U,
0x41U, 0xFBU, 0x0CU, 0xFCU, 0x2DU, 0x0FU, 0x80U, 0xD7U, 0x15U, 0x39U, 0xB2U,
0x41U, 0xD7U, 0x52U, 0x59U, 0x07U, 0x9EU, 0xB2U, 0xB9U, 0xDFU, 0x15U, 0xDBU,
0x80U, 0x45U, 0x5FU, 0x03U, 0xD7U, 0x61U, 0xA1U, 0x80U, 0xCBU, 0x8EU, 0x76U,
0x40U, 0xA9U, 0x6DU, 0xE9U, 0x00U, 0x3BU, 0x00U, 0x36U, 0x51U, 0x39U, 0xADU,
0xA0U, 0x07U, 0x80U, 0x6BU, 0x4BU, 0x39U, 0x80U, 0x0DU, 0xFFU, 0x88U, 0x50U,
0x90U, 0xD8U, 0x0EU, 0xF9U, 0xC2U, 0x08U, 0x38U, 0x40U, 0x3CU, 0xA0U, 0x77U,
0x90U, 0xCCU, 0xA6U, 0x98U, 0x93U, 0x36U, 0x00U, 0x01U, 0x27U, 0xB7U, 0xD6U,
0x90U, 0x44U, 0xC0U, 0x9EU, 0x6EU, 0x57U, 0x00U, 0x0EU, 0x32U, 0xCFU, 0x25U,
0x90U, 0xD8U, 0x18U, 0xEBU, 0xE4U, 0xECU, 0x5CU, 0x40U, 0x28U, 0xA0U, 0x56U,
0x94U, 0x46U, 0xC5U, 0x15U, 0xFBU, 0xC7U, 0x00U, 0x0EU, 0x8DU, 0x43U, 0x61U,
0x94U, 0x50U, 0x46U, 0xDEU, 0x96U, 0x5AU, 0x38U, 0x0CU, 0x3DU, 0x58U, 0x8AU,
0x80U, 0x84U, 0x4AU, 0xAEU, 0x21U, 0x6BU, 0x19U, 0x98U, 0x0DU, 0x1AU, 0xEFU,
0x94U, 0x31U, 0x56U, 0x38U, 0xD2U, 0xEFU, 0x18U, 0x0BU, 0xBEU, 0x53U, 0x9AU,
0x94U, 0x4AU, 0x8CU, 0x57U, 0x6EU, 0x5AU, 0x00U, 0x0CU, 0x46U, 0x7FU, 0x7FU,
0x90U, 0x55U, 0x66U, 0x99U, 0x43U, 0x0EU, 0x18U, 0x4CU, 0x66U, 0x00U, 0x96U,
0x90U, 0x48U, 0x8BU, 0xF7U, 0x87U, 0xB4U, 0x00U, 0x0BU, 0xD9U, 0xBFU, 0x7FU,
0xA0U, 0xDDU, 0x00U, 0x6BU, 0xBEU, 0x15U, 0x81U, 0x40U, 0xF3U, 0x8FU, 0x10U,
0x90U, 0x3DU, 0x20U, 0x97U, 0x60U, 0x5EU, 0x80U, 0x0CU, 0x78U, 0x2EU, 0x4DU,
0x90U, 0xC0U, 0xDEU, 0xB9U, 0xA9U, 0xBFU, 0x98U, 0x42U, 0x17U, 0x23U, 0xB6U,
0x84U, 0x58U, 0x8BU, 0x3FU, 0x11U, 0xD3U, 0x00U, 0x0CU, 0x1FU, 0xBBU, 0x4DU,
0x80U, 0x84U, 0xD1U, 0x9BU, 0xC5U, 0x7BU, 0xCCU, 0x98U, 0xA3U, 0x1AU, 0x4DU,
0x90U, 0x44U, 0xC2U, 0x09U, 0xCEU, 0x2DU, 0x18U, 0xCEU, 0x3DU, 0x05U, 0x77U,
0x94U, 0x5AU, 0x08U, 0x74U, 0x8FU, 0x95U, 0x08U, 0x0EU, 0x9BU, 0xD4U, 0x98U,
0x90U, 0x48U, 0x8CU, 0xD9U, 0x77U, 0x95U, 0x00U, 0x0EU, 0x2DU, 0xBCU, 0x17U,
0x04U, 0x0CU, 0xFDU, 0x7BU, 0xFBU, 0x7DU, 0xF2U, 0x7BU, 0x3DU, 0x9EU, 0x44U,
0x04U, 0x0CU, 0xFDU, 0x7BU, 0xFBU, 0x7DU, 0xF2U, 0x7BU, 0x3DU, 0x9EU, 0x45U,
0x04U, 0x0CU, 0xFDU, 0x7BU, 0xFBU, 0x7DU, 0xF2U, 0x7BU, 0x3DU, 0x9EU, 0x44U,
0x04U, 0x0CU, 0xFDU, 0x7BU, 0xFBU, 0x7DU, 0xF2U, 0x7BU, 0x3DU, 0x9EU, 0x45U};
const unsigned int SPEECH_NA_COUNT = 90U;