Difference between revisions of "FF7/PSX/Sound/Opcodes/0xb4b5"

From Final Fantasy Inside
< FF7
Jump to navigation Jump to search
(Add raw LFO data. In the future it will be desirable to add waveform visualizations and detailed explanations.)
(No difference)

Revision as of 17:53, 9 June 2020

LFO

LFO Forms

The two zeros are a special prefix for moving the LFO pointer, and the following value indicates the relative offset to move to.

const int16_t LFO_FORM_00[] = {
  -0x1FFF,  0x3FFF, -0x3FFF,  0x5FFF, -0x5FFF,
   0x7FFF, -0x7FFF,
   0, 0, -2
};

const int16_t LFO_FORM_01[] = {
   0x7FFF, -0x7FFF,
   0, 0, -2
};

const int16_t LFO_FORM_02[] = {
   0x1FFF,  0x0000,  0x3FFF,  0x0000,  0x5FFF,
   0x0000,  0x7FFF,
   0, 0, -2
};

const int16_t LFO_FORM_03[] = {
   0x7FFF,
   0x0000,  0x7FFF,
   0, 0, -2
};

const int16_t LFO_FORM_04[] = {
  -0x1FFF,  0x0000, -0x3FFF,  0x0000, -0x5FFF,
   0x0000, -0x7FFF,
   0, 0, -2
};

const int16_t LFO_FORM_05[] = {
  -0x7FFF,
   0x0000, -0x7FFF,
   0, 0, -2
};

const int16_t LFO_FORM_06[] = {
   0x0000,  0x0500,  0x09E2,  0x12CD,  0x169E,  0x19E1,  0x1C81,  0x1E6D,
   0x1F9A,  0x1FFF,  0x1F9C,  0x1E71,  0x1C86,  0x19E8,  0x16A7,  0x12D7,
   0x0E90,  0x09EE,  0x050D,  0x0000, -0x04F4, -0x09D6, -0x0E7A, -0x12C3,
  -0x1696, -0x19DA, -0x1C7C, -0x1E6A, -0x1F99, -0x2000, -0x1F9F, -0x1E76,
  -0x1C8D, -0x19F1, -0x16B1, -0x12E3, -0x0E9D, -0x09FC, -0x051B,  0x0000,
   0x0A01,  0x13C4,  0x259A,  0x2D3C,  0x33C2,  0x3902,  0x3CDA,  0x3F34,
   0x3FFF,  0x3F38,  0x3CE2,  0x390D,  0x33D1,  0x2D4F,  0x25AF,  0x1D21,
   0x13DD,  0x0A1B,  0x0000, -0x09E8, -0x13AC, -0x1CF4, -0x2585, -0x2D2B,
  -0x33B3, -0x38F7, -0x3CD3, -0x3F31, -0x4000, -0x3F3D, -0x3CEB, -0x391A,
  -0x33E1, -0x2D62, -0x25C5, -0x1D3A, -0x13F7, -0x0A36,  0x0000,  0x0F02,
   0x1DA6,  0x3867,  0x43DA,  0x4DA3,  0x5583,  0x5B47,  0x5ECE,  0x5FFF,
   0x5ED4,  0x5B53,  0x5594,  0x4DBA,  0x43F6,  0x3886,  0x2BB2,  0x1DCB,
   0x0F29,  0x0000, -0x0EDC, -0x1D82, -0x2B6E, -0x3848, -0x43C0, -0x4D8D,
  -0x5572, -0x5B3D, -0x5EC9, -0x6000, -0x5EDC, -0x5B61, -0x55A7, -0x4DD2,
  -0x4413, -0x38A7, -0x2BD7, -0x1DF2, -0x0F51,
   0x0000,  0x1403,  0x2788,  0x4B34,  0x5A79,  0x6784,  0x7204,  0x79B5,
   0x7E68,  0x7FFF,  0x7E71,  0x79C5,  0x721B,  0x67A3,  0x5A9E,  0x4B5E,
   0x3A43,  0x27BA,  0x1437,  0x0000, -0x13D0, -0x2758, -0x39E7, -0x4B0A,
  -0x5A55, -0x6766, -0x71ED, -0x79A6, -0x7E61, -0x8000, -0x7E7A, -0x79D6,
  -0x7234, -0x67C2, -0x5AC3, -0x4B89, -0x3A73, -0x27ED, -0x146B,
   0, 0, -39
};

