⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sinetables.c

📁 i2s usb audio demo lpc2138
💻 C
字号:
/*****************************************************************************
 *   sineTables.c:  example envelope file - for NXP LPC23xx/24xx Family Microprocessors
 *                                I2S Audio demo with UDA1341                  
 *
 *   Copyright(C) 2007, NXP Semiconductor
 *   All rights reserved.
 *
 *   History
 *   2007.07.20  ver 1.00    Prelimnary version, first Release
 *
******************************************************************************/

#define BASECOUNT 0x07f8

/* functions in this file */
signed short adjustTone(signed short sample, unsigned long sampleCount);

/* global variables */
signed long env_accum=0, atk_i=1, dcy_i=0, rls_i=255; 

const long  attackCount  = BASECOUNT * 2,
	        decayCount   = BASECOUNT * 4,
		    sustainCount = BASECOUNT * 4, 	/* does not execute because set equal to decayCount */
			releaseCount = BASECOUNT * 6;


signed long sine_table1024[] =
{
0x0000, 0x0006, 0x000C, 0x0012, 0x0019, 0x001F, 0x0025, 0x002B,
0x0032, 0x0038, 0x003E, 0x0044, 0x004B, 0x0051, 0x0057, 0x005E,
0x0064, 0x006A, 0x0070, 0x0076, 0x007D, 0x0083, 0x0089, 0x008F,
0x0096, 0x009C, 0x00A2, 0x00A8, 0x00AE, 0x00B5, 0x00BB, 0x00C1,
0x00C7, 0x00CD, 0x00D3, 0x00DA, 0x00E0, 0x00E6, 0x00EC, 0x00F2,
0x00F8, 0x00FE, 0x0104, 0x010A, 0x0110, 0x0116, 0x011C, 0x0122,
0x0128, 0x012E, 0x0134, 0x013A, 0x0140, 0x0146, 0x014C, 0x0152,
0x0158, 0x015E, 0x0164, 0x016A, 0x0170, 0x0176, 0x017B, 0x0181,
0x0187, 0x018D, 0x0193, 0x0198, 0x019E, 0x01A4, 0x01AA, 0x01AF,
0x01B5, 0x01BB, 0x01C0, 0x01C6, 0x01CB, 0x01D1, 0x01D7, 0x01DC,
0x01E2, 0x01E7, 0x01ED, 0x01F2, 0x01F8, 0x01FD, 0x0203, 0x0208,
0x020D, 0x0213, 0x0218, 0x021D, 0x0223, 0x0228, 0x022D, 0x0233,
0x0238, 0x023D, 0x0242, 0x0247, 0x024D, 0x0252, 0x0257, 0x025C,
0x0261, 0x0266, 0x026B, 0x0270, 0x0275, 0x027A, 0x027F, 0x0284,
0x0288, 0x028D, 0x0292, 0x0297, 0x029C, 0x02A0, 0x02A5, 0x02AA,
0x02AF, 0x02B3, 0x02B8, 0x02BC, 0x02C1, 0x02C5, 0x02CA, 0x02CE,

0x02D3, 0x02D7, 0x02DC, 0x02E0, 0x02E4, 0x02E9, 0x02ED, 0x02F1,   /* 128 */
0x02F5, 0x02FA, 0x02FE, 0x0302, 0x0306, 0x030A, 0x030E, 0x0312,
0x0316, 0x031A, 0x031E, 0x0322, 0x0326, 0x032A, 0x032E, 0x0331,
0x0335, 0x0339, 0x033D, 0x0340, 0x0344, 0x0347, 0x034B, 0x034F,
0x0352, 0x0356, 0x0359, 0x035C, 0x0360, 0x0363, 0x0366, 0x036A,
0x036D, 0x0370, 0x0373, 0x0376, 0x037A, 0x037D, 0x0380, 0x0383,
0x0386, 0x0389, 0x038C, 0x038E, 0x0391, 0x0394, 0x0397, 0x039A,
0x039C, 0x039F, 0x03A2, 0x03A4, 0x03A7, 0x03A9, 0x03AC, 0x03AE,
0x03B1, 0x03B3, 0x03B5, 0x03B8, 0x03BA, 0x03BC, 0x03BE, 0x03C1,
0x03C3, 0x03C5, 0x03C7, 0x03C9, 0x03CB, 0x03CD, 0x03CF, 0x03D1,
0x03D2, 0x03D4, 0x03D6, 0x03D8, 0x03D9, 0x03DB, 0x03DD, 0x03DE,
0x03E0, 0x03E1, 0x03E3, 0x03E4, 0x03E6, 0x03E7, 0x03E8, 0x03EA,
0x03EB, 0x03EC, 0x03ED, 0x03EE, 0x03EF, 0x03F0, 0x03F2, 0x03F2,
0x03F3, 0x03F4, 0x03F5, 0x03F6, 0x03F7, 0x03F8, 0x03F8, 0x03F9,
0x03FA, 0x03FA, 0x03FB, 0x03FB, 0x03FC, 0x03FC, 0x03FD, 0x03FD,
0x03FD, 0x03FE, 0x03FE, 0x03FE, 0x03FE, 0x03FE, 0x03FE, 0x03FE,

0x03FF, 0x03FE, 0x03FE, 0x03FE, 0x03FE, 0x03FE, 0x03FE, 0x03FE,   /* 256 */
0x03FD, 0x03FD, 0x03FD, 0x03FC, 0x03FC, 0x03FB, 0x03FB, 0x03FA,
0x03FA, 0x03F9, 0x03F8, 0x03F8, 0x03F7, 0x03F6, 0x03F5, 0x03F4,
0x03F3, 0x03F2, 0x03F2, 0x03F0, 0x03EF, 0x03EE, 0x03ED, 0x03EC,
0x03EB, 0x03EA, 0x03E8, 0x03E7, 0x03E6, 0x03E4, 0x03E3, 0x03E1,
0x03E0, 0x03DE, 0x03DD, 0x03DB, 0x03D9, 0x03D8, 0x03D6, 0x03D4,
0x03D2, 0x03D1, 0x03CF, 0x03CD, 0x03CB, 0x03C9, 0x03C7, 0x03C5,
0x03C3, 0x03C1, 0x03BE, 0x03BC, 0x03BA, 0x03B8, 0x03B5, 0x03B3,
0x03B1, 0x03AE, 0x03AC, 0x03A9, 0x03A7, 0x03A4, 0x03A2, 0x039F,
0x039C, 0x039A, 0x0397, 0x0394, 0x0391, 0x038E, 0x038C, 0x0389,
0x0386, 0x0383, 0x0380, 0x037D, 0x037A, 0x0376, 0x0373, 0x0370,
0x036D, 0x036A, 0x0366, 0x0363, 0x0360, 0x035C, 0x0359, 0x0356,
0x0352, 0x034F, 0x034B, 0x0347, 0x0344, 0x0340, 0x033D, 0x0339,
0x0335, 0x0331, 0x032E, 0x032A, 0x0326, 0x0322, 0x031E, 0x031A,
0x0316, 0x0312, 0x030E, 0x030A, 0x0306, 0x0302, 0x02FE, 0x02FA,
0x02F5, 0x02F1, 0x02ED, 0x02E9, 0x02E4, 0x02E0, 0x02DC, 0x02D7,

0x02D3, 0x02CE, 0x02CA, 0x02C5, 0x02C1, 0x02BC, 0x02B8, 0x02B3, 	/*384 */
0x02AF, 0x02AA, 0x02A5, 0x02A0, 0x029C, 0x0297, 0x0292, 0x028D,
0x0288, 0x0284, 0x027F, 0x027A, 0x0275, 0x0270, 0x026B, 0x0266,
0x0261, 0x025C, 0x0257, 0x0252, 0x024D, 0x0247, 0x0242, 0x023D,
0x0238, 0x0233, 0x022D, 0x0228, 0x0223, 0x021D, 0x0218, 0x0213,
0x020D, 0x0208, 0x0203, 0x01FD, 0x01F8, 0x01F2, 0x01ED, 0x01E7,
0x01E2, 0x01DC, 0x01D7, 0x01D1, 0x01CB, 0x01C6, 0x01C0, 0x01BB,
0x01B5, 0x01AF, 0x01AA, 0x01A4, 0x019E, 0x0198, 0x0193, 0x018D,
0x0187, 0x0181, 0x017B, 0x0176, 0x0170, 0x016A, 0x0164, 0x015E,
0x0158, 0x0152, 0x014C, 0x0146, 0x0140, 0x013A, 0x0134, 0x012E,
0x0128, 0x0122, 0x011C, 0x0116, 0x0110, 0x010A, 0x0104, 0x00FE,
0x00F8, 0x00F2, 0x00EC, 0x00E6, 0x00E0, 0x00DA, 0x00D3, 0x00CD,
0x00C7, 0x00C1, 0x00BB, 0x00B5, 0x00AE, 0x00A8, 0x00A2, 0x009C,
0x0096, 0x008F, 0x0089, 0x0083, 0x007D, 0x0076, 0x0070, 0x006A,
0x0064, 0x005E, 0x0057, 0x0051, 0x004B, 0x0044, 0x003E, 0x0038,
0x0032, 0x002B, 0x0025, 0x001F, 0x0019, 0x0012, 0x000C, 0x0006,

0x0000, 0xFFFA, 0xFFF4, 0xFFEE, 0xFFE7, 0xFFE1, 0xFFDB, 0xFFD5,    /*512 */
0xFFCE, 0xFFC8, 0xFFC2, 0xFFBC, 0xFFB5, 0xFFAF, 0xFFA9, 0xFFA2,
0xFF9C, 0xFF96, 0xFF90, 0xFF8A, 0xFF83, 0xFF7D, 0xFF77, 0xFF71,
0xFF6A, 0xFF64, 0xFF5E, 0xFF58, 0xFF52, 0xFF4B, 0xFF45, 0xFF3F,
0xFF39, 0xFF33, 0xFF2D, 0xFF26, 0xFF20, 0xFF1A, 0xFF14, 0xFF0E,
0xFF08, 0xFF02, 0xFEFC, 0xFEF6, 0xFEF0, 0xFEEA, 0xFEE4, 0xFEDE,
0xFED8, 0xFED2, 0xFECC, 0xFEC6, 0xFEC0, 0xFEBA, 0xFEB4, 0xFEAE,
0xFEA8, 0xFEA2, 0xFE9C, 0xFE96, 0xFE90, 0xFE8A, 0xFE85, 0xFE7F,
0xFE79, 0xFE73, 0xFE6D, 0xFE68, 0xFE62, 0xFE5C, 0xFE56, 0xFE51,
0xFE4B, 0xFE45, 0xFE40, 0xFE3A, 0xFE35, 0xFE2F, 0xFE29, 0xFE24,
0xFE1E, 0xFE19, 0xFE13, 0xFE0E, 0xFE08, 0xFE03, 0xFDFD, 0xFDF8,
0xFDF3, 0xFDED, 0xFDE8, 0xFDE3, 0xFDDD, 0xFDD8, 0xFDD3, 0xFDCD,
0xFDC8, 0xFDC3, 0xFDBE, 0xFDB9, 0xFDB3, 0xFDAE, 0xFDA9, 0xFDA4,
0xFD9F, 0xFD9A, 0xFD95, 0xFD90, 0xFD8B, 0xFD86, 0xFD81, 0xFD7C,
0xFD78, 0xFD73, 0xFD6E, 0xFD69, 0xFD64, 0xFD60, 0xFD5B, 0xFD56,
0xFD51, 0xFD4D, 0xFD48, 0xFD44, 0xFD3F, 0xFD3B, 0xFD36, 0xFD32,

0xFD2D, 0xFD29, 0xFD24, 0xFD20, 0xFD1C, 0xFD17, 0xFD13, 0xFD0F,    /* 640 */
0xFD0B, 0xFD06, 0xFD02, 0xFCFE, 0xFCFA, 0xFCF6, 0xFCF2, 0xFCEE,
0xFCEA, 0xFCE6, 0xFCE2, 0xFCDE, 0xFCDA, 0xFCD6, 0xFCD2, 0xFCCF,
0xFCCB, 0xFCC7, 0xFCC3, 0xFCC0, 0xFCBC, 0xFCB9, 0xFCB5, 0xFCB1,
0xFCAE, 0xFCAA, 0xFCA7, 0xFCA4, 0xFCA0, 0xFC9D, 0xFC9A, 0xFC96,
0xFC93, 0xFC90, 0xFC8D, 0xFC8A, 0xFC86, 0xFC83, 0xFC80, 0xFC7D,
0xFC7A, 0xFC77, 0xFC74, 0xFC72, 0xFC6F, 0xFC6C, 0xFC69, 0xFC66,
0xFC64, 0xFC61, 0xFC5E, 0xFC5C, 0xFC59, 0xFC57, 0xFC54, 0xFC52,
0xFC4F, 0xFC4D, 0xFC4B, 0xFC48, 0xFC46, 0xFC44, 0xFC42, 0xFC3F,
0xFC3D, 0xFC3B, 0xFC39, 0xFC37, 0xFC35, 0xFC33, 0xFC31, 0xFC2F,
0xFC2E, 0xFC2C, 0xFC2A, 0xFC28, 0xFC27, 0xFC25, 0xFC23, 0xFC22,
0xFC20, 0xFC1F, 0xFC1D, 0xFC1C, 0xFC1A, 0xFC19, 0xFC18, 0xFC16,
0xFC15, 0xFC14, 0xFC13, 0xFC12, 0xFC11, 0xFC10, 0xFC0E, 0xFC0E,
0xFC0D, 0xFC0C, 0xFC0B, 0xFC0A, 0xFC09, 0xFC08, 0xFC08, 0xFC07,
0xFC06, 0xFC06, 0xFC05, 0xFC05, 0xFC04, 0xFC04, 0xFC03, 0xFC03,
0xFC03, 0xFC02, 0xFC02, 0xFC02, 0xFC02, 0xFC02, 0xFC02, 0xFC02,

0xFC01, 0xFC02, 0xFC02, 0xFC02, 0xFC02, 0xFC02, 0xFC02, 0xFC02, 	/* 768 */
0xFC03, 0xFC03, 0xFC03, 0xFC04, 0xFC04, 0xFC05, 0xFC05, 0xFC06,
0xFC06, 0xFC07, 0xFC08, 0xFC08, 0xFC09, 0xFC0A, 0xFC0B, 0xFC0C,
0xFC0D, 0xFC0E, 0xFC0E, 0xFC10, 0xFC11, 0xFC12, 0xFC13, 0xFC14,
0xFC15, 0xFC16, 0xFC18, 0xFC19, 0xFC1A, 0xFC1C, 0xFC1D, 0xFC1F,
0xFC20, 0xFC22, 0xFC23, 0xFC25, 0xFC27, 0xFC28, 0xFC2A, 0xFC2C,
0xFC2E, 0xFC2F, 0xFC31, 0xFC33, 0xFC35, 0xFC37, 0xFC39, 0xFC3B,
0xFC3D, 0xFC3F, 0xFC42, 0xFC44, 0xFC46, 0xFC48, 0xFC4B, 0xFC4D,
0xFC4F, 0xFC52, 0xFC54, 0xFC57, 0xFC59, 0xFC5C, 0xFC5E, 0xFC61,
0xFC64, 0xFC66, 0xFC69, 0xFC6C, 0xFC6F, 0xFC72, 0xFC74, 0xFC77,
0xFC7A, 0xFC7D, 0xFC80, 0xFC83, 0xFC86, 0xFC8A, 0xFC8D, 0xFC90,
0xFC93, 0xFC96, 0xFC9A, 0xFC9D, 0xFCA0, 0xFCA4, 0xFCA7, 0xFCAA,
0xFCAE, 0xFCB1, 0xFCB5, 0xFCB9, 0xFCBC, 0xFCC0, 0xFCC3, 0xFCC7,
0xFCCB, 0xFCCF, 0xFCD2, 0xFCD6, 0xFCDA, 0xFCDE, 0xFCE2, 0xFCE6,
0xFCEA, 0xFCEE, 0xFCF2, 0xFCF6, 0xFCFA, 0xFCFE, 0xFD02, 0xFD06,
0xFD0B, 0xFD0F, 0xFD13, 0xFD17, 0xFD1C, 0xFD20, 0xFD24, 0xFD29,

0xFD2D, 0xFD32, 0xFD36, 0xFD3B, 0xFD3F, 0xFD44, 0xFD48, 0xFD4D, 	  /* 896 */
0xFD51, 0xFD56, 0xFD5B, 0xFD60, 0xFD64, 0xFD69, 0xFD6E, 0xFD73,
0xFD78, 0xFD7C, 0xFD81, 0xFD86, 0xFD8B, 0xFD90, 0xFD95, 0xFD9A,
0xFD9F, 0xFDA4, 0xFDA9, 0xFDAE, 0xFDB3, 0xFDB9, 0xFDBE, 0xFDC3,
0xFDC8, 0xFDCD, 0xFDD3, 0xFDD8, 0xFDDD, 0xFDE3, 0xFDE8, 0xFDED,
0xFDF3, 0xFDF8, 0xFDFD, 0xFE03, 0xFE08, 0xFE0E, 0xFE13, 0xFE19,
0xFE1E, 0xFE24, 0xFE29, 0xFE2F, 0xFE35, 0xFE3A, 0xFE40, 0xFE45,
0xFE4B, 0xFE51, 0xFE56, 0xFE5C, 0xFE62, 0xFE68, 0xFE6D, 0xFE73,
0xFE79, 0xFE7F, 0xFE85, 0xFE8A, 0xFE90, 0xFE96, 0xFE9C, 0xFEA2,
0xFEA8, 0xFEAE, 0xFEB4, 0xFEBA, 0xFEC0, 0xFEC6, 0xFECC, 0xFED2,
0xFED8, 0xFEDE, 0xFEE4, 0xFEEA, 0xFEF0, 0xFEF6, 0xFEFC, 0xFF02,
0xFF08, 0xFF0E, 0xFF14, 0xFF1A, 0xFF20, 0xFF26, 0xFF2D, 0xFF33,
0xFF39, 0xFF3F, 0xFF45, 0xFF4B, 0xFF52, 0xFF58, 0xFF5E, 0xFF64,
0xFF6A, 0xFF71, 0xFF77, 0xFF7D, 0xFF83, 0xFF8A, 0xFF90, 0xFF96,
0xFF9C, 0xFFA2, 0xFFA9, 0xFFAF, 0xFFB5, 0xFFBC, 0xFFC2, 0xFFC8,
0xFFCE, 0xFFD5, 0xFFDB, 0xFFE1, 0xFFE7, 0xFFEE, 0xFFF4, 0xFFFA,
0x0000
};


signed short adjustTone(signed short sample, unsigned long sampleCount)
{
	static long  temp;
    signed short tone; 
	 /* modify  audio tone envelope */
/************************/ 
     /* attack time */  
/************************/ 
	  if ( sampleCount <= attackCount)
	  {
	    if((sampleCount > env_accum) ) /* calculate next sine table step value */
	    {
	       env_accum += ((sine_table1024[255-atk_i])-sine_table1024[254-atk_i]) << 2;
           atk_i++;
	    }
	    temp = sine_table1024[atk_i]; /* max envelope value = 0x3ff from sine table*/
	    temp = temp * sample;		  /* max sample = 0x3ff from sine table */	/* sine table values not related */
	    tone = temp >> 7;			  /* (0x3ff * 0x3ff )/0x80 = max tone value = 0x1ff0 */	/* attenuation for left/right channel (j) */
//      tone = 6 * sample;	 /* overide turns attack to constant value */
//		env_accum++;
	  }
/************************/ 
      /* decay time */  
/************************/ 
	  else if ( sampleCount <= decayCount)
	  {
	    if(sampleCount > env_accum)
	    {
	       env_accum += ((sine_table1024[255-dcy_i])-sine_table1024[254-dcy_i]) << 5; /* normal multiplier = 2 -> 5 stretches envelope */
           dcy_i++;	/* use next value in sine table */
	    }
	    temp = 0x3ff-sine_table1024[dcy_i];
	    temp = temp * sample;
	    tone = temp >> 7;
//      tone = 5 * sample; /* overide turns decay to constant value */
//		env_accum++;
	  }
/************************/ 
      /* sustain time */  	/* since decayCount = sustainCount means sustainCount skipped */
/************************/ 
	  else if ( sampleCount <= sustainCount)
	  {
        tone = 4 * sample;
		env_accum++;
	  } 
/************************/ 
     /*  release time   */
/************************/  
	  else if ( sampleCount <= releaseCount)
	  {
	    if((sampleCount > env_accum))
	    {
	       env_accum += ((sine_table1024[256-rls_i])-sine_table1024[255-rls_i]) << 2;
           rls_i--;
	    }
        temp = sine_table1024[rls_i];
        temp =  temp * sample;
        tone = temp >> 8;  /* normal divide is 0x80 -> 0x100 attenuates to  = decay count ending amplitude */
//        tone = 4 * sample;   /* overide turns release to constant value */
//		env_accum++;
     }
	 else tone =0;	 /* catch anything else in audio envelope and set  to zero */

	 if ((sampleCount >= releaseCount))// && ((sample > -limit) && (sample < limit))) /* Set mute flag every envelopeCount/44100 Hz */
 	 {
	   env_accum = 0;
	   atk_i = 0;
	   dcy_i = 0;
	   rls_i = 255;
	  }

      return tone;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -