Я хотел бы иметь возможность воспроизвести идею, содержащуюся в коде ниже, но со звуком, который не является ужасно суровым для прослушивания. В идеале я хотел бы использовать решение, которое использует код, который могут понять школьные дети (функция play_note может быть импортирована, поэтому им не нужно беспокоиться о том, как это работает). Один ответ here предложил щелчок между последовательными нотами из-за неполных циклов звука, но я не знаю, как исправить это для изменения продолжительности.Плавно «Audialize» Рекурсия в Python с черепахой и PyAudio
Может ли кто-нибудь помочь в этом, пожалуйста? Можно ли заставить его работать с некоторой настройкой или как-то неправильно?
import turtle
import pyaudio
import numpy as np
def play_note(freq, dur):
p = pyaudio.PyAudio()
volume = 0.5 # range [0.0, 1.0]
fs = 44100 # sampling rate, Hz, must be integer
duration = dur # in seconds, may be float
f = freq # sine frequency, Hz, may be float
# generate samples, note conversion to float32 array
samples = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32)
# 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(volume*samples)
stream.stop_stream()
stream.close()
p.terminate()
def tree(branchLen,t):
if branchLen > 5:
freq = branchLen * 2 + 400
dur = branchLen/100.0
print freq, dur
play_note(freq, dur)
t.forward(branchLen)
t.right(20)
tree(branchLen-15,t)
t.left(40)
tree(branchLen-15,t)
t.right(20)
t.backward(branchLen)
def main():
t = turtle.Turtle()
t.speed(0)
myWin = turtle.Screen()
t.left(90)
t.up()
t.backward(100)
t.down()
t.color("green")
tree(75,t)
myWin.exitonclick()
main()
Щелчок происходит в звуке, когда амплитуда изменяется внезапно, что может произойти, если вы отключите синусоидальную волну в середине цикла. Решение состоит в том, чтобы добавить конверт, который в вашем случае означает только затухание последних, скажем, 10-20 мс образцов. – Linuxios
Спасибо @Linuxios. Любой шанс, который вы могли бы дать мне знать, как изменить мой код, чтобы достичь этого? – Robin
Я отправил ответ, который должен быть разумной отправной точкой, сообщите мне, есть ли что-нибудь в этом я могу расширить или объяснить больше. – Linuxios