Skip to content

Instantly share code, notes, and snippets.

@benevpi
Created December 9, 2019 17:06
Show Gist options
  • Save benevpi/74b94dc3255431121e54b7bdf7cdd4c2 to your computer and use it in GitHub Desktop.
Save benevpi/74b94dc3255431121e54b7bdf7cdd4c2 to your computer and use it in GitHub Desktop.
import time
import array
import math
import board
import digitalio
try:
from audiocore import RawSample
except ImportError:
from audioio import RawSample
try:
from audioio import AudioOut
except ImportError:
try:
from audiopwmio import PWMAudioOut as AudioOut
except ImportError:
pass # not always supported by every board!
SAMPLERATE = 8000 # 8000 samples/second, recommended!
def generate_sine(frequency):
length = SAMPLERATE // frequency
sine_wave = array.array("H", [0] * length)
for i in range(length):
sine_wave[i] = int(math.sin(math.pi * 2 * i / 18) * (2 ** 15) + 2 ** 15)
return RawSample(sine_wave, sample_rate=SAMPLERATE)
def generate_square(frequency):
length = SAMPLERATE // frequency
square_wave = array.array("H", [0] * length)
for i in range(length):
if i < length / 2:
square_wave[i] = 0
else:
square_wave[i] = 20000
return RawSample(square_wave, sample_rate=SAMPLERATE)
def generate_triangle(frequency):
length = SAMPLERATE // frequency
triangle_wave = array.array("H", [0] * length)
max_val = 65000
for i in range(length):
if i < length / 2:
triangle_wave[i] = math.floor((i/(length/2))*max_val)
else:
triangle_wave[i] = max_val - math.floor(((i-(length/2))/(length/2))*max_val)
print(triangle_wave)
return RawSample(triangle_wave, sample_rate=SAMPLERATE)
def one_sec(note):
audio.play(note, loop=True)
time.sleep(1)
audio.stop()
sine_A = generate_sine(440)
sine_B = generate_sine(494)
square_A = generate_square(440)
square_B = generate_square(494)
triangel_A = generate_triangle(440)
triangel_B = generate_triangle(494)
# Enable the speaker
speaker_enable = digitalio.DigitalInOut(board.SPEAKER_ENABLE)
speaker_enable.direction = digitalio.Direction.OUTPUT
speaker_enable.value = True
audio = AudioOut(board.SPEAKER)
one_sec(sine_A)
one_sec(square_A)
one_sec(triangel_A)
one_sec(sine_B)
one_sec(square_B)
one_sec(triangel_B)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment