|
|
@@ -0,0 +1,208 @@ |
|
|
|
#include <stdint.h> |
|
|
|
|
|
|
|
// These audio waveforms have a period of 256 points, plus a 257th |
|
|
|
// point that is a duplicate of the first point. This duplicate |
|
|
|
// is needed because the waveform generator uses linear interpolation |
|
|
|
// between each point and the next point in the waveform. |
|
|
|
|
|
|
|
const int16_t AudioWaveformSine[257] = { |
|
|
|
0, 804, 1608, 2410, 3212, 4011, 4808, 5602, 6393, 7179, |
|
|
|
7962, 8739, 9512, 10278, 11039, 11793, 12539, 13279, 14010, 14732, |
|
|
|
15446, 16151, 16846, 17530, 18204, 18868, 19519, 20159, 20787, 21403, |
|
|
|
22005, 22594, 23170, 23731, 24279, 24811, 25329, 25832, 26319, 26790, |
|
|
|
27245, 27683, 28105, 28510, 28898, 29268, 29621, 29956, 30273, 30571, |
|
|
|
30852, 31113, 31356, 31580, 31785, 31971, 32137, 32285, 32412, 32521, |
|
|
|
32609, 32678, 32728, 32757, 32767, 32757, 32728, 32678, 32609, 32521, |
|
|
|
32412, 32285, 32137, 31971, 31785, 31580, 31356, 31113, 30852, 30571, |
|
|
|
30273, 29956, 29621, 29268, 28898, 28510, 28105, 27683, 27245, 26790, |
|
|
|
26319, 25832, 25329, 24811, 24279, 23731, 23170, 22594, 22005, 21403, |
|
|
|
20787, 20159, 19519, 18868, 18204, 17530, 16846, 16151, 15446, 14732, |
|
|
|
14010, 13279, 12539, 11793, 11039, 10278, 9512, 8739, 7962, 7179, |
|
|
|
6393, 5602, 4808, 4011, 3212, 2410, 1608, 804, 0, -804, |
|
|
|
-1608, -2410, -3212, -4011, -4808, -5602, -6393, -7179, -7962, -8739, |
|
|
|
-9512,-10278,-11039,-11793,-12539,-13279,-14010,-14732,-15446,-16151, |
|
|
|
-16846,-17530,-18204,-18868,-19519,-20159,-20787,-21403,-22005,-22594, |
|
|
|
-23170,-23731,-24279,-24811,-25329,-25832,-26319,-26790,-27245,-27683, |
|
|
|
-28105,-28510,-28898,-29268,-29621,-29956,-30273,-30571,-30852,-31113, |
|
|
|
-31356,-31580,-31785,-31971,-32137,-32285,-32412,-32521,-32609,-32678, |
|
|
|
-32728,-32757,-32767,-32757,-32728,-32678,-32609,-32521,-32412,-32285, |
|
|
|
-32137,-31971,-31785,-31580,-31356,-31113,-30852,-30571,-30273,-29956, |
|
|
|
-29621,-29268,-28898,-28510,-28105,-27683,-27245,-26790,-26319,-25832, |
|
|
|
-25329,-24811,-24279,-23731,-23170,-22594,-22005,-21403,-20787,-20159, |
|
|
|
-19519,-18868,-18204,-17530,-16846,-16151,-15446,-14732,-14010,-13279, |
|
|
|
-12539,-11793,-11039,-10278, -9512, -8739, -7962, -7179, -6393, -5602, |
|
|
|
-4808, -4011, -3212, -2410, -1608, -804, 0 |
|
|
|
}; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
#! /usr/bin/perl |
|
|
|
use Math::Trig ':pi'; |
|
|
|
$len = 256; |
|
|
|
print "const int16_t AudioWaveformSine[257] = {\n"; |
|
|
|
for ($i=0; $i <= $len; $i++) { |
|
|
|
$f = sin($i / $len * 2 * pi); |
|
|
|
$d = sprintf "%.0f", $f * 32767.0; |
|
|
|
#print $d; |
|
|
|
printf "%6d", $d + 0; |
|
|
|
print "," if ($i < $len); |
|
|
|
print "\n" if ($i % 10) == 9; |
|
|
|
} |
|
|
|
print "\n" unless ($len % 10) == 9; |
|
|
|
print "};\n"; |
|
|
|
#endif |
|
|
|
|
|
|
|
const int16_t AudioWaveformTriangle[257] = { |
|
|
|
0, 512, 1024, 1536, 2048, 2560, 3072, 3584, 4096, 4608, |
|
|
|
5120, 5632, 6144, 6656, 7168, 7680, 8192, 8704, 9216, 9728, |
|
|
|
10240, 10752, 11264, 11776, 12288, 12800, 13312, 13824, 14336, 14848, |
|
|
|
15360, 15872, 16384, 16895, 17407, 17919, 18431, 18943, 19455, 19967, |
|
|
|
20479, 20991, 21503, 22015, 22527, 23039, 23551, 24063, 24575, 25087, |
|
|
|
25599, 26111, 26623, 27135, 27647, 28159, 28671, 29183, 29695, 30207, |
|
|
|
30719, 31231, 31743, 32255, 32767, 32255, 31743, 31231, 30719, 30207, |
|
|
|
29695, 29183, 28671, 28159, 27647, 27135, 26623, 26111, 25599, 25087, |
|
|
|
24575, 24063, 23551, 23039, 22527, 22015, 21503, 20991, 20479, 19967, |
|
|
|
19455, 18943, 18431, 17919, 17407, 16895, 16384, 15872, 15360, 14848, |
|
|
|
14336, 13824, 13312, 12800, 12288, 11776, 11264, 10752, 10240, 9728, |
|
|
|
9216, 8704, 8192, 7680, 7168, 6656, 6144, 5632, 5120, 4608, |
|
|
|
4096, 3584, 3072, 2560, 2048, 1536, 1024, 512, 0, -512, |
|
|
|
-1024, -1536, -2048, -2560, -3072, -3584, -4096, -4608, -5120, -5632, |
|
|
|
-6144, -6656, -7168, -7680, -8192, -8704, -9216, -9728,-10240,-10752, |
|
|
|
-11264,-11776,-12288,-12800,-13312,-13824,-14336,-14848,-15360,-15872, |
|
|
|
-16384,-16895,-17407,-17919,-18431,-18943,-19455,-19967,-20479,-20991, |
|
|
|
-21503,-22015,-22527,-23039,-23551,-24063,-24575,-25087,-25599,-26111, |
|
|
|
-26623,-27135,-27647,-28159,-28671,-29183,-29695,-30207,-30719,-31231, |
|
|
|
-31743,-32255,-32767,-32255,-31743,-31231,-30719,-30207,-29695,-29183, |
|
|
|
-28671,-28159,-27647,-27135,-26623,-26111,-25599,-25087,-24575,-24063, |
|
|
|
-23551,-23039,-22527,-22015,-21503,-20991,-20479,-19967,-19455,-18943, |
|
|
|
-18431,-17919,-17407,-16895,-16384,-15872,-15360,-14848,-14336,-13824, |
|
|
|
-13312,-12800,-12288,-11776,-11264,-10752,-10240, -9728, -9216, -8704, |
|
|
|
-8192, -7680, -7168, -6656, -6144, -5632, -5120, -4608, -4096, -3584, |
|
|
|
-3072, -2560, -2048, -1536, -1024, -512, 0 |
|
|
|
}; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
#! /usr/bin/perl |
|
|
|
$len = 256; |
|
|
|
print "const int16_t AudioWaveformTriangle[257] = {\n"; |
|
|
|
for ($i=0; $i <= $len; $i++) { |
|
|
|
|
|
|
|
$f = 0; |
|
|
|
if ($i < $len / 4) { |
|
|
|
$f = $i / ($len / 4); |
|
|
|
} elsif ($i < $len * 3 / 4) { |
|
|
|
$f = 2 - $i / ($len / 4); |
|
|
|
} else { |
|
|
|
$f = $i / ($len / 4) - 4; |
|
|
|
#print "$i $f\n"; |
|
|
|
} |
|
|
|
$d = sprintf "%.0f", $f * 32767.0; |
|
|
|
printf "%6d", $d + 0; |
|
|
|
print "," if ($i < $len); |
|
|
|
print "\n" if ($i % 10) == 9; |
|
|
|
} |
|
|
|
print "\n" unless ($len % 10) == 9; |
|
|
|
print "};\n"; |
|
|
|
#endif |
|
|
|
|
|
|
|
const int16_t AudioWaveformSquare[257] = { |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, |
|
|
|
32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767,-32767, |
|
|
|
-32767,-32767,-32767,-32767,-32767,-32767, 32767 |
|
|
|
}; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
#! /usr/bin/perl |
|
|
|
$len = 256; |
|
|
|
print "const int16_t AudioWaveformSquare[257] = {\n"; |
|
|
|
for ($i=0; $i <= $len; $i++) { |
|
|
|
$f = 1.0; |
|
|
|
if ($i < $len / 2) { |
|
|
|
$f = 1.0; |
|
|
|
} elsif ($i < $len) { |
|
|
|
$f = -1.0; |
|
|
|
} |
|
|
|
$d = sprintf "%.0f", $f * 32767.0; |
|
|
|
printf "%6d", $d + 0; |
|
|
|
print "," if ($i < $len); |
|
|
|
print "\n" if ($i % 10) == 9; |
|
|
|
} |
|
|
|
print "\n" unless ($len % 10) == 9; |
|
|
|
print "};\n"; |
|
|
|
#endif |
|
|
|
|
|
|
|
const int16_t AudioWaveformSawtooth[257] = { |
|
|
|
0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, |
|
|
|
2560, 2816, 3072, 3328, 3584, 3840, 4096, 4352, 4608, 4864, |
|
|
|
5120, 5376, 5632, 5888, 6144, 6400, 6656, 6912, 7168, 7424, |
|
|
|
7680, 7936, 8192, 8448, 8704, 8960, 9216, 9472, 9728, 9984, |
|
|
|
10240, 10496, 10752, 11008, 11264, 11520, 11776, 12032, 12288, 12544, |
|
|
|
12800, 13056, 13312, 13568, 13824, 14080, 14336, 14592, 14848, 15104, |
|
|
|
15360, 15616, 15872, 16128, 16384, 16639, 16895, 17151, 17407, 17663, |
|
|
|
17919, 18175, 18431, 18687, 18943, 19199, 19455, 19711, 19967, 20223, |
|
|
|
20479, 20735, 20991, 21247, 21503, 21759, 22015, 22271, 22527, 22783, |
|
|
|
23039, 23295, 23551, 23807, 24063, 24319, 24575, 24831, 25087, 25343, |
|
|
|
25599, 25855, 26111, 26367, 26623, 26879, 27135, 27391, 27647, 27903, |
|
|
|
28159, 28415, 28671, 28927, 29183, 29439, 29695, 29951, 30207, 30463, |
|
|
|
30719, 30975, 31231, 31487, 31743, 31999, 32255, 32511,-32767,-32511, |
|
|
|
-32255,-31999,-31743,-31487,-31231,-30975,-30719,-30463,-30207,-29951, |
|
|
|
-29695,-29439,-29183,-28927,-28671,-28415,-28159,-27903,-27647,-27391, |
|
|
|
-27135,-26879,-26623,-26367,-26111,-25855,-25599,-25343,-25087,-24831, |
|
|
|
-24575,-24319,-24063,-23807,-23551,-23295,-23039,-22783,-22527,-22271, |
|
|
|
-22015,-21759,-21503,-21247,-20991,-20735,-20479,-20223,-19967,-19711, |
|
|
|
-19455,-19199,-18943,-18687,-18431,-18175,-17919,-17663,-17407,-17151, |
|
|
|
-16895,-16639,-16384,-16128,-15872,-15616,-15360,-15104,-14848,-14592, |
|
|
|
-14336,-14080,-13824,-13568,-13312,-13056,-12800,-12544,-12288,-12032, |
|
|
|
-11776,-11520,-11264,-11008,-10752,-10496,-10240, -9984, -9728, -9472, |
|
|
|
-9216, -8960, -8704, -8448, -8192, -7936, -7680, -7424, -7168, -6912, |
|
|
|
-6656, -6400, -6144, -5888, -5632, -5376, -5120, -4864, -4608, -4352, |
|
|
|
-4096, -3840, -3584, -3328, -3072, -2816, -2560, -2304, -2048, -1792, |
|
|
|
-1536, -1280, -1024, -768, -512, -256, 0 |
|
|
|
}; |
|
|
|
|
|
|
|
#if 0 |
|
|
|
#! /usr/bin/perl |
|
|
|
$len = 256; |
|
|
|
print "const int16_t AudioWaveformSawtooth[257] = {\n"; |
|
|
|
for ($i=0; $i <= $len; $i++) { |
|
|
|
$f = 0; |
|
|
|
if ($i < $len / 2) { |
|
|
|
$f = $i / $len * 2; |
|
|
|
} else { |
|
|
|
$f = -2 + $i / $len * 2; |
|
|
|
#print "$i $f\n"; |
|
|
|
} |
|
|
|
$d = sprintf "%.0f", $f * 32767.0; |
|
|
|
printf "%6d", $d + 0; |
|
|
|
print "," if ($i < $len); |
|
|
|
print "\n" if ($i % 10) == 9; |
|
|
|
} |
|
|
|
print "\n" unless ($len % 10) == 9; |
|
|
|
print "};\n"; |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|