You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
774 B
Python
31 lines
774 B
Python
3 years ago
|
import numpy as np
|
||
|
import simpleaudio as sa
|
||
|
|
||
|
# calculate note frequencies
|
||
|
A_freq = 440
|
||
|
Csh_freq = A_freq * 2 ** (4 / 12)
|
||
|
E_freq = A_freq * 2 ** (7 / 12)
|
||
|
|
||
|
# get timesteps for each sample, T is note duration in seconds
|
||
|
sample_rate = 44100
|
||
|
T = 0.25
|
||
|
t = np.linspace(0, T, T * sample_rate, False)
|
||
|
|
||
|
# generate sine wave notes
|
||
|
A_note = np.sin(A_freq * t * 2 * np.pi)
|
||
|
Csh_note = np.sin(Csh_freq * t * 2 * np.pi)
|
||
|
E_note = np.sin(E_freq * t * 2 * np.pi)
|
||
|
|
||
|
# concatenate notes
|
||
|
audio = np.hstack((A_note, Csh_note, E_note))
|
||
|
# normalize to 16-bit range
|
||
|
audio *= 32767 / np.max(np.abs(audio))
|
||
|
# convert to 16-bit data
|
||
|
#audio = audio.astype(np.int16)
|
||
|
|
||
|
# start playback
|
||
|
#play_obj = sa.play_buffer(audio, 1, 2, sample_rate)
|
||
|
|
||
|
# wait for playback to finish before exiting
|
||
|
#play_obj.wait_done()
|