• 1000 Я давно хотел, чтобы Raspberry Pi генерировал тоны локально. Я могу воспроизводить тоны колокольчиков, выполнив следующие действия:
import numpy as np
p = pyaudio.PyAudio()
volume = 1 # range [0.0, 1.0]
fs = 44100 # sampling rate, Hz, must be integer
samples = ''
# generate samples, note conversion to float32 array
duration = 5.0
f = 500.0
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
duration = 1.0
f = 440.0
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
duration = 1.0
f = 349.23
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
duration = 1.0
f = 392.00
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
duration = 1.0
f = 261.63
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
duration = 0.5
f = 1.0
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
duration = 1.0
f = 261.63
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
duration = 1.0
f = 392.00
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
duration = 1.0
f = 440.0
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
duration = 1.0
f = 349.23
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
duration = 0.5
f = 1
samples = samples + (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
# for paFloat32 sample values must be in range [-1.0, 1.0]
stream = p.open(format=pyaudio.paFloat32,
channels=1,
rate=fs,
output=True)
# play. May repeat with different volume values (if done interactively)
stream.write(samples)
stream.stop_stream()
stream.close()
p.terminate()
, однако я не могу создавать тоны, которые повышаются или опускаются по высоте с течением времени, такие как тоны «Wail». Что мне нужно сделать с моим кодом, чтобы разрешить такое создание?