📄 audio_math.c
字号:
/* These values are not in the same order as in Annex 3-B.3 of the ISO/IEC DIS 11172-3 */ static const float c[512] = { 0.000000000 * F, -0.000442505 * F, 0.003250122 * F, -0.007003784 * F, 0.031082153 * F, -0.078628540 * F, 0.100311279 * F, -0.572036743 * F, 1.144989014 * F, 0.572036743 * F, 0.100311279 * F, 0.078628540 * F, 0.031082153 * F, 0.007003784 * F, 0.003250122 * F, 0.000442505 * F, -0.000015259 * F, -0.000473022 * F, 0.003326416 * F, -0.007919312 * F, 0.030517578 * F, -0.084182739 * F, 0.090927124 * F, -0.600219727 * F, 1.144287109 * F, 0.543823242 * F, 0.108856201 * F, 0.073059082 * F, 0.031478882 * F, 0.006118774 * F, 0.003173828 * F, 0.000396729 * F, -0.000015259 * F, -0.000534058 * F, 0.003387451 * F, -0.008865356 * F, 0.029785156 * F, -0.089706421 * F, 0.080688477 * F, -0.628295898 * F, 1.142211914 * F, 0.515609741 * F, 0.116577148 * F, 0.067520142 * F, 0.031738281 * F, 0.005294800 * F, 0.003082275 * F, 0.000366211 * F, -0.000015259 * F, -0.000579834 * F, 0.003433228 * F, -0.009841919 * F, 0.028884888 * F, -0.095169067 * F, 0.069595337 * F, -0.656219482 * F, 1.138763428 * F, 0.487472534 * F, 0.123474121 * F, 0.061996460 * F, 0.031845093 * F, 0.004486084 * F, 0.002990723 * F, 0.000320435 * F, -0.000015259 * F, -0.000625610 * F, 0.003463745 * F, -0.010848999 * F, 0.027801514 * F, -0.100540161 * F, 0.057617188 * F, -0.683914185 * F, 1.133926392 * F, 0.459472656 * F, 0.129577637 * F, 0.056533813 * F, 0.031814575 * F, 0.003723145 * F, 0.002899170 * F, 0.000289917 * F, -0.000015259 * F, -0.000686646 * F, 0.003479004 * F, -0.011886597 * F, 0.026535034 * F, -0.105819702 * F, 0.044784546 * F, -0.711318970 * F, 1.127746582 * F, 0.431655884 * F, 0.134887695 * F, 0.051132202 * F, 0.031661987 * F, 0.003005981 * F, 0.002792358 * F, 0.000259399 * F, -0.000015259 * F, -0.000747681 * F, 0.003479004 * F, -0.012939453 * F, 0.025085449 * F, -0.110946655 * F, 0.031082153 * F, -0.738372803 * F, 1.120223999 * F, 0.404083252 * F, 0.139450073 * F, 0.045837402 * F, 0.031387329 * F, 0.002334595 * F, 0.002685547 * F, 0.000244141 * F, -0.000030518 * F, -0.000808716 * F, 0.003463745 * F, -0.014022827 * F, 0.023422241 * F, -0.115921021 * F, 0.016510010 * F, -0.765029907 * F, 1.111373901 * F, 0.376800537 * F, 0.143264771 * F, 0.040634155 * F, 0.031005859 * F, 0.001693726 * F, 0.002578735 * F, 0.000213623 * F, -0.000030518 * F, -0.000885010 * F, 0.003417969 * F, -0.015121460 * F, 0.021575928 * F, -0.120697021 * F, 0.001068115 * F, -0.791213989 * F, 1.101211548 * F, 0.349868774 * F, 0.146362305 * F, 0.035552979 * F, 0.030532837 * F, 0.001098633 * F, 0.002456665 * F, 0.000198364 * F, -0.000030518 * F, -0.000961304 * F, 0.003372192 * F, -0.016235352 * F, 0.019531250 * F, -0.125259399 * F, -0.015228271 * F, -0.816864014 * F, 1.089782715 * F, 0.323318481 * F, 0.148773193 * F, 0.030609131 * F, 0.029937744 * F, 0.000549316 * F, 0.002349854 * F, 0.000167847 * F, -0.000030518 * F, -0.001037598 * F, 0.003280640 * F, -0.017349243 * F, 0.017257690 * F, -0.129562378 * F, -0.032379150 * F, -0.841949463 * F, 1.077117920 * F, 0.297210693 * F, 0.150497437 * F, 0.025817871 * F, 0.029281616 * F, 0.000030518 * F, 0.002243042 * F, 0.000152588 * F, -0.000045776 * F, -0.001113892 * F, 0.003173828 * F, -0.018463135 * F, 0.014801025 * F, -0.133590698 * F, -0.050354004 * F, -0.866363525 * F, 1.063217163 * F, 0.271591187 * F, 0.151596069 * F, 0.021179199 * F, 0.028533936 * F, -0.000442505 * F, 0.002120972 * F, 0.000137329 * F, -0.000045776 * F, -0.001205444 * F, 0.003051758 * F, -0.019577026 * F, 0.012115479 * F, -0.137298584 * F, -0.069168091 * F, -0.890090942 * F, 1.048156738 * F, 0.246505737 * F, 0.152069092 * F, 0.016708374 * F, 0.027725220 * F, -0.000869751 * F, 0.002014160 * F, 0.000122070 * F, -0.000061035 * F, -0.001296997 * F, 0.002883911 * F, -0.020690918 * F, 0.009231567 * F, -0.140670776 * F, -0.088775635 * F, -0.913055420 * F, 1.031936646 * F, 0.221984863 * F, 0.151962280 * F, 0.012420654 * F, 0.026840210 * F, -0.001266479 * F, 0.001907349 * F, 0.000106812 * F, -0.000061035 * F, -0.001388550 * F, 0.002700806 * F, -0.021789551 * F, 0.006134033 * F, -0.143676758 * F, -0.109161377 * F, -0.935195923 * F, 1.014617920 * F, 0.198059082 * F, 0.151306152 * F, 0.008316040 * F, 0.025909424 * F, -0.001617432 * F, 0.001785278 * F, 0.000106812 * F, -0.000076294 * F, -0.001480103 * F, 0.002487183 * F, -0.022857666 * F, 0.002822876 * F, -0.146255493 * F, -0.130310059 * F, -0.956481934 * F, 0.996246338 * F, 0.174789429 * F, 0.150115967 * F, 0.004394531 * F, 0.024932861 * F, -0.001937866 * F, 0.001693726 * F, 0.000091553 * F, -0.000076294 * F, -0.001586914 * F, 0.002227783 * F, -0.023910522 * F, -0.000686646 * F, -0.148422241 * F, -0.152206421 * F, -0.976852417 * F, 0.976852417 * F, 0.152206421 * F, 0.148422241 * F, 0.000686646 * F, 0.023910522 * F, -0.002227783 * F, 0.001586914 * F, 0.000076294 * F, -0.000091553 * F, -0.001693726 * F, 0.001937866 * F, -0.024932861 * F, -0.004394531 * F, -0.150115967 * F, -0.174789429 * F, -0.996246338 * F, 0.956481934 * F, 0.130310059 * F, 0.146255493 * F, -0.002822876 * F, 0.022857666 * F, -0.002487183 * F, 0.001480103 * F, 0.000076294 * F, -0.000106812 * F, -0.001785278 * F, 0.001617432 * F, -0.025909424 * F, -0.008316040 * F, -0.151306152 * F, -0.198059082 * F, -1.014617920 * F, 0.935195923 * F, 0.109161377 * F, 0.143676758 * F, -0.006134033 * F, 0.021789551 * F, -0.002700806 * F, 0.001388550 * F, 0.000061035 * F, -0.000106812 * F, -0.001907349 * F, 0.001266479 * F, -0.026840210 * F, -0.012420654 * F, -0.151962280 * F, -0.221984863 * F, -1.031936646 * F, 0.913055420 * F, 0.088775635 * F, 0.140670776 * F, -0.009231567 * F, 0.020690918 * F, -0.002883911 * F, 0.001296997 * F, 0.000061035 * F, -0.000122070 * F, -0.002014160 * F, 0.000869751 * F, -0.027725220 * F, -0.016708374 * F, -0.152069092 * F, -0.246505737 * F, -1.048156738 * F, 0.890090942 * F, 0.069168091 * F, 0.137298584 * F, -0.012115479 * F, 0.019577026 * F, -0.003051758 * F, 0.001205444 * F, 0.000045776 * F, -0.000137329 * F, -0.002120972 * F, 0.000442505 * F, -0.028533936 * F, -0.021179199 * F, -0.151596069 * F, -0.271591187 * F, -1.063217163 * F, 0.866363525 * F, 0.050354004 * F, 0.133590698 * F, -0.014801025 * F, 0.018463135 * F, -0.003173828 * F, 0.001113892 * F, 0.000045776 * F, -0.000152588 * F, -0.002243042 * F, -0.000030518 * F, -0.029281616 * F, -0.025817871 * F, -0.150497437 * F, -0.297210693 * F, -1.077117920 * F, 0.841949463 * F, 0.032379150 * F, 0.129562378 * F, -0.017257690 * F, 0.017349243 * F, -0.003280640 * F, 0.001037598 * F, 0.000030518 * F, -0.000167847 * F, -0.002349854 * F, -0.000549316 * F, -0.029937744 * F, -0.030609131 * F, -0.148773193 * F, -0.323318481 * F, -1.089782715 * F, 0.816864014 * F, 0.015228271 * F, 0.125259399 * F, -0.019531250 * F, 0.016235352 * F, -0.003372192 * F, 0.000961304 * F, 0.000030518 * F, -0.000198364 * F, -0.002456665 * F, -0.001098633 * F, -0.030532837 * F, -0.035552979 * F, -0.146362305 * F, -0.349868774 * F, -1.101211548 * F, 0.791213989 * F, -0.001068115 * F, 0.120697021 * F, -0.021575928 * F, 0.015121460 * F, -0.003417969 * F, 0.000885010 * F, 0.000030518 * F, -0.000213623 * F, -0.002578735 * F, -0.001693726 * F, -0.031005859 * F, -0.040634155 * F, -0.143264771 * F, -0.376800537 * F, -1.111373901 * F, 0.765029907 * F, -0.016510010 * F, 0.115921021 * F, -0.023422241 * F, 0.014022827 * F, -0.003463745 * F, 0.000808716 * F, 0.000030518 * F, -0.000244141 * F, -0.002685547 * F, -0.002334595 * F, -0.031387329 * F, -0.045837402 * F, -0.139450073 * F, -0.404083252 * F, -1.120223999 * F, 0.738372803 * F, -0.031082153 * F, 0.110946655 * F, -0.025085449 * F, 0.012939453 * F, -0.003479004 * F, 0.000747681 * F, 0.000015259 * F, -0.000259399 * F, -0.002792358 * F, -0.003005981 * F, -0.031661987 * F, -0.051132202 * F, -0.134887695 * F, -0.431655884 * F, -1.127746582 * F, 0.711318970 * F, -0.044784546 * F, 0.105819702 * F, -0.026535034 * F, 0.011886597 * F, -0.003479004 * F, 0.000686646 * F, 0.000015259 * F, -0.000289917 * F, -0.002899170 * F, -0.003723145 * F, -0.031814575 * F, -0.056533813 * F, -0.129577637 * F, -0.459472656 * F, -1.133926392 * F, 0.683914185 * F, -0.057617188 * F, 0.100540161 * F, -0.027801514 * F, 0.010848999 * F, -0.003463745 * F, 0.000625610 * F, 0.000015259 * F, -0.000320435 * F, -0.002990723 * F, -0.004486084 * F, -0.031845093 * F, -0.061996460 * F, -0.123474121 * F, -0.487472534 * F, -1.138763428 * F, 0.656219482 * F, -0.069595337 * F, 0.095169067 * F, -0.028884888 * F, 0.009841919 * F, -0.003433228 * F, 0.000579834 * F, 0.000015259 * F, -0.000366211 * F, -0.003082275 * F, -0.005294800 * F, -0.031738281 * F, -0.067520142 * F, -0.116577148 * F, -0.515609741 * F, -1.142211914 * F, 0.628295898 * F, -0.080688477 * F, 0.089706421 * F, -0.029785156 * F, 0.008865356 * F, -0.003387451 * F, 0.000534058 * F, 0.000015259 * F, -0.000396729 * F, -0.003173828 * F, -0.006118774 * F, -0.031478882 * F, -0.073059082 * F, -0.108856201 * F, -0.543823242 * F, -1.144287109 * F, 0.600219727 * F, -0.090927124 * F, 0.084182739 * F, -0.030517578 * F, 0.007919312 * F, -0.003326416 * F, 0.000473022 * F, 0.000015259 * F };#undef F int i; float tmp, *v; const float *f; f = c; switch(b->pos) { case 0: v = b->actual; for (i=0; i<32; i++) { tmp = *f++ * *v; v += 15; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; if ((tmp += *f++ * *v) > 32767) /* ceiling saturation */ **pcm = 0x7FFF; else if (tmp < -32768) /* floor saturation */ **pcm = 0x8000; else **pcm = (s16)tmp; *pcm += jump; v += 15; } break; case 1: v = b->actual + 1; for (i=0; i<32; i++) { tmp = *f++ * *v--; tmp += *f++ * *v; v += 15; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; if ((tmp += *f++ * *v) > 32767) **pcm = 0x7FFF; else if (tmp < -32768) **pcm = 0x8000; else **pcm = (s16)tmp; *pcm += jump; v += 15; } break; case 2: v = b->actual + 2; for (i=0; i<32; i++) { tmp = *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v; v += 15; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; if ((tmp += *f++ * *v) > 32767) **pcm = 0x7FFF; else if (tmp < -32768) **pcm = 0x8000; else **pcm = (s16)tmp; *pcm += jump; v += 15; } break; case 3: v = b->actual + 3; for (i=0; i<32; i++) { tmp = *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v; v += 15; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; if ((tmp += *f++ * *v) > 32767) **pcm = 0x7FFF; else if (tmp < -32768) **pcm = 0x8000; else **pcm = (s16)tmp; *pcm += jump; v += 15; } break; case 4: v = b->actual + 4; for (i=0; i<32; i++) { tmp = *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v; v += 15; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; if ((tmp += *f++ * *v) > 32767) **pcm = 0x7FFF; else if (tmp < -32768) **pcm = 0x8000; else **pcm = (s16)tmp; *pcm += jump; v += 15; } break; case 5: v = b->actual + 5; for (i=0; i<32; i++) { tmp = *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v; v += 15; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; tmp += *f++ * *v--; if ((tmp += *f++ * *v) > 32767) **pcm = 0x7FFF; else if (tmp < -32768)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -