} | } | ||||
// using Kirschenbaum to IPA translation, ascii 0x20 to 0x7f | // using Kirschenbaum to IPA translation, ascii 0x20 to 0x7f | ||||
unsigned short ipa1[96] = { | |||||
static const unsigned short ipa1[96] = { | |||||
0x20, 0x21, 0x22, 0x2b0, 0x24, 0x25, 0x0e6, 0x2c8, 0x28, 0x29, 0x27e, 0x2b, 0x2cc, 0x2d, 0x2e, 0x2f, | 0x20, 0x21, 0x22, 0x2b0, 0x24, 0x25, 0x0e6, 0x2c8, 0x28, 0x29, 0x27e, 0x2b, 0x2cc, 0x2d, 0x2e, 0x2f, | ||||
0x252, 0x31, 0x32, 0x25c, 0x34, 0x35, 0x36, 0x37, 0x275, 0x39, 0x2d0, 0x2b2, 0x3c, 0x3d, 0x3e, 0x294, | 0x252, 0x31, 0x32, 0x25c, 0x34, 0x35, 0x36, 0x37, 0x275, 0x39, 0x2d0, 0x2b2, 0x3c, 0x3d, 0x3e, 0x294, | ||||
0x259, 0x251, 0x3b2, 0xe7, 0xf0, 0x25b, 0x46, 0x262, 0x127, 0x26a, 0x25f, 0x4b, 0x26b, 0x271, 0x14b, 0x254, | 0x259, 0x251, 0x3b2, 0xe7, 0xf0, 0x25b, 0x46, 0x262, 0x127, 0x26a, 0x25f, 0x4b, 0x26b, 0x271, 0x14b, 0x254, |
#define PITCHfrise 4 // and 3 must be for the variant preceded by 'r' | #define PITCHfrise 4 // and 3 must be for the variant preceded by 'r' | ||||
#define PITCHfrise2 6 // and 5 must be the 'r' variant | #define PITCHfrise2 6 // and 5 must be the 'r' variant | ||||
unsigned char env_fall[128] = { | |||||
const unsigned char env_fall[128] = { | |||||
0xff, 0xfd, 0xfa, 0xf8, 0xf6, 0xf4, 0xf2, 0xf0, 0xee, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe2, 0xe0, | 0xff, 0xfd, 0xfa, 0xf8, 0xf6, 0xf4, 0xf2, 0xf0, 0xee, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe2, 0xe0, | ||||
0xde, 0xdc, 0xda, 0xd8, 0xd6, 0xd4, 0xd2, 0xd0, 0xce, 0xcc, 0xca, 0xc8, 0xc6, 0xc4, 0xc2, 0xc0, | 0xde, 0xdc, 0xda, 0xd8, 0xd6, 0xd4, 0xd2, 0xd0, 0xce, 0xcc, 0xca, 0xc8, 0xc6, 0xc4, 0xc2, 0xc0, | ||||
0xbe, 0xbc, 0xba, 0xb8, 0xb6, 0xb4, 0xb2, 0xb0, 0xae, 0xac, 0xaa, 0xa8, 0xa6, 0xa4, 0xa2, 0xa0, | 0xbe, 0xbc, 0xba, 0xb8, 0xb6, 0xb4, 0xb2, 0xb0, 0xae, 0xac, 0xaa, 0xa8, 0xa6, 0xa4, 0xa2, 0xa0, | ||||
0x1e, 0x1c, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x10, 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00 | 0x1e, 0x1c, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x10, 0x0e, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x00 | ||||
}; | }; | ||||
unsigned char env_rise[128] = { | |||||
static const unsigned char env_rise[128] = { | |||||
0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, | 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, | ||||
0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, | 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, | ||||
0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, | 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, | ||||
0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfd, 0xff | 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfd, 0xff | ||||
}; | }; | ||||
unsigned char env_frise[128] = { | |||||
static const unsigned char env_frise[128] = { | |||||
0xff, 0xf4, 0xea, 0xe0, 0xd6, 0xcc, 0xc3, 0xba, 0xb1, 0xa8, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x78, | 0xff, 0xf4, 0xea, 0xe0, 0xd6, 0xcc, 0xc3, 0xba, 0xb1, 0xa8, 0x9f, 0x97, 0x8f, 0x87, 0x7f, 0x78, | ||||
0x71, 0x6a, 0x63, 0x5c, 0x56, 0x50, 0x4a, 0x44, 0x3f, 0x39, 0x34, 0x2f, 0x2b, 0x26, 0x22, 0x1e, | 0x71, 0x6a, 0x63, 0x5c, 0x56, 0x50, 0x4a, 0x44, 0x3f, 0x39, 0x34, 0x2f, 0x2b, 0x26, 0x22, 0x1e, | ||||
0x1a, 0x17, 0x13, 0x10, 0x0d, 0x0b, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, | 0x1a, 0x17, 0x13, 0x10, 0x0d, 0x0b, 0x08, 0x06, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, | ||||
0xa4, 0xa8, 0xac, 0xaf, 0xb3, 0xb7, 0xbb, 0xbf, 0xc3, 0xc7, 0xcb, 0xcf, 0xd3, 0xd7, 0xdb, 0xe0 | 0xa4, 0xa8, 0xac, 0xaf, 0xb3, 0xb7, 0xbb, 0xbf, 0xc3, 0xc7, 0xcb, 0xcf, 0xd3, 0xd7, 0xdb, 0xe0 | ||||
}; | }; | ||||
static unsigned char env_r_frise[128] = { | |||||
static const unsigned char env_r_frise[128] = { | |||||
0xcf, 0xcc, 0xc9, 0xc6, 0xc3, 0xc0, 0xbd, 0xb9, 0xb4, 0xb0, 0xab, 0xa7, 0xa2, 0x9c, 0x97, 0x92, | 0xcf, 0xcc, 0xc9, 0xc6, 0xc3, 0xc0, 0xbd, 0xb9, 0xb4, 0xb0, 0xab, 0xa7, 0xa2, 0x9c, 0x97, 0x92, | ||||
0x8c, 0x86, 0x81, 0x7b, 0x75, 0x6f, 0x69, 0x63, 0x5d, 0x57, 0x50, 0x4a, 0x44, 0x3e, 0x38, 0x33, | 0x8c, 0x86, 0x81, 0x7b, 0x75, 0x6f, 0x69, 0x63, 0x5d, 0x57, 0x50, 0x4a, 0x44, 0x3e, 0x38, 0x33, | ||||
0x2d, 0x27, 0x22, 0x1c, 0x17, 0x12, 0x0d, 0x08, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, | 0x2d, 0x27, 0x22, 0x1c, 0x17, 0x12, 0x0d, 0x08, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, | ||||
0xa4, 0xa8, 0xac, 0xaf, 0xb3, 0xb7, 0xbb, 0xbf, 0xc3, 0xc7, 0xcb, 0xcf, 0xd3, 0xd7, 0xdb, 0xe0 | 0xa4, 0xa8, 0xac, 0xaf, 0xb3, 0xb7, 0xbb, 0xbf, 0xc3, 0xc7, 0xcb, 0xcf, 0xd3, 0xd7, 0xdb, 0xe0 | ||||
}; | }; | ||||
static unsigned char env_frise2[128] = { | |||||
static const unsigned char env_frise2[128] = { | |||||
0xff, 0xf9, 0xf4, 0xee, 0xe9, 0xe4, 0xdf, 0xda, 0xd5, 0xd0, 0xcb, 0xc6, 0xc1, 0xbd, 0xb8, 0xb3, | 0xff, 0xf9, 0xf4, 0xee, 0xe9, 0xe4, 0xdf, 0xda, 0xd5, 0xd0, 0xcb, 0xc6, 0xc1, 0xbd, 0xb8, 0xb3, | ||||
0xaf, 0xaa, 0xa6, 0xa1, 0x9d, 0x99, 0x95, 0x90, 0x8c, 0x88, 0x84, 0x80, 0x7d, 0x79, 0x75, 0x71, | 0xaf, 0xaa, 0xa6, 0xa1, 0x9d, 0x99, 0x95, 0x90, 0x8c, 0x88, 0x84, 0x80, 0x7d, 0x79, 0x75, 0x71, | ||||
0x6e, 0x6a, 0x67, 0x63, 0x60, 0x5d, 0x59, 0x56, 0x53, 0x50, 0x4d, 0x4a, 0x47, 0x44, 0x41, 0x3e, | 0x6e, 0x6a, 0x67, 0x63, 0x60, 0x5d, 0x59, 0x56, 0x53, 0x50, 0x4d, 0x4a, 0x47, 0x44, 0x41, 0x3e, | ||||
0x09, 0x0a, 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20 | 0x09, 0x0a, 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20 | ||||
}; | }; | ||||
static unsigned char env_r_frise2[128] = { | |||||
static const unsigned char env_r_frise2[128] = { | |||||
0xd0, 0xce, 0xcd, 0xcc, 0xca, 0xc8, 0xc7, 0xc5, 0xc3, 0xc1, 0xc0, 0xbd, 0xbb, 0xb8, 0xb5, 0xb3, | 0xd0, 0xce, 0xcd, 0xcc, 0xca, 0xc8, 0xc7, 0xc5, 0xc3, 0xc1, 0xc0, 0xbd, 0xbb, 0xb8, 0xb5, 0xb3, | ||||
0xb0, 0xad, 0xaa, 0xa7, 0xa3, 0xa0, 0x9d, 0x99, 0x96, 0x92, 0x8f, 0x8b, 0x87, 0x84, 0x80, 0x7c, | 0xb0, 0xad, 0xaa, 0xa7, 0xa3, 0xa0, 0x9d, 0x99, 0x96, 0x92, 0x8f, 0x8b, 0x87, 0x84, 0x80, 0x7c, | ||||
0x78, 0x74, 0x70, 0x6d, 0x69, 0x65, 0x61, 0x5d, 0x59, 0x55, 0x51, 0x4d, 0x4a, 0x46, 0x42, 0x3e, | 0x78, 0x74, 0x70, 0x6d, 0x69, 0x65, 0x61, 0x5d, 0x59, 0x55, 0x51, 0x4d, 0x4a, 0x46, 0x42, 0x3e, | ||||
0x09, 0x0a, 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20 | 0x09, 0x0a, 0x0b, 0x0c, 0x0e, 0x0f, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20 | ||||
}; | }; | ||||
static unsigned char env_risefall[128] = { | |||||
static const unsigned char env_risefall[128] = { | |||||
0x98, 0x99, 0x99, 0x9a, 0x9c, 0x9d, 0x9f, 0xa1, 0xa4, 0xa7, 0xa9, 0xac, 0xb0, 0xb3, 0xb6, 0xba, | 0x98, 0x99, 0x99, 0x9a, 0x9c, 0x9d, 0x9f, 0xa1, 0xa4, 0xa7, 0xa9, 0xac, 0xb0, 0xb3, 0xb6, 0xba, | ||||
0xbe, 0xc1, 0xc5, 0xc9, 0xcd, 0xd1, 0xd4, 0xd8, 0xdc, 0xdf, 0xe3, 0xe6, 0xea, 0xed, 0xf0, 0xf2, | 0xbe, 0xc1, 0xc5, 0xc9, 0xcd, 0xd1, 0xd4, 0xd8, 0xdc, 0xdf, 0xe3, 0xe6, 0xea, 0xed, 0xf0, 0xf2, | ||||
0xf5, 0xf7, 0xf9, 0xfb, 0xfc, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, | 0xf5, 0xf7, 0xf9, 0xfb, 0xfc, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, | ||||
0x15, 0x12, 0x0f, 0x0d, 0x0a, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 | 0x15, 0x12, 0x0f, 0x0d, 0x0a, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 | ||||
}; | }; | ||||
static unsigned char env_rise2[128] = { | |||||
static const unsigned char env_rise2[128] = { | |||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x06, 0x06, | 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x06, 0x06, | ||||
0x07, 0x08, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, | 0x07, 0x08, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, | ||||
0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1f, 0x20, 0x22, 0x23, 0x25, 0x26, 0x28, 0x29, 0x2b, | 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1f, 0x20, 0x22, 0x23, 0x25, 0x26, 0x28, 0x29, 0x2b, | ||||
0xdc, 0xdf, 0xe2, 0xe4, 0xe7, 0xe9, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfb, 0xfd | 0xdc, 0xdf, 0xe2, 0xe4, 0xe7, 0xe9, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfb, 0xfd | ||||
}; | }; | ||||
static unsigned char env_fall2[128] = { | |||||
static const unsigned char env_fall2[128] = { | |||||
0xfe, 0xfe, 0xfd, 0xfd, 0xfc, 0xfb, 0xfb, 0xfa, 0xfa, 0xf9, 0xf8, 0xf8, 0xf7, 0xf7, 0xf6, 0xf6, | 0xfe, 0xfe, 0xfd, 0xfd, 0xfc, 0xfb, 0xfb, 0xfa, 0xfa, 0xf9, 0xf8, 0xf8, 0xf7, 0xf7, 0xf6, 0xf6, | ||||
0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1, 0xf0, 0xf0, 0xef, 0xee, 0xee, 0xed, 0xec, 0xeb, | 0xf5, 0xf4, 0xf4, 0xf3, 0xf3, 0xf2, 0xf2, 0xf1, 0xf0, 0xf0, 0xef, 0xee, 0xee, 0xed, 0xec, 0xeb, | ||||
0xea, 0xea, 0xe9, 0xe8, 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xde, 0xdd, 0xdc, 0xdb, | 0xea, 0xea, 0xe9, 0xe8, 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0, 0xde, 0xdd, 0xdc, 0xdb, | ||||
0x18, 0x14, 0x11, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00 | 0x18, 0x14, 0x11, 0x0d, 0x0b, 0x09, 0x07, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00 | ||||
}; | }; | ||||
static unsigned char env_fallrise3[128] = { | |||||
static const unsigned char env_fallrise3[128] = { | |||||
0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf4, 0xf1, 0xee, 0xeb, | 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xfc, 0xfa, 0xf8, 0xf6, 0xf4, 0xf1, 0xee, 0xeb, | ||||
0xe8, 0xe5, 0xe1, 0xde, 0xda, 0xd6, 0xd2, 0xcd, 0xc9, 0xc4, 0xbf, 0xba, 0xb6, 0xb0, 0xab, 0xa6, | 0xe8, 0xe5, 0xe1, 0xde, 0xda, 0xd6, 0xd2, 0xcd, 0xc9, 0xc4, 0xbf, 0xba, 0xb6, 0xb0, 0xab, 0xa6, | ||||
0xa1, 0x9c, 0x96, 0x91, 0x8b, 0x86, 0x80, 0x7b, 0x75, 0x6f, 0x6a, 0x64, 0x5f, 0x59, 0x54, 0x4f, | 0xa1, 0x9c, 0x96, 0x91, 0x8b, 0x86, 0x80, 0x7b, 0x75, 0x6f, 0x6a, 0x64, 0x5f, 0x59, 0x54, 0x4f, | ||||
0x76, 0x78, 0x7b, 0x7c, 0x7e, 0x80, 0x81, 0x82, 0x83, 0x83, 0x84, 0x84, 0x83, 0x83, 0x82, 0x81 | 0x76, 0x78, 0x7b, 0x7c, 0x7e, 0x80, 0x81, 0x82, 0x83, 0x83, 0x84, 0x84, 0x83, 0x83, 0x82, 0x81 | ||||
}; | }; | ||||
static unsigned char env_fallrise4[128] = { | |||||
static const unsigned char env_fallrise4[128] = { | |||||
0x72, 0x72, 0x71, 0x71, 0x70, 0x6f, 0x6d, 0x6c, 0x6a, 0x68, 0x66, 0x64, 0x61, 0x5f, 0x5c, 0x5a, | 0x72, 0x72, 0x71, 0x71, 0x70, 0x6f, 0x6d, 0x6c, 0x6a, 0x68, 0x66, 0x64, 0x61, 0x5f, 0x5c, 0x5a, | ||||
0x57, 0x54, 0x51, 0x4e, 0x4b, 0x48, 0x45, 0x42, 0x3f, 0x3b, 0x38, 0x35, 0x32, 0x2f, 0x2c, 0x29, | 0x57, 0x54, 0x51, 0x4e, 0x4b, 0x48, 0x45, 0x42, 0x3f, 0x3b, 0x38, 0x35, 0x32, 0x2f, 0x2c, 0x29, | ||||
0x26, 0x23, 0x20, 0x1d, 0x1b, 0x18, 0x16, 0x14, 0x12, 0x10, 0x0e, 0x0c, 0x0b, 0x0a, 0x09, 0x08, | 0x26, 0x23, 0x20, 0x1d, 0x1b, 0x18, 0x16, 0x14, 0x12, 0x10, 0x0e, 0x0c, 0x0b, 0x0a, 0x09, 0x08, | ||||
0xc0, 0xc7, 0xce, 0xd5, 0xdc, 0xe3, 0xea, 0xf1, 0xf5, 0xf7, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xff | 0xc0, 0xc7, 0xce, 0xd5, 0xdc, 0xe3, 0xea, 0xf1, 0xf5, 0xf7, 0xfa, 0xfc, 0xfd, 0xfe, 0xff, 0xff | ||||
}; | }; | ||||
static unsigned char env_risefallrise[128] = { | |||||
static const unsigned char env_risefallrise[128] = { | |||||
0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x83, 0x84, 0x87, 0x89, 0x8c, 0x8f, 0x92, 0x96, 0x99, 0x9d, 0xa1, | 0x7f, 0x7f, 0x7f, 0x80, 0x81, 0x83, 0x84, 0x87, 0x89, 0x8c, 0x8f, 0x92, 0x96, 0x99, 0x9d, 0xa1, | ||||
0xa5, 0xaa, 0xae, 0xb2, 0xb7, 0xbb, 0xc0, 0xc5, 0xc9, 0xcd, 0xd2, 0xd6, 0xda, 0xde, 0xe2, 0xe6, | 0xa5, 0xaa, 0xae, 0xb2, 0xb7, 0xbb, 0xc0, 0xc5, 0xc9, 0xcd, 0xd2, 0xd6, 0xda, 0xde, 0xe2, 0xe6, | ||||
0xea, 0xed, 0xf0, 0xf3, 0xf5, 0xf8, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xfe, 0xfd, 0xfc, 0xfb, 0xf9, | 0xea, 0xed, 0xf0, 0xf3, 0xf5, 0xf8, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xfe, 0xfd, 0xfc, 0xfb, 0xf9, | ||||
0x50, 0x5a, 0x64, 0x70, 0x7c, 0x83, 0x85, 0x88, 0x8a, 0x8c, 0x8e, 0x8f, 0x91, 0x92, 0x93, 0x93 | 0x50, 0x5a, 0x64, 0x70, 0x7c, 0x83, 0x85, 0x88, 0x8a, 0x8c, 0x8e, 0x8f, 0x91, 0x92, 0x93, 0x93 | ||||
}; | }; | ||||
unsigned char *envelope_data[N_ENVELOPE_DATA] = { | |||||
const unsigned char *envelope_data[N_ENVELOPE_DATA] = { | |||||
env_fall, env_fall, | env_fall, env_fall, | ||||
env_rise, env_rise, | env_rise, env_rise, | ||||
env_frise, env_r_frise, | env_frise, env_r_frise, | ||||
}; | }; | ||||
// indexed by stress | // indexed by stress | ||||
static int min_drop[] = { 6, 7, 9, 9, 20, 20, 20, 25 }; | |||||
static const int min_drop[] = { 6, 7, 9, 9, 20, 20, 20, 25 }; | |||||
// pitch change during the main part of the clause | // pitch change during the main part of the clause | ||||
static int drops_0[8] = { 9, 9, 16, 16, 16, 23, 55, 32 }; | |||||
static const int drops_0[8] = { 9, 9, 16, 16, 16, 23, 55, 32 }; | |||||
// overflow table values are 64ths of the body pitch range (between body_start and body_end) | // overflow table values are 64ths of the body pitch range (between body_start and body_end) | ||||
static signed char oflow[] = { 0, 40, 24, 8, 0 }; | |||||
static signed char oflow_emf[] = { 10, 52, 32, 20, 10 }; | |||||
static signed char oflow_less[] = { 6, 38, 24, 14, 4 }; | |||||
static const signed char oflow[] = { 0, 40, 24, 8, 0 }; | |||||
static const signed char oflow_emf[] = { 10, 52, 32, 20, 10 }; | |||||
static const signed char oflow_less[] = { 6, 38, 24, 14, 4 }; | |||||
#define N_TONE_HEAD_TABLE 13 | #define N_TONE_HEAD_TABLE 13 | ||||
#define N_TONE_NUCLEUS_TABLE 13 | #define N_TONE_NUCLEUS_TABLE 13 | ||||
unsigned char body_start; | unsigned char body_start; | ||||
unsigned char body_end; | unsigned char body_end; | ||||
int *body_drops; | |||||
const int *body_drops; | |||||
unsigned char body_max_steps; | unsigned char body_max_steps; | ||||
char body_lower_u; | char body_lower_u; | ||||
unsigned char n_overflow; | unsigned char n_overflow; | ||||
signed char *overflow; | |||||
const signed char *overflow; | |||||
} TONE_HEAD; | } TONE_HEAD; | ||||
typedef struct { | typedef struct { | ||||
#define T_EMPH 1 | #define T_EMPH 1 | ||||
static TONE_HEAD tone_head_table[N_TONE_HEAD_TABLE] = { | |||||
static const TONE_HEAD tone_head_table[N_TONE_HEAD_TABLE] = { | |||||
{ 46, 57, 78, 50, drops_0, 3, 7, 5, oflow }, // 0 statement | { 46, 57, 78, 50, drops_0, 3, 7, 5, oflow }, // 0 statement | ||||
{ 46, 57, 78, 46, drops_0, 3, 7, 5, oflow }, // 1 comma | { 46, 57, 78, 46, drops_0, 3, 7, 5, oflow }, // 1 comma | ||||
{ 46, 57, 78, 46, drops_0, 3, 7, 5, oflow }, // 2 question | { 46, 57, 78, 46, drops_0, 3, 7, 5, oflow }, // 2 question | ||||
{ 46, 57, 55, 50, drops_0, 3, 7, 5, oflow_less }, // 12 test | { 46, 57, 55, 50, drops_0, 3, 7, 5, oflow_less }, // 12 test | ||||
}; | }; | ||||
static TONE_NUCLEUS tone_nucleus_table[N_TONE_NUCLEUS_TABLE] = { | |||||
static const TONE_NUCLEUS tone_nucleus_table[N_TONE_NUCLEUS_TABLE] = { | |||||
{ PITCHfall, 64, 8, PITCHfall, 70, 18, NULL, 24, 12, 0 }, // 0 statement | { PITCHfall, 64, 8, PITCHfall, 70, 18, NULL, 24, 12, 0 }, // 0 statement | ||||
{ PITCHfrise, 80, 18, PITCHfrise2, 78, 22, NULL, 34, 52, 0 }, // 1 comma | { PITCHfrise, 80, 18, PITCHfrise2, 78, 22, NULL, 34, 52, 0 }, // 1 comma | ||||
{ PITCHfrise, 88, 22, PITCHfrise2, 82, 22, NULL, 34, 64, 0 }, // 2 question | { PITCHfrise, 88, 22, PITCHfrise2, 82, 22, NULL, 34, 64, 0 }, // 2 question | ||||
int overflow_ix = 0; | int overflow_ix = 0; | ||||
int pitch_range; | int pitch_range; | ||||
int pitch_range_abs; | int pitch_range_abs; | ||||
int *drops; | |||||
const int *drops; | |||||
int n_unstressed = 0; | int n_unstressed = 0; | ||||
int unstressed_ix = 0; | int unstressed_ix = 0; | ||||
int unstressed_inc; | int unstressed_inc; | ||||
/* Calculate pitches until next RESET or tonic syllable, or end. | /* Calculate pitches until next RESET or tonic syllable, or end. | ||||
Increment pitch if stress is >= min_stress. | Increment pitch if stress is >= min_stress. | ||||
Used for tonic segment */ | Used for tonic segment */ | ||||
static int calc_pitch_segment(SYLLABLE *syllable_tab, int ix, int end_ix, TONE_HEAD *th, TONE_NUCLEUS *tn, int min_stress, bool continuing) | |||||
static int calc_pitch_segment(SYLLABLE *syllable_tab, int ix, int end_ix, const TONE_HEAD *th, const TONE_NUCLEUS *tn, int min_stress, bool continuing) | |||||
{ | { | ||||
int stress; | int stress; | ||||
int pitch = 0; | int pitch = 0; | ||||
int n_overflow; | int n_overflow; | ||||
int pitch_range; | int pitch_range; | ||||
int pitch_range_abs; | int pitch_range_abs; | ||||
int *drops; | |||||
const int *drops; | |||||
const signed char *overflow_tab; | const signed char *overflow_tab; | ||||
SYLLABLE *syl; | SYLLABLE *syl; | ||||
static int calc_pitches(SYLLABLE *syllable_tab, int control, int start, int end, int tune_number) | static int calc_pitches(SYLLABLE *syllable_tab, int control, int start, int end, int tune_number) | ||||
{ | { | ||||
int ix; | int ix; | ||||
TONE_HEAD *th; | |||||
TONE_NUCLEUS *tn; | |||||
const TONE_HEAD *th; | |||||
const TONE_NUCLEUS *tn; | |||||
int drop; | int drop; | ||||
bool continuing = false; | bool continuing = false; | ||||
static int scale_wav_tab[] = { 45, 38, 45, 45, 55, 45 }; // scale output from different voicing sources | static int scale_wav_tab[] = { 45, 38, 45, 45, 55, 45 }; // scale output from different voicing sources | ||||
// For testing, this can be overwritten in KlattInit() | // For testing, this can be overwritten in KlattInit() | ||||
static short natural_samples2[256] = { | |||||
static const short natural_samples2[256] = { | |||||
2583, 2516, 2450, 2384, 2319, 2254, 2191, 2127, | 2583, 2516, 2450, 2384, 2319, 2254, 2191, 2127, | ||||
2067, 2005, 1946, 1890, 1832, 1779, 1726, 1675, | 2067, 2005, 1946, 1890, 1832, 1779, 1726, 1675, | ||||
1626, 1579, 1533, 1491, 1449, 1409, 1372, 1336, | 1626, 1579, 1533, 1491, 1449, 1409, 1372, 1336, | ||||
-1680, -1732, -1783, -1839, -1894, -1952, -2010, -2072, | -1680, -1732, -1783, -1839, -1894, -1952, -2010, -2072, | ||||
-2133, -2196, -2260, -2325, -2390, -2456, -2522, -2589, | -2133, -2196, -2260, -2325, -2390, -2456, -2522, -2589, | ||||
}; | }; | ||||
static short natural_samples[100] = { | |||||
static const short natural_samples[100] = { | |||||
-310, -400, 530, 356, 224, 89, 23, -10, -58, -16, 461, 599, 536, 701, 770, | -310, -400, 530, 356, 224, 89, 23, -10, -58, -16, 461, 599, 536, 701, 770, | ||||
605, 497, 461, 560, 404, 110, 224, 131, 104, -97, 155, 278, -154, -1165, | 605, 497, 461, 560, 404, 110, 224, 131, 104, -97, 155, 278, -154, -1165, | ||||
-598, 737, 125, -592, 41, 11, -247, -10, 65, 92, 80, -304, 71, 167, -1, 122, | -598, 737, 125, -592, 41, 11, -247, -10, 65, 92, 80, -304, 71, 167, -1, 122, | ||||
int current_value; | int current_value; | ||||
int next_value; | int next_value; | ||||
double temp_diff; | double temp_diff; | ||||
short *samples; | |||||
const short *samples; | |||||
if (source_num == 0) { | if (source_num == 0) { | ||||
samples = natural_samples; | samples = natural_samples; |
double amp_gain0; /* G0 converted to linear gain */ | double amp_gain0; /* G0 converted to linear gain */ | ||||
int num_samples; /* number of glottal samples */ | int num_samples; /* number of glottal samples */ | ||||
double sample_factor; /* multiplication factor for glottal samples */ | double sample_factor; /* multiplication factor for glottal samples */ | ||||
short *natural_samples; /* pointer to an array of glottal samples */ | |||||
const short *natural_samples; /* pointer to an array of glottal samples */ | |||||
long original_f0; /* original value of f0 not modified by flutter */ | long original_f0; /* original value of f0 not modified by flutter */ | ||||
int fadein; | int fadein; |
} ACCENTS; | } ACCENTS; | ||||
// these are tokens to look up in the *_list file. | // these are tokens to look up in the *_list file. | ||||
static ACCENTS accents_tab[] = { | |||||
static const ACCENTS accents_tab[] = { | |||||
{ "_lig", 1 }, | { "_lig", 1 }, | ||||
{ "_smc", 0 }, // smallcap | { "_smc", 0 }, // smallcap | ||||
{ "_tur", 0 }, // turned | { "_tur", 0 }, // turned |
#include "translate.h" | #include "translate.h" | ||||
#include "speech.h" | #include "speech.h" | ||||
const unsigned char pause_phonemes[8] = { | |||||
static const unsigned char pause_phonemes[8] = { | |||||
0, phonPAUSE_VSHORT, phonPAUSE_SHORT, phonPAUSE, phonPAUSE_LONG, phonGLOTTALSTOP, phonPAUSE_LONG, phonPAUSE_LONG | 0, phonPAUSE_VSHORT, phonPAUSE_SHORT, phonPAUSE, phonPAUSE_LONG, phonGLOTTALSTOP, phonPAUSE_LONG, phonPAUSE_LONG | ||||
}; | }; | ||||
int pitch1; | int pitch1; | ||||
int tone_mod; | int tone_mod; | ||||
unsigned char *pitch_env = NULL; | |||||
const unsigned char *pitch_env = NULL; | |||||
PHONEME_DATA phdata_tone; | PHONEME_DATA phdata_tone; | ||||
// indexes are the "length_mod" value for the following phonemes | // indexes are the "length_mod" value for the following phonemes | ||||
// use this table if vowel is not the last in the word | // use this table if vowel is not the last in the word | ||||
static unsigned char length_mods_en[100] = { | |||||
static const unsigned char length_mods_en[100] = { | |||||
// a , t s n d z r N <- next | // a , t s n d z r N <- next | ||||
100, 120, 100, 105, 100, 110, 110, 100, 95, 100, // a <- next2 | 100, 120, 100, 105, 100, 110, 110, 100, 95, 100, // a <- next2 | ||||
105, 120, 105, 110, 125, 130, 135, 115, 125, 100, // , | 105, 120, 105, 110, 125, 130, 135, 115, 125, 100, // , | ||||
}; | }; | ||||
// as above, but for the last syllable in a word | // as above, but for the last syllable in a word | ||||
static unsigned char length_mods_en0[100] = { | |||||
static const unsigned char length_mods_en0[100] = { | |||||
// a , t s n d z r N <- next | // a , t s n d z r N <- next | ||||
100, 150, 100, 105, 110, 115, 110, 110, 110, 100, // a <- next2 | 100, 150, 100, 105, 110, 115, 110, 110, 110, 100, // a <- next2 | ||||
105, 150, 105, 110, 125, 135, 140, 115, 135, 100, // , | 105, 150, 105, 110, 125, 135, 140, 115, 135, 100, // , | ||||
}; | }; | ||||
static unsigned char length_mods_equal[100] = { | |||||
static const unsigned char length_mods_equal[100] = { | |||||
// a , t s n d z r N <- next | // a , t s n d z r N <- next | ||||
110, 120, 100, 110, 110, 110, 110, 110, 110, 110, // a <- next2 | 110, 120, 100, 110, 110, 110, 110, 110, 110, 110, // a <- next2 | ||||
110, 120, 100, 110, 110, 110, 110, 110, 110, 110, // , | 110, 120, 100, 110, 110, 110, 110, 110, 110, 110, // , | ||||
110, 120, 100, 110, 110, 110, 110, 110, 110, 110 | 110, 120, 100, 110, 110, 110, 110, 110, 110, 110 | ||||
}; | }; | ||||
static unsigned char *length_mod_tabs[6] = { | |||||
static const unsigned char *const length_mod_tabs[6] = { | |||||
length_mods_en, | length_mods_en, | ||||
length_mods_en, // 1 | length_mods_en, // 1 | ||||
length_mods_en0, // 2 | length_mods_en0, // 2 |
{ | { | ||||
#endif | #endif | ||||
const short int sin_tab[2048] = { | |||||
static const short int sin_tab[2048] = { | |||||
0, -25, -50, -75, -100, -125, -150, -175, | 0, -25, -50, -75, -100, -125, -150, -175, | ||||
-201, -226, -251, -276, -301, -326, -351, -376, | -201, -226, -251, -276, -301, -326, -351, -376, | ||||
-401, -427, -452, -477, -502, -527, -552, -577, | -401, -427, -452, -477, -502, -527, -552, -577, |
return ENS_OK; | return ENS_OK; | ||||
} | } | ||||
const char *version_string = PACKAGE_VERSION; | |||||
static const char version_string[] = PACKAGE_VERSION; | |||||
ESPEAK_API const char *espeak_Info(const char **ptr) | ESPEAK_API const char *espeak_Info(const char **ptr) | ||||
{ | { | ||||
if (ptr != NULL) | if (ptr != NULL) |
int pitch_base; | int pitch_base; | ||||
int pitch_range; | int pitch_range; | ||||
int p1, p2, p_end; | int p1, p2, p_end; | ||||
unsigned char *pitch_env; | |||||
const unsigned char *pitch_env; | |||||
int max = -1; | int max = -1; | ||||
int min = 999; | int min = 999; | ||||
int y_max = 0; | int y_max = 0; |
return frames; | return frames; | ||||
} | } | ||||
unsigned char *GetEnvelope(int index) | |||||
const unsigned char *GetEnvelope(int index) | |||||
{ | { | ||||
if (index == 0) { | if (index == 0) { | ||||
fprintf(stderr, "espeak: No envelope\n"); | fprintf(stderr, "espeak: No envelope\n"); |
PHONEME_DATA *phdata); | PHONEME_DATA *phdata); | ||||
void FreePhData(void); | void FreePhData(void); | ||||
unsigned char *GetEnvelope(int index); | |||||
const unsigned char *GetEnvelope(int index); | |||||
espeak_ng_STATUS LoadPhData(int *srate, espeak_ng_ERROR_CONTEXT *context); | espeak_ng_STATUS LoadPhData(int *srate, espeak_ng_ERROR_CONTEXT *context); | ||||
int LookupPhonemeString(const char *string); | int LookupPhonemeString(const char *string); | ||||
int LookupPhonemeTable(const char *name); | int LookupPhonemeTable(const char *name); |
} | } | ||||
} | } | ||||
static void DoAmplitude(int amp, unsigned char *amp_env) | |||||
static void DoAmplitude(int amp, const unsigned char *amp_env) | |||||
{ | { | ||||
intptr_t *q; | intptr_t *q; | ||||
WcmdqInc(); | WcmdqInc(); | ||||
} | } | ||||
static void DoPitch(unsigned char *env, int pitch1, int pitch2) | |||||
static void DoPitch(const unsigned char *env, int pitch1, int pitch2) | |||||
{ | { | ||||
intptr_t *q; | intptr_t *q; | ||||
bool pre_voiced; | bool pre_voiced; | ||||
int free_min; | int free_min; | ||||
int value; | int value; | ||||
unsigned char *pitch_env = NULL; | |||||
unsigned char *amp_env; | |||||
const unsigned char *pitch_env = NULL; | |||||
const unsigned char *amp_env; | |||||
PHONEME_TAB *ph; | PHONEME_TAB *ph; | ||||
int use_ipa = 0; | int use_ipa = 0; | ||||
int vowelstart_prev; | int vowelstart_prev; |
} frame_t2; // without the extra Klatt parameters | } frame_t2; // without the extra Klatt parameters | ||||
typedef struct { | typedef struct { | ||||
unsigned char *pitch_env; | |||||
const unsigned char *pitch_env; | |||||
int pitch; // pitch Hz*256 | int pitch; // pitch Hz*256 | ||||
int pitch_ix; // index into pitch envelope (*256) | int pitch_ix; // index into pitch envelope (*256) | ||||
int pitch_inc; // increment to pitch_ix | int pitch_inc; // increment to pitch_ix | ||||
extern PHONEME_LIST phoneme_list[N_PHONEME_LIST+1]; | extern PHONEME_LIST phoneme_list[N_PHONEME_LIST+1]; | ||||
extern unsigned int embedded_list[]; | extern unsigned int embedded_list[]; | ||||
extern unsigned char env_fall[128]; | |||||
extern unsigned char env_rise[128]; | |||||
extern unsigned char env_frise[128]; | |||||
#define MAX_PITCH_VALUE 101 | |||||
extern unsigned char pitch_adjust_tab[MAX_PITCH_VALUE+1]; | |||||
extern const unsigned char env_fall[128]; | |||||
// queue of commands for wavegen | // queue of commands for wavegen | ||||
#define WCMD_KLATT 1 | #define WCMD_KLATT 1 | ||||
#define PITCHfall 0 // standard pitch envelopes | #define PITCHfall 0 // standard pitch envelopes | ||||
#define PITCHrise 2 | #define PITCHrise 2 | ||||
#define N_ENVELOPE_DATA 20 | #define N_ENVELOPE_DATA 20 | ||||
extern unsigned char *envelope_data[N_ENVELOPE_DATA]; | |||||
extern const unsigned char *envelope_data[N_ENVELOPE_DATA]; | |||||
extern int formant_rate[]; // max rate of change of each formant | extern int formant_rate[]; // max rate of change of each formant | ||||
extern SPEED_FACTORS speed; | extern SPEED_FACTORS speed; |
#define OFFSET_ETHIOPIC 0x1200 | #define OFFSET_ETHIOPIC 0x1200 | ||||
// character ranges must be listed in ascending unicode order | // character ranges must be listed in ascending unicode order | ||||
const ALPHABET alphabets[] = { | |||||
static const ALPHABET alphabets[] = { | |||||
{ "_el", OFFSET_GREEK, 0x380, 0x3ff, L('e', 'l'), AL_DONT_NAME | AL_NOT_LETTERS | AL_WORDS }, | { "_el", OFFSET_GREEK, 0x380, 0x3ff, L('e', 'l'), AL_DONT_NAME | AL_NOT_LETTERS | AL_WORDS }, | ||||
{ "_cyr", OFFSET_CYRILLIC, 0x400, 0x52f, 0, 0 }, | { "_cyr", OFFSET_CYRILLIC, 0x400, 0x52f, 0, 0 }, | ||||
{ "_hy", OFFSET_ARMENIAN, 0x530, 0x58f, L('h', 'y'), AL_WORDS }, | { "_hy", OFFSET_ARMENIAN, 0x530, 0x58f, L('h', 'y'), AL_WORDS }, | ||||
0, 0 | 0, 0 | ||||
}; | }; | ||||
const unsigned char utf8_ordinal[] = { 0xc2, 0xba, 0 }; // masculine ordinal character, UTF-8 | |||||
const unsigned char utf8_null[] = { 0 }; // null string, UTF-8 | |||||
static const unsigned char utf8_ordinal[] = { 0xc2, 0xba, 0 }; // masculine ordinal character, UTF-8 | |||||
static const unsigned char utf8_null[] = { 0 }; // null string, UTF-8 | |||||
static Translator *NewTranslator(void) | static Translator *NewTranslator(void) | ||||
{ | { |
return SubstituteChar(tr, c, next_in, ptr, insert, wordflags); | return SubstituteChar(tr, c, next_in, ptr, insert, wordflags); | ||||
} | } | ||||
static const char *UCase_ga[] = { "bp", "bhf", "dt", "gc", "hA", "mb", "nd", "ng", "ts", "tA", "nA", NULL }; | |||||
static const char *const UCase_ga[] = { "bp", "bhf", "dt", "gc", "hA", "mb", "nd", "ng", "ts", "tA", "nA", NULL }; | |||||
static int UpperCaseInWord(Translator *tr, char *word, int c) | static int UpperCaseInWord(Translator *tr, char *word, int c) | ||||
{ | { | ||||
if ((control & espeakKEEP_NAMEDATA) == 0) | if ((control & espeakKEEP_NAMEDATA) == 0) | ||||
InitNamedata(); | InitNamedata(); | ||||
} | |||||
} |
int unstressed_wd1; // stress for $u word of 1 syllable | int unstressed_wd1; // stress for $u word of 1 syllable | ||||
int unstressed_wd2; // stress for $u word of >1 syllable | int unstressed_wd2; // stress for $u word of >1 syllable | ||||
int param[N_LOPTS]; | int param[N_LOPTS]; | ||||
unsigned char *length_mods; | |||||
unsigned char *length_mods0; | |||||
const unsigned char *length_mods; | |||||
const unsigned char *length_mods0; | |||||
#define NUM_DEFAULT 0x00000001 // enable number processing; use if no other NUM_ option is specified | #define NUM_DEFAULT 0x00000001 // enable number processing; use if no other NUM_ option is specified | ||||
#define NUM_THOUS_SPACE 0x00000004 // thousands separator must be space | #define NUM_THOUS_SPACE 0x00000004 // thousands separator must be space |
} | } | ||||
static const char *hex_letters[] = {"'e:j", "b'i:", "s'i:", "d'i:", "'i:", "'ef"}; | |||||
static const char *modifiers[] = { NULL, "_sub", "_sup", NULL }; | |||||
static const char *const hex_letters[] = {"'e:j", "b'i:", "s'i:", "d'i:", "'i:", "'ef"}; | |||||
static const char *const modifiers[] = { NULL, "_sub", "_sup", NULL }; | |||||
// unicode ranges for non-ascii digits 0-9 (these must be in ascending order) | // unicode ranges for non-ascii digits 0-9 (these must be in ascending order) | ||||
static const int number_ranges[] = { | static const int number_ranges[] = { | ||||
0x660, 0x6f0, // arabic | 0x660, 0x6f0, // arabic | ||||
if ((end_flags == 0) || (end_flags & SUFX_UNPRON)) | if ((end_flags == 0) || (end_flags & SUFX_UNPRON)) | ||||
return 1; | return 1; | ||||
return 0; | return 0; | ||||
} | |||||
} |
espeak_VOICE current_voice_selected; | espeak_VOICE current_voice_selected; | ||||
#define N_VOICE_VARIANTS 12 | #define N_VOICE_VARIANTS 12 | ||||
const char variants_either[N_VOICE_VARIANTS] = { 1, 2, 12, 3, 13, 4, 14, 5, 11, 0 }; | |||||
const char variants_male[N_VOICE_VARIANTS] = { 1, 2, 3, 4, 5, 6, 0 }; | |||||
const char variants_female[N_VOICE_VARIANTS] = { 11, 12, 13, 14, 0 }; | |||||
const char *variant_lists[3] = { variants_either, variants_male, variants_female }; | |||||
static const char variants_either[N_VOICE_VARIANTS] = { 1, 2, 12, 3, 13, 4, 14, 5, 11, 0 }; | |||||
static const char variants_male[N_VOICE_VARIANTS] = { 1, 2, 3, 4, 5, 6, 0 }; | |||||
static const char variants_female[N_VOICE_VARIANTS] = { 11, 12, 13, 14, 0 }; | |||||
static const char *const variant_lists[3] = { variants_either, variants_male, variants_female }; | |||||
static voice_t voicedata; | static voice_t voicedata; | ||||
voice_t *voice = &voicedata; | voice_t *voice = &voicedata; | ||||
return 0; | return 0; | ||||
} | } | ||||
return 0; | return 0; | ||||
} | |||||
} |
#if HAVE_SONIC_H | #if HAVE_SONIC_H | ||||
static sonicStream sonicSpeedupStream = NULL; | static sonicStream sonicSpeedupStream = NULL; | ||||
double sonicSpeed = 1.0; | |||||
static double sonicSpeed = 1.0; | |||||
#endif | #endif | ||||
// 1st index=roughness | // 1st index=roughness | ||||
}; | }; | ||||
// set from y = pow(2,x) * 128, x=-1 to 1 | // set from y = pow(2,x) * 128, x=-1 to 1 | ||||
unsigned char pitch_adjust_tab[MAX_PITCH_VALUE+1] = { | |||||
#define MAX_PITCH_VALUE 101 | |||||
static const unsigned char pitch_adjust_tab[MAX_PITCH_VALUE+1] = { | |||||
64, 65, 66, 67, 68, 69, 70, 71, | 64, 65, 66, 67, 68, 69, 70, 71, | ||||
72, 73, 74, 75, 76, 77, 78, 79, | 72, 73, 74, 75, 76, 77, 78, 79, | ||||
80, 81, 82, 83, 84, 86, 87, 88, | 80, 81, 82, 83, 84, 86, 87, 88, | ||||
#define PEAKSHAPEW 256 | #define PEAKSHAPEW 256 | ||||
unsigned char pk_shape1[PEAKSHAPEW+1] = { | |||||
static const unsigned char pk_shape1[PEAKSHAPEW+1] = { | |||||
255, 254, 254, 254, 254, 254, 253, 253, 252, 251, 251, 250, 249, 248, 247, 246, | 255, 254, 254, 254, 254, 254, 253, 253, 252, 251, 251, 250, 249, 248, 247, 246, | ||||
245, 244, 242, 241, 239, 238, 236, 234, 233, 231, 229, 227, 225, 223, 220, 218, | 245, 244, 242, 241, 239, 238, 236, 234, 233, 231, 229, 227, 225, 223, 220, 218, | ||||
216, 213, 211, 209, 207, 205, 203, 201, 199, 197, 195, 193, 191, 189, 187, 185, | 216, 213, 211, 209, 207, 205, 203, 201, 199, 197, 195, 193, 191, 189, 187, 185, | ||||
0 | 0 | ||||
}; | }; | ||||
static unsigned char pk_shape2[PEAKSHAPEW+1] = { | |||||
static const unsigned char pk_shape2[PEAKSHAPEW+1] = { | |||||
255, 254, 254, 254, 254, 254, 254, 254, 254, 254, 253, 253, 253, 253, 252, 252, | 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, 253, 253, 253, 253, 252, 252, | ||||
252, 251, 251, 251, 250, 250, 249, 249, 248, 248, 247, 247, 246, 245, 245, 244, | 252, 251, 251, 251, 250, 250, 249, 249, 248, 248, 247, 247, 246, 245, 245, 244, | ||||
243, 243, 242, 241, 239, 237, 235, 233, 231, 229, 227, 225, 223, 221, 218, 216, | 243, 243, 242, 241, 239, 237, 235, 233, 231, 229, 227, 225, 223, 221, 218, 216, | ||||
0 | 0 | ||||
}; | }; | ||||
static unsigned char *pk_shape; | |||||
static const unsigned char *pk_shape; | |||||
void WavegenInit(int rate, int wavemult_fact) | void WavegenInit(int rate, int wavemult_fact) | ||||
{ | { |