Генерация плавного звука из Python на маломощном компьютере

Я пытаюсь написать простой генератор аудиофункций на Python, который будет работать на Raspberry Pi (модель 2). Код по существу делает это:

Генерация 1 секунды звукового сигнала (скажем, синусоида или прямоугольная волна и т. Д.)Воспроизвести его несколько раз подряд

Например:

import pyaudio
from numpy import linspace,sin,pi,int16

def note(freq, len, amp=1, rate=44100):
 t = linspace(0,len,len*rate)
 data = sin(2*pi*freq*t)*amp
 return data.astype(int16) # two byte integers

RATE = 44100
FREQ = 261.6

pa = pyaudio.PyAudio()
s = pa.open(output=True,
            channels=2,
            rate=RATE,
            format=pyaudio.paInt16,
            output_device_index=2)

# generate 1 second of sound
tone = note(FREQ, 1, amp=10000, rate=RATE)

# play it forever    
while True:
  s.write(tone)

Проблема заключается в том, что каждая итерация цикла приводит к слышимому «тиканию» в аудио, даже при использовании внешней звуковой карты USB. Есть ли способ избежать этого, вместо того, чтобы пытаться переписать все в C?

Я попытался использовать интерфейс обратного вызова pyaudio, но на самом деле это звучало хуже (возможно, мой Pi был метеористым).

Сгенерированный звук должен быть коротким, потому что он в конечном итоге будет динамически настраиваться с помощью внешнего управления, и любая задержка, превышающая 1 секунду, при изменении управления кажется просто неловкой. Есть ли лучший способ для получения этих сигналов из кода Python?

Ответы на вопрос(2)

Ваш ответ на вопрос