isine example: simplify calculations in generate()

i found them a tad hard to follow ...
This commit is contained in:
Oswald Buddenhagen
2024-02-01 21:11:30 +01:00
parent 664f81a777
commit 1d63226e56

View File

@@ -16,7 +16,7 @@ if sys.version_info[0] < 3:
else: else:
from queue import Empty from queue import Empty
from math import pi, sin from math import pi, sin, ceil
import struct import struct
import alsaaudio import alsaaudio
@@ -35,16 +35,14 @@ def generate(frequency, duration = 0.125):
# generate a buffer with a sine wave of `frequency` # generate a buffer with a sine wave of `frequency`
# that is approximately `duration` seconds long # that is approximately `duration` seconds long
# the buffersize we approximately want
target_size = int(sampling_rate * channels * duration)
# the length of a full sine wave at the frequency # the length of a full sine wave at the frequency
cycle_size = int(sampling_rate / frequency) cycle_size = int(sampling_rate / frequency)
# number of full cycles we can fit into target_size # number of full cycles we can fit into the duration
factor = int(target_size / cycle_size) factor = int(ceil(duration * frequency))
size = max(int(cycle_size * factor), 1) # total number of frames
size = cycle_size * factor
sine = [ int(32767 * sin(2 * pi * frequency * i / sampling_rate)) \ sine = [ int(32767 * sin(2 * pi * frequency * i / sampling_rate)) \
for i in range(size)] for i in range(size)]