diff options
Diffstat (limited to 'util/audio_generate_dac_lut.py')
-rwxr-xr-x | util/audio_generate_dac_lut.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/util/audio_generate_dac_lut.py b/util/audio_generate_dac_lut.py new file mode 100755 index 000000000..c31ba3d7e --- /dev/null +++ b/util/audio_generate_dac_lut.py | |||
@@ -0,0 +1,67 @@ | |||
1 | #!/usr/bin/env python3 | ||
2 | # | ||
3 | # Copyright 2020 JohSchneider | ||
4 | # | ||
5 | # This program is free software: you can redistribute it and/or modify | ||
6 | # it under the terms of the GNU General Public License as published by | ||
7 | # the Free Software Foundation, either version 2 of the License, or | ||
8 | # (at your option) any later version. | ||
9 | # | ||
10 | # This program is distributed in the hope that it will be useful, | ||
11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | # GNU General Public License for more details. | ||
14 | # | ||
15 | # You should have received a copy of the GNU General Public License | ||
16 | # along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
17 | # | ||
18 | |||
19 | AUDIO_DAC_BUFFER_SIZE=256 | ||
20 | AUDIO_DAC_SAMPLE_MAX=4095 | ||
21 | |||
22 | def plot(values): | ||
23 | for v in values: | ||
24 | print('0'* int(v * 80/AUDIO_DAC_SAMPLE_MAX)) | ||
25 | |||
26 | def to_lut(values): | ||
27 | for v in values: | ||
28 | print(hex(int(v)), end=", ") | ||
29 | |||
30 | |||
31 | from math import sin, tau, pi | ||
32 | |||
33 | samples=[] | ||
34 | |||
35 | def sampleSine(): | ||
36 | for s in range(AUDIO_DAC_BUFFER_SIZE): | ||
37 | samples.append((sin((s/AUDIO_DAC_BUFFER_SIZE)*tau - pi/2) + 1 )/2* AUDIO_DAC_SAMPLE_MAX) | ||
38 | |||
39 | def sampleTriangle(): | ||
40 | for s in range(AUDIO_DAC_BUFFER_SIZE): | ||
41 | if s < AUDIO_DAC_BUFFER_SIZE/2: | ||
42 | samples.append(s/(AUDIO_DAC_BUFFER_SIZE/2) * AUDIO_DAC_SAMPLE_MAX) | ||
43 | else: | ||
44 | samples.append(AUDIO_DAC_SAMPLE_MAX - (s-AUDIO_DAC_BUFFER_SIZE/2)/(AUDIO_DAC_BUFFER_SIZE/2) * AUDIO_DAC_SAMPLE_MAX) | ||
45 | |||
46 | #compromise between square and triangle wave, | ||
47 | def sampleTrapezoidal(): | ||
48 | for i in range(AUDIO_DAC_BUFFER_SIZE): | ||
49 | a=3 #slope/inclination | ||
50 | if (i < AUDIO_DAC_BUFFER_SIZE/2): | ||
51 | s = a * (i * AUDIO_DAC_SAMPLE_MAX/(AUDIO_DAC_BUFFER_SIZE/2)) + (1-a)*AUDIO_DAC_SAMPLE_MAX/2 | ||
52 | else: | ||
53 | i = i - AUDIO_DAC_BUFFER_SIZE/2 | ||
54 | s = AUDIO_DAC_SAMPLE_MAX - a * (i * AUDIO_DAC_SAMPLE_MAX/(AUDIO_DAC_BUFFER_SIZE/2)) - (1-a)*AUDIO_DAC_SAMPLE_MAX/2 | ||
55 | |||
56 | if s < 0: | ||
57 | s=0 | ||
58 | if s> AUDIO_DAC_SAMPLE_MAX: | ||
59 | s=AUDIO_DAC_SAMPLE_MAX | ||
60 | samples.append(s) | ||
61 | |||
62 | |||
63 | #sampleSine() | ||
64 | sampleTrapezoidal() | ||
65 | #print(samples) | ||
66 | plot(samples) | ||
67 | to_lut(samples) | ||