Created
December 9, 2019 17:06
-
-
Save benevpi/74b94dc3255431121e54b7bdf7cdd4c2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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