Linkit en Text till tal (3 / 4 steg)
Steg 3: kod
Kopia den nedan koden och klistra in den nedan kod i Arduino IDE och välj sedan lämplig COM-port och ladda upp koden till Linkit One.
#include
#include
#include
uint16_t pitchPhase, form1Phase, form2Phase, form3Phase;
uint16_t pitchPhaseInc, form1PhaseInc, form2PhaseInc, form3PhaseInc;
uint8_t form1Amp, form2Amp, form3Amp;
uint8_t noiseMod = 10;
int8_t sinCalc [256] PROGMEM = {
/ * Denna tabell rullar en hel del funktioner tillsammans för hastighet.
Utvinna fas och amplitud från nybble packad form
Sine beräkning
Exponentiell amplitud kartläggning
Uppskalning till lämplig bredd
ROUND)
Floor(a/16,1)
* () SYND
2
* PI()
* OM ()
MOD(a,16),
EXP(0.18*mod(a,16)),
0
) /16
) * 127
0)
*/
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,2,2,3,3,4,5,6,7,8,10,12,14,17,20,24,
0,4,4,5,6,7,9,11,13,15,18,22,26,31,37,45,
0,5,6,7,8,10,12,14,17,20,24,28,34,41,49,58,
0,5,6,7,9,10,12,15,18,21,26,31,37,44,53,63,
0,5,6,7,8,10,12,14,17,20,24,28,34,41,49,58,
0,4,4,5,6,7,9,11,13,15,18,22,26,31,37,45,
0,2,2,3,3,4,5,6,7,8,10,12,14,17,20,24,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,-2,-2,-3,-3,-4,-5,-6,-7,-8,-10,-12,-14,-17,-20,-24,
0,-4,-4,-5,-6,-7,-9,-11,-13,-15,-18,-22,-26,-31,-37,-45,
0,-5,-6,-7,-8,-10,-12,-14,-17,-20,-24,-28,-34,-41,-49,-58,
0,-5,-6,-7,-9,-10,-12,-15,-18,-21,-26,-31,-37,-44,-53,-63,
0,-5,-6,-7,-8,-10,-12,-14,-17,-20,-24,-28,-34,-41,-49,-58,
0,-4,-4,-5,-6,-7,-9,-11,-13,-15,-18,-22,-26,-31,-37,-45,
0,-2,-2,-3,-3,-4,-5,-6,-7,-8,-10,-12,-14,-17,-20,-24
};
int8_t sqrCalc [256] PROGMEM = {
0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,
0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,
0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,
0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,
0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,
0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,
0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,
0,1,2,2,2,3,3,4,5,5,6,8,9,11,13,16,
0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,
0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,
0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,
0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,
0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,
0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,
0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16,
0,-1,-2,-2,-2,-3,-3,-4,-5,-5,-6,-8,-9,-11,-13,-16
};
Ändra dessa kommer kräver också skriva om audioOn()
#if defined(__AVR_ATmega8__)
#define LED_PIN 13
#define LED_PORT PORTB
#define LED_BIT 5
På gamla ATmega8 styrelser är produktionen på stift 11
#define PWM_PIN 11
#define PWM_VALUE OCR2
#define PWM_INTERRUPT TIMER2_OVF_vect
#elif defined(__AVR_ATmega1280__)
#define LED_PIN 13
#define LED_PORT PORTB
#define LED_BIT 7
#define PWM_PIN 3
#define PWM_VALUE OCR3C
#define PWM_INTERRUPT TIMER3_OVF_vect
#else
#define LED_PIN 13
#define LED_PORT PORTB
#define LED_BIT 5
För moderna ATmega168 brädor är produktionen på stift 3
#define PWM_PIN 3
#define PWM_VALUE OCR2B
#define PWM_INTERRUPT TIMER2_OVF_vect
#endif
void audioOn() {
#if defined(__AVR_ATmega8__)
ATmega8 har olika register
TCCR2 = _BV(WGM20) | _BV(COM21) | _BV(CS20);
TIMSK = _BV(TOIE2);
#elif defined(__AVR_ATmega1280__)
TCCR3A = _BV(COM3C1) | _BV(WGM30);
TCCR3B = _BV(CS30);
TIMSK3 = _BV(TOIE3);
#else
Ställ in PWM till 31.25 kHz, fasen exakt
TCCR2A = _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS20);
TIMSK2 = _BV(TOIE2);
#endif
}
void setup() {
pinMode(PWM_PIN,OUTPUT);
audioOn();
pinMode(LED_PIN,OUTPUT);
}
#define FORMANT_SZ 7
fasttexttypen {
_SP, _DOT, _QM, _COM, _HYP, _IY, _IH, _EH, _AE, _AA,
_AH, PETER, _UH, _AX, _IX, _ER, _UX, _OH, _RX, _LX,
_WX, _YX, _WH, TRITON, _L, _W, _Y, _M, _N, _NX,
_DX, _Q, _S, _SH, _F, _TH, __H, __X, _Z, _ZH,
_V, _DH, _CHa, _CHb, _Ja, svart, _Jc, _Jd, _EY, _AY,
_OY, _AW, _OW, _UW, _Ba, _Bb, _Bc, _Da, _Db, _Dc,
_Ga, _Gb, _Gc, _GXa, _GXb, _GXc, _Pa, _Pb, _Pc, _Ta,
_Tb, _Tc, _Ka, _Kb, _Kc, _KXa, _KXb, _KXc
};
uint8_t formantTable [PROGMEM] = {
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, / * 00 utrymme * / 0x13, 0x43, 0x5b, 0x0, 0x0, 0x0, 0x0, / * 01. * /
0x13, 0x43, 0x5b, 0x0, 0x0, 0x0, 0x0, / * 02? * / 0x13, 0x43, 0x5b, 0x0, 0x0, 0x0, 0x0, / * 03, * /
0X13, 0X43, 0X5B, 0X0, 0X0, 0X0, 0X0, / * 04-* / 0XA, 0X54, 0X6E, 0XD, 0XA, 0X8 0X0, / * 05 IY * /
0XE, 0X49, 0X5D, 0XD, 0X7, 0X8 0X0, / * 06 IH * / 0X13, 0X43, 0X5B, 0XE, 0XD, 0X8 0X0, / * 07 EH * /
0X18, 0X3F, 0X58, 0XF, 0XE, 0X8 0X0, / * 08 AE * / 0X1B, 0X28, 0X59, 0XF, 0XD, 0X1, 0X0, / * 09 AA * /
0X17, 0X2C, 0X57, 0XF, 0XC, 0X1, 0X0, / * 10 AH * / 0X15, 0X1F, 0X58, 0XF, 0XC, 0X0, 0X0, / * 11 AO * /
0X10, 0X25, 0X52, 0XF, 0XB, 0X1, 0X0, / * 12 UH * / 0X14, 0X2C, 0X57, 0XE, 0XB, 0X0, 0X0, / * 13 AX * /
0XE, 0X49, 0X5D, 0XD, 0XB, 0X7, 0X0, / * 14 IX * / 0X12, 0X31, 0X3E, 0XC, 0XB, 0X5, 0X0, / * 15 ER * /
0XE, 0X24, 0X52, 0XF, 0XC, 0X1, 0X0, / * 16 UX * / 0X12, 0X1E, 0X58, 0XF, 0XC, 0X0, 0X0, / * 17 OH * /
0X12, 0X33, 0X3E, 0XD, 0XC, 0X6, 0X0, / * 18 RX * / 0X10, 0X25, 0X6E, 0XD, 0X1, 0X8 0X0, / * 19 LX * /
0XD, 0X1D, 0X50, 0XD, 0X0, 0X8 0X0, / * 20 WX * / 0XF, 0X45, 0X5D, 0XE, 0XC, 0X7, 0X0, / * 21 YX * /
0XB, 0X18, 0X5A, 0XD, 0X0, 0X8 0X0, / * 22 WH * / 0X12, 0X32, 0X3C, 0XC, 0XA, 0X5, 0X0, / * 23 R * /
0XE, 0X1E, 0X6E, 0XD, 0X1, 0X8 0X0, / * 24 L * / 0XB, 0X18, 0X5A, 0XD, 0X0, 0X8 0X0, / * 25 W * /
0X9, 0X53, 0X6E, 0XD, 0XA, 0X8 0X0, / * 26 Y * / 0X6, 0X2E, 0X51, 0XC, 0X3, 0X0, 0X0, / * 27 M * /
0X6, 0X36, 0X79, 0X9, 0X9, 0X0, 0X0, / * 28 N * / 0X6, 0X56, 0X65, 0X9, 0X6, 0X3, 0X0, / * 29 NX * /
0X6, 0X36, 0X79, 0X0, 0X0, 0X0, 0X0, / * 30 DX * / 0X11, 0X43, 0X5B, 0X0, 0X0, 0X0, 0X0, / * 31 Q * /
0X6, 0X49, 0X63, 0X7, 0XA, 0XD, 0XF, / * 32 S * / 0X6, 0X4F, 0X6A, 0X0, 0X0, 0X0, 0X0, / * 33 SH * /
0X6, 0X1A, 0X51, 0X3, 0X3, 0X3, 0XF, / * 34 F * / 0X6, 0X42, 0X79, 0X0, 0X0, 0X0, 0X0, / * 35 TH * /
0XE, 0X49, 0X5D, 0X0, 0X0, 0X0, 0X0, / * 36 /H* / 0X10, 0X25, 0X52, 0X0, 0X0, 0X0, 0X0, / * 37 /X* /
0X9, 0X33, 0X5D, 0XF, 0X3, 0X0, 0X3, / * 38 Z * / 0XA, 0X42, 0X67, 0XB, 0X5, 0X1, 0X0, / * 39 ZH * /
0X8, 0X28, 0X4C, 0XB, 0X3, 0X0, 0X0, / * 40 V * / 0XA, 0X2F, 0X5D, 0XB, 0X4, 0X0, 0X0, / * 41 DH * /
0x6, 0x4f, 0x65, 0x0, 0x0, 0x0, 0x0, / * 42 CHa * / 0x6, 0x4f, 0x65, 0x0, 0x0, 0x0, 0x0, / * 43 Chohung bank * /
0x6, 0x42, 0x79, 0x1, 0x0, 0x0, 0x0, / * 44 Ja * / 0x5, 0x42, 0x79, 0x1, 0x0, 0x0, 0x0, / * 45 Jb * /
0x6, 0x6e, 0x79, 0x0, 0xa, 0xe, 0x0, / * 46 Jc * / 0x0, 0x0, 0x0, 0x2, 0x2, 0x1, 0x0, / * 47 Jd * /
0X13, 0X48, 0X5A, 0XE, 0XE, 0X9, 0X0, / * 48 EY * / 0X1B, 0X27, 0X58, 0XF, 0XD, 0X1, 0X0, / * 49 AY * /
0X15, 0X1F, 0X58, 0XF, 0XC, 0X0, 0X0, / * 50 OY * / 0X1B, 0X2B, 0X58, 0XF, 0XD, 0X1, 0X0, / * 51 AW * /
0X12, 0X1E, 0X58, 0XF, 0XC, 0X0, 0X0, / * 52 OW * / 0XD, 0X22, 0X52, 0XD, 0X0, 0X8 0X0, / * 53 UW * /
0x6, 0x1a, 0x51, 0x2, 0x0, 0x0, 0x0, / * 54 Ba * / 0x6, 0x1a, 0x51, 0x4, 0x1, 0x0, 0xf, / * 55 Bb * /
0x6, 0x1a, 0x51, 0x0, 0x0, 0x0, 0x0, / * 56 f.Kr. * / 0x6, 0x42, 0x79, 0x2, 0x0, 0x0, 0x0, / * 57 Da * /
0x6, 0x42, 0x79, 0x4, 0x1, 0x0, 0xf, / * 58 Db * / 0x6, 0x42, 0x79, 0x0, 0x0, 0x0, 0x0, / * 59 Dc * /
0x6, 0x6e, 0x70, 0x1, 0x0, 0x0, 0x0, / * 60 Ga * / 0x6, 0x6e, 0x6e, 0x4, 0x1, 0x0, 0xf, / * 61 Gb * /
0x6, 0x6e, 0x6e, 0x0, 0x0, 0x0, 0x0, / * 62 Gc * / 0x6, 0x54, 0x5e, 0x1, 0x0, 0x0, 0x0, / * 63 GXa * /
0x6, 0x54, 0x5e, 0x4, 0x1, 0x0, 0xf, / * 64 GXb * / 0x6, 0x54, 0x5e, 0x0, 0x0, 0x0, 0x0, / * 65 GXc * /
0x6, 0x1a, 0x51, 0x0, 0x0, 0x0, 0x0, / * 66 Pa * / 0x6, 0x1a, 0x51, 0x0, 0x0, 0x0, 0x0, / * 67 Pb * /
0x6, 0x1a, 0x51, 0x0, 0x0, 0x0, 0x0, / * 68 pc * / 0x6, 0x42, 0x79, 0x0, 0x0, 0x0, 0x0, / * 69 Ta * /
0x6, 0x42, 0x79, 0x0, 0x0, 0x0, 0x0, / * 70 Tb * / 0x6, 0x42, 0x79, 0x0, 0x0, 0x0, 0x0, / * 71 Tc * /
0x6, 0x6d, 0x65, 0x0, 0x0, 0x0, 0x0, / * 72 ka * / 0xa, 0x56, 0x65, 0xc, 0xa, 0x7, 0x0, / * 73 Kb * /
0xA, 0x6d, 0x70, 0x0, 0x0, 0x0, 0x0, / * 74 kc * / 0x6, 0x54, 0x5e, 0x0, 0x0, 0x0, 0x0, / * 75 KXa * /
0x6, 0x54, 0x5e, 0x0, 0xa, 0x5, 0x0, / * 76 KXb * / 0x6, 0x54, 0x5e, 0x0, 0x0, 0x0, 0x0 / * 77 KXc * /
};
uint16_t pitchTable [64] = {
Täcker A1 till C7
58,61,65,69,73,77,82,86,92,97,
103,109,115,122,129,137,145,154,163,173,
183,194,206,218,231,244,259,274,291,308,
326,346,366,388,411,435,461,489,518,549,
581,616,652,691,732,776,822,871,923,978,
1036,1097,1163,1232,1305,1383,1465,1552,1644,1742,
1845,1955,2071,2195
};
uint8_t frameList [PROGMEM] = {
#if 1
_Da, 3, 0, 39, _Db, 1, 0, 39, _Dc, 1, 3, 39, _EY, 8, 6, 39, _YX, 20, 3, 39, / / Dai...
_Z, 10, 0, 36, _IY, 35, 3, 36, / /... sy
_Da, 3, 0, 32, _Db, 1, 0, 32, _Dc, 1, 3, 32, _EY, 8, 6, 32, _YX, 20, 3, 32, / / Dai...
_Z, 10, 0, 27, _IY, 35, 3, 27, / /... sy
_Ga, 2, 0, 29, _Gb, 2, 0, 29, _Gc, 2, 0, 29, _IH, 10, 3, 29, _V, 5, 0, 29, / / ge
_M, 2, 0, 31, _IY, 10, 3, 31, / / mig
_YX, 5, 0, 32, Jhonny, 10, 0, 32, _RX, 5, 0, 32, / / din
_AH, 25, 0, 29, _NX, 5, 0, 29, / / ett...
_S, 2, 0, 32, _ER, 10, 0, 32, _RX, 3, 0, 32, / /... simuleringsmodellen ger svar
_Da, 3, 0, 27, _Db, 1, 0, 27, _Dc, 1, 3, 27, _UX, 80, 3, 27, _WX, 5, 0, 27, / / göra
_AY, 5, 20, 34, _YX, 10, 0, 34, _M, 8, 0, 34, / / jag är
__H, 5, 0, 39, _AX, 30, 0, 39, _F, 10, 0, 39, / / halva
_Ka, 3, 0, 36, _Kb, 3, 0, 36, _Kc, 4, 0, 36, Triton, 5, 0, 36, _EY, 30, 0, 36, / / cra...
_Z, 5, 0, 32, _IY, 40, 0, 32, / /... ZY
Jhonny, 10, 0, 29, _LX, 5, 0, 29, / / alla
_F, 5, 0, 31, Jhonny, 10, 0, 31, / / för
_DH, 5, 0, 32, _AH, 10, 0, 32, / / den
_L, 5, 0, 34, _AH, 20, 0, 34, _V, 5, 0, 34, / / love
_AA, 10, 0, 36, _V, 5, 0, 36, / / av
_Y, 10, 0, 34, _UX, 80, 0, 34, / / du
_IH, 10, 0, 36, _Ta, 2, 0, 36, _Tb, 1, 0, 36, _Tc, 2, 0, 36, / / det
_W, 2, 0, 37, _OH, 10, 0, 37, _N, 1, 0, 37, _Ta, 1, 0, 37, _Tb, 1, 0, 37, _Tc, 1, 0, 37, / / kommer inte
_Ba, 2, 0, 36, _Bb, 1, 0, 36, _Bc, 2, 0, 36, _IY, 10, 0, 36, / / vara
_AH, 15, 0, 34, / / a
_S, 2, 0, 39, _Ta, 2, 0, 39, _Tb, 2, 0, 39, _Tc, 2, 0, 39, _AY, 1, 10, 39, _YX, 10, 0, 39, / / snygga...
_L, 3, 0, 36, _IH, 10, 0, 36, _SH, 2, 0, 36, / /... lish
_M, 5, 0, 34, _AE, 10, 0, 34, / / ma...
Triton, 5, 0, 32, _IH, 60, 0, 32, _Ja, 2, 0, 32, svart, 2, 0, 32, _Jc, 2, 0, 32, / /... rriage
_AY, 5, 10, 34, _YX, 5, 0, 34, / / JAG
_Ka, 2, 0, 36, _Kb, 2, 0, 36, _Kc, 2, 0, 36, _AH, 20, 0, 36, _N, 2, 0, 36, _Ta, 2, 0, 36, _Tb, 2, 0, 26, _Tc, 2, 0, 36, / / kan inte
_AX, 15, 0, 32, / / a...
_F, 5, 0, 29, Peter, 20, 0, 29, Triton, 2, 0, 29, _Da, 1, 0, 29, _Db, 1, 0, 29, _Dc, 1, 0, 29, / /... fford
_AX, 15, 0, 32, / / a
_Ka, 1, 0, 29, _Kb, 1, 0, 29, _Kc, 1, 0, 29, _AE, 12, 0, 29, / / ca...
Triton, 5, 0, 27, _IH, 45, 0, 27, _Ja, 2, 0, 27, svart, 2, 0, 27, _Jc, 2, 0, 27, / /... rriage
_Ba, 1, 0, 27, _Bb, 1, 0, 27, _Bc, 1, 0, 27, _AH, 10, 0, 27, _Ta, 1, 0, 27, _Tb, 1, 0, 27, _Tc, 1, 0, 27, / / men
_Y, 5, 0, 32, _UH, 10, 10, 32, _L, 5, 0, 32, / / du kommer
_L, 3, 0, 36, _UH, 10, 0, 36, _Ka, 1, 0, 36, _Kb, 1, 0, 36, _Kc, 1, 0, 36, / / look
_S, 2, 0, 34, _W, 2, 0, 34, _IY, 20, 0, 34, _Ta, 2, 0, 34, _Tb, 2, 0, 34, _Tc, 2, 0, 34, / / söt
_AX, 15, 0, 27, / / a...
_Ka, 2, 0, 32, _Kb, 2, 0, 32, _Kc, 2, 0, 32, Triton, 2, 0, 32, _AA, 20, 0, 32, _S, 5, 0, 32, / /... Cross
_DH, 5, 0, 36, _AH, 10, 0, 36, / / den
_S, 2, 0, 34, _IY, 10, 0, 34, _Ta, 2, 0, 34, _Tb, 2, 0, 34, _Tc, 2, 0, 34, / / seat
_AA, 10, 0, 36, _V, 5, 0, 36, / / av
_AE, 15, 0, 37, / / a
_Ba, 2, 0, 39, _Bb, 2, 0, 39, _Bc, 2, 0, 39, _AY, 5, 5, 39, _YX, 5, 0, 39, / / bi...
_S, 5, 0, 36, _IH, 10, 0, 36, / /... CY...
_Ka, 2, 0, 32, _Kb, 2, 0, 32, _Kc, 2, 0, 32, _L, 9, 0, 32, / /... CLE
_M, 2, 0, 34, _EY, 5, 10, 34, _YX, 10, 0, 34, _Da, 2, 0, 34, _Db, 2, 0, 34, _Dc, 2, 0, 34, / / gjorts
_F, 5, 0, 27, _OY, 1, 5, 27, _RX, 5, 0, 27, / / för
_Ta, 2, 0, 32, _Tb, 2, 0, 32, _Tc, 2, 0, 32, _UX, 50, 0, 32, / / två
#endif
_Ta, 0, 0, 61
};
int frameTime = 15. MS
uint16_t basePitch;
int formantScale;
void loop() {
formantScale = 54; //random (20,80); //54;
uint8_t * framePos = frameList;
While(1) {
int n;
uint8_t startFormant, staticFrames, tweenFrames;
uint16_t startPitch, nextPitch;
uint8_t nextFormant;
int16_t startForm1PhaseInc, startForm2PhaseInc, startForm3PhaseInc;
uint8_t startForm1Amp, startForm2Amp, startForm3Amp;
uint8_t startMod;
uint8_t * formantPos;
Läs nästa framelist objekt
startFormant = pgm_read_byte(framePos++);
staticFrames = pgm_read_byte(framePos++);
om (! staticFrames) bryta; Slutet av fras
tweenFrames = pgm_read_byte(framePos++);
startPitch = pitchTable[pgm_read_byte(framePos++)];
nextFormant = pgm_read_byte(framePos);
nextPitch = pitchTable[pgm_read_byte(framePos+3)];
pitchPhaseInc = startPitch;
formantPos = formantTable + startFormant * FORMANT_SZ;
form1PhaseInc = startForm1PhaseInc = pgm_read_byte(formantPos++) * formantScale;
form2PhaseInc = startForm2PhaseInc = pgm_read_byte(formantPos++) * formantScale;
form3PhaseInc = startForm3PhaseInc = pgm_read_byte(formantPos++) * formantScale;
form1Amp = startForm1Amp = pgm_read_byte(formantPos++);
form2Amp = startForm2Amp = pgm_read_byte(formantPos++);
form3Amp = startForm3Amp = pgm_read_byte(formantPos++);
noiseMod = startMod = pgm_read_byte(formantPos++);
för (; staticFrames--;) delay(frameTime);
om (tweenFrames) {
uint8_t * formantPos;
int16_t deltaForm1PhaseInc, deltaForm2PhaseInc, deltaForm3PhaseInc;
int8_t deltaForm1Amp, deltaForm2Amp, deltaForm3Amp;
int8_t deltaMod;
uint8_t nextMod;
int16_t deltaPitch;
tweenFrames--;
formantPos = formantTable + nextFormant * FORMANT_SZ;
deltaForm1PhaseInc = pgm_read_byte(formantPos++) * formantScale - startForm1PhaseInc;
deltaForm2PhaseInc = pgm_read_byte(formantPos++) * formantScale - startForm2PhaseInc;
deltaForm3PhaseInc = pgm_read_byte(formantPos++) * formantScale - startForm3PhaseInc;
deltaForm1Amp = pgm_read_byte(formantPos++) - startForm1Amp;
deltaForm2Amp = pgm_read_byte(formantPos++) - startForm2Amp;
deltaForm3Amp = pgm_read_byte(formantPos++) - startForm3Amp;
deltaMod = pgm_read_byte(formantPos++) - startMod;
deltaPitch = nextPitch - startPitch;
deltaMod = nextMod - startMod;
för (int jag = 1; jag < = tweenFrames; i ++) {
form1PhaseInc = startForm1PhaseInc + (jag * deltaForm1PhaseInc) / tweenFrames;
form2PhaseInc = startForm2PhaseInc + (jag * deltaForm2PhaseInc) / tweenFrames;
form3PhaseInc = startForm3PhaseInc + (jag * deltaForm3PhaseInc) / tweenFrames;
form1Amp = startForm1Amp + (jag * deltaForm1Amp) / tweenFrames;
form2Amp = startForm2Amp + (jag * deltaForm2Amp) / tweenFrames;
form3Amp = startForm3Amp + (jag * deltaForm3Amp) / tweenFrames;
pitchPhaseInc = startPitch + (jag * deltaPitch) / tweenFrames;
noiseMod = startMod + (jag * deltaMod) / tweenFrames;
Delay(frameTime);
}
}
}
Delay(300);
}
SIGNAL(PWM_INTERRUPT)
{
int8_t värde;
statiska int8_t buller;
int16_t phaseNoise = buller * noiseMod;
brus += buller << 2; brus ++; Noise "= 5 * buller + 1
form1Phase += form1PhaseInc;
värde = pgm_read_byte (sinCalc + (((form1Phase >> 8) & 0xf0) | form1Amp));
form2Phase += form2PhaseInc;
värdet + = pgm_read_byte (sinCalc + (((form2Phase >> 8) & 0xf0) | form2Amp));
form3Phase += form3PhaseInc;
värdet + = pgm_read_byte (sqrCalc + (((form3Phase >> 8) & 0xf0) | form3Amp));
värde = (värde * (0xff ^ (pitchPhase >> 8))) >> 8;
pitchPhase += pitchPhaseInc;
om ((pitchPhase+phaseNoise) < pitchPhaseInc) {
form1Phase = 0;
form2Phase = 0;
form3Phase = 0;
}
PWM_VALUE = värdet + 0x80;
}