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:
from queue import Empty
from math import pi, sin
from math import pi, sin, ceil
import struct
import alsaaudio
@@ -35,16 +35,14 @@ def generate(frequency, duration = 0.125):
# generate a buffer with a sine wave of `frequency`
# 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
cycle_size = int(sampling_rate / frequency)
# number of full cycles we can fit into target_size
factor = int(target_size / cycle_size)
# number of full cycles we can fit into the duration
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)) \
for i in range(size)]