const int16_t LFO_FORM_07[] = {
   0x0000,  0x1403,  0x2788,  0x4B34,  0x5A79,  0x6784,  0x7204,  0x79B5,
   0x7E68,  0x7FFF,  0x7E71,  0x79C5,  0x721B,  0x67A3,  0x5A9E,  0x4B5E,
   0x3A43,  0x27BA,  0x1437,  0x0000, -0x13D0, -0x2758, -0x39E7, -0x4B0A,
  -0x5A55, -0x6766, -0x71ED, -0x79A6, -0x7E61, -0x8000, -0x7E7A, -0x79D6,
  -0x7234, -0x67C2, -0x5AC3, -0x4B89, -0x3A73, -0x27ED, -0x146B,
   0, 0, -39
};

const int16_t LFO_FORM_0A[] = {
   0x0000,  0x09E2,  0x12CD,  0x19E1,  0x1E6D,  0x1FFF,  0x1E71,  0x19E8,
   0x12D7,  0x09EE,  0x000D, -0x09D6, -0x12C3, -0x19DA, -0x1E6A, -0x2000,
  -0x1E76, -0x19F1, -0x12E3, -0x09FC,  0x0000,  0x13C4,  0x259A,  0x33C2,
   0x3CDA,  0x3FFF,  0x3CE2,  0x33D1,  0x25AF,  0x13DD,  0x001A, -0x13AC,
  -0x2585, -0x33B3, -0x3CD3, -0x4000, -0x3CEB, -0x33E1, -0x25C5, -0x13F7,
   0x0000,  0x1DA6,  0x3867,  0x4DA3,  0x5B47,  0x5FFF,  0x5B53,  0x4DBA,
   0x3886,  0x1DCB,  0x0027, -0x1D82, -0x3848, -0x4D8D, -0x5B3D, -0x6000,
  -0x5B61, -0x4DD2, -0x38A7, -0x1DF2,
   0x0000,  0x2788,  0x4B34,  0x6784,  0x79B5,  0x7FFF,  0x79C5,  0x67A3,
   0x4B5E,  0x27BA,  0x0034, -0x2758, -0x4B0A, -0x6766, -0x79A6, -0x8000,
  -0x79D6, -0x67C2, -0x4B89, -0x27ED,
   0, 0, -20
};

const int16_t LFO_FORM_0B[] = {
   0x0000,  0x2788,  0x4B34,  0x6784,  0x79B5,  0x7FFF,  0x79C5,  0x67A3,
   0x4B5E,  0x27BA,  0x0034, -0x2758, -0x4B0A, -0x6766, -0x79A6, -0x8000,
  -0x79D6, -0x67C2, -0x4B89, -0x27ED,
   0, 0, -20
};

const int16_t LFO_FORM_08[] = {
   0x0000,  0x07FF,  0x0FFF,  0x17FF,  0x1FFF,  0x17FF,  0x0FFF,  0x07FF,
   0x0000, -0x07FF, -0x0FFF, -0x17FF, -0x1FFF, -0x17FF, -0x0FFF, -0x07FF,
   0x0000,  0x0FFF,  0x1FFF,  0x2FFF,  0x3FFF,  0x2FFF,  0x1FFF,  0x0FFF,
   0x0000, -0x0FFF, -0x1FFF, -0x2FFF, -0x3FFF, -0x2FFF, -0x1FFF, -0x0FFF,
   0x0000,  0x17FF,  0x2FFF,  0x47FF,  0x5FFF,  0x47FF,  0x2FFF,  0x17FF,
   0x0000, -0x17FF, -0x2FFF, -0x47FF, -0x5FFF, -0x47FF, -0x2FFF, -0x17FF,
   0x0000,  0x1FFF,  0x3FFF,  0x5FFF,  0x7FFF,  0x5FFF,  0x3FFF,  0x1FFF,
   0x0000, -0x1FFF, -0x3FFF, -0x5FFF, -0x7FFF, -0x5FFF, -0x3FFF, -0x1FFF,
   0, 0, -16
};

const int16_t LFO_FORM_09[] = {
   0x0000,  0x1FFF,  0x3FFF,  0x5FFF,  0x7FFF,  0x5FFF,  0x3FFF,  0x1FFF,
   0x0000, -0x1FFF, -0x3FFF, -0x5FFF, -0x7FFF, -0x5FFF, -0x3FFF, -0x1FFF,
   0, 0, -16
};

