diff options
author | Nick Brassel <nick@tzarc.org> | 2021-02-28 07:22:21 +1100 |
---|---|---|
committer | Nick Brassel <nick@tzarc.org> | 2021-02-28 07:22:21 +1100 |
commit | 1a5f6b54aff179732e3f4f4eb79e47454f0a1eb5 (patch) | |
tree | ebf645f55cb0442899c894765b1af4344fb734db /util/audio_generate_dac_lut.py | |
parent | 804d5c1c5d59d9a12c1d793289ccbd59cb650ec2 (diff) | |
parent | 624359b725c9bfe8176cf72cdc2c8bbb7513949f (diff) |
2021 February 27 Breaking Changes Update (#12040)
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 0000000000..c31ba3d7ee --- /dev/null +++ b/util/audio_generate_dac_lut.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +# +# Copyright 2020 JohSchneider +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +AUDIO_DAC_BUFFER_SIZE=256 +AUDIO_DAC_SAMPLE_MAX=4095 + +def plot(values): + for v in values: + print('0'* int(v * 80/AUDIO_DAC_SAMPLE_MAX)) + +def to_lut(values): + for v in values: + print(hex(int(v)), end=", ") + + +from math import sin, tau, pi + +samples=[] + +def sampleSine(): + for s in range(AUDIO_DAC_BUFFER_SIZE): + samples.append((sin((s/AUDIO_DAC_BUFFER_SIZE)*tau - pi/2) + 1 )/2* AUDIO_DAC_SAMPLE_MAX) + +def sampleTriangle(): + for s in range(AUDIO_DAC_BUFFER_SIZE): + if s < AUDIO_DAC_BUFFER_SIZE/2: + samples.append(s/(AUDIO_DAC_BUFFER_SIZE/2) * AUDIO_DAC_SAMPLE_MAX) + else: + samples.append(AUDIO_DAC_SAMPLE_MAX - (s-AUDIO_DAC_BUFFER_SIZE/2)/(AUDIO_DAC_BUFFER_SIZE/2) * AUDIO_DAC_SAMPLE_MAX) + +#compromise between square and triangle wave, +def sampleTrapezoidal(): + for i in range(AUDIO_DAC_BUFFER_SIZE): + a=3 #slope/inclination + if (i < AUDIO_DAC_BUFFER_SIZE/2): + s = a * (i * AUDIO_DAC_SAMPLE_MAX/(AUDIO_DAC_BUFFER_SIZE/2)) + (1-a)*AUDIO_DAC_SAMPLE_MAX/2 + else: + i = i - AUDIO_DAC_BUFFER_SIZE/2 + s = AUDIO_DAC_SAMPLE_MAX - a * (i * AUDIO_DAC_SAMPLE_MAX/(AUDIO_DAC_BUFFER_SIZE/2)) - (1-a)*AUDIO_DAC_SAMPLE_MAX/2 + + if s < 0: + s=0 + if s> AUDIO_DAC_SAMPLE_MAX: + s=AUDIO_DAC_SAMPLE_MAX + samples.append(s) + + +#sampleSine() +sampleTrapezoidal() +#print(samples) +plot(samples) +to_lut(samples) |