const int16_t LFO_FORM_0C[] = {
   0x0000,  0x31FD,  0x7D05, -0x0A03, -0x1312,  0x793C,  0x75D0,  0x07FC,
  -0x0BEF, -0x3D0B,  0x660F,  0x330E,  0x3FEA, -0x411F, -0x73EE,  0x1821,
  -0x5005,  0x4A00, -0x2C19, -0x0B0B, -0x1EC9, -0x182D,  0x520D,  0x1103,
  -0x5121,  0x4AF8,  0x0746,  0x70F4, -0x713F, -0x68E7,  0x3512, -0x0A00,
   0x1B00, -0x4B17,  0x3B1E, -0x51EB, -0x6338,  0x65F9, -0x3CDD,  0x71F8,
   0x2CF1, -0x59FC, -0x6D04, -0x36F2, -0x4FF7,  0x10E5,  0x0804, -0x7FFF,
   0x12FA,  0x1118, -0x18F7,  0x47F8, -0x6A27, -0x22E4,  0x1B09,  0x0BF4,
   0x7BFC,  0x20FF, -0x6BFC,  0x7DFC, -0x750B, -0x48E9,  0x74F9,  0x2AFC,
  -0x22FA, -0x280D, -0x0B03,  0x0608, -0x0DE8,  0x69DF, -0x43F9,  0x4AF7,
  -0x7615, -0x44D9,  0x1109,  0x7FEF,  0x3615, -0x1333,  0x7621, -0x67EB,
   0x56CF, -0x2BFA,  0x3322, -0x201A, -0x50F6, -0x460B, -0x31F8,  0x5D05,
  -0x4012, -0x0FE6,  0x20E8, -0x60EA, -0x730E, -0x3D19, -0x2DD2, -0x39FF,
  -0x4630, -0x7EF4,  0x4323,  0x28DD, -0x6909,  0x5C3C, -0x6022, -0x5118,
  -0x49E5,  0x3EF3,  0x1408, -0x2517,  0x2C0B, -0x4ECD, -0x571F,  0x05DA,
   0x0914,  0x4E22, -0x0018, -0x780F,  0x21F0, -0x72DB,  0x7DFC,  0x1CF0,
   0x5E11,  0x3DE8, -0x38F6, -0x70E9, -0x0010,  0x6A0D, -0x001D,  0x12F3,
   0x041F,  0x780C, -0x3B11,  0x5B02,  0x3D02,  0x02F2,  0x1519, -0x252B,
  -0x42F7, -0x6DE7, -0x0AFD,  0x62DD,  0x3806,  0x0F26, -0x5705, -0x1F02,
  -0x091D,  0x0E02,  0x0210,  0x4406, -0x6B2C, -0x2EF6, -0x57BA,  0x10F1,
   0x1ACC, -0x4203,  0x1A30, -0x5F15,  0x5FEA, -0x40F0, -0x4411, -0x20E5,
  -0x3DF4,  0x2AE0,  0x3EF2, -0x51D9,  0x5001, -0x0623,  0x3611, -0x52E6,
   0x07DF,  0x6D05,  0x1A0D, -0x4925,  0x6D2B,  0x3607, -0x0434,  0x4208,
   0x0F21,  0x36F6, -0x37FA,  0x0603, -0x0229,  0x7817,  0x0605, -0x50F5,
  -0x6A04,  0x10EC, -0x58F2, -0x520D,  0x660F, -0x420E, -0x2108, -0x1BDF,
  -0x4E19, -0x0313,  0x5B1C, -0x5EF7, -0x330E, -0x0A0D, -0x6505, -0x4BE9,
  -0x6D18,  0x7F08,  0x4BFA, -0x7603,  0x3C1C, -0x0311, -0x0D25,  0x4A1D,
   0x671D, -0x2901,  0x65DA, -0x0E04,  0x6E0A,  0x0A0C,  0x11F8,  0x4A02,
   0x5BFC, -0x14FA, -0x5A13,  0x30E6, -0x7FEF, -0x2DCC,  0x08F8,  0x43DC,
  -0x09F7, -0x590E, -0x65F3,  0x7006, -0x0A16, -0x6304, -0x7EE2, -0x521A,
  -0x19F2, -0x6A09, -0x4CFC, -0x6301, -0x1016, -0x0AE7, -0x0600,  0x3AF6,
  -0x382B,  0x2722, -0x44C8,  0x43D1,  0x77ED,  0x4908, -0x31FE, -0x54F1,
   0x3DEB, -0x24F6,  0x6401,  0x3FF9,  0x76F2, -0x6CF7, -0x2DF1,  0x74E5,
   0, 0, -256
};

const int16_t *LFO_FORMS[] = {
  LFO_FORM_00,  // 0x00
  LFO_FORM_01,  // 0x01
  LFO_FORM_02,  // 0x02
  LFO_FORM_03,  // 0x03
  LFO_FORM_04,  // 0x04
  LFO_FORM_05,  // 0x05
  LFO_FORM_06,  // 0x06
  LFO_FORM_07,  // 0x07
  LFO_FORM_08,  // 0x08
  LFO_FORM_09,  // 0x09
  LFO_FORM_0a,  // 0x0a
  LFO_FORM_0b,  // 0x0b
  LFO_FORM_0c,  // 0x0c
  LFO_FORM_09,  // 0x0d
  LFO_FORM_08,  // 0x0e
  LFO_FORM_09   // 0x0f
};