我之前在关闭示踪剂的情况下多次使用乌龟(出于加速原因)但由于某种原因现在它不起作用!代码(我正在尝试制作音频可视化器。如果可能,请添加一个将当前“I”值输出到扬声器的东西,以便它与输出匹配):
import turtle,pydub
import numpy as np
from pydub import AudioSegment
count = -500
sound = AudioSegment.from_wav("./input/experiment.wav")
# get raw audio data as a bytestring
raw_data = sound.raw_data
pointer = turtle.Turtle()
root = turtle.Screen()
pointer.hideturtle()
root.tracer(0, 0)
pointer.setpos(count, 0)
root.clear()
for i in raw_data:
count += 10
pointer.setpos(count, (i // 2))
if count >= 500:
count = -500
root.update()
root.clear()
pointer.setpos(count, (i // 2))
我看不出有什么不妥。到底是怎么回事?如果我不放 root.update(),它仍然会更新!
我相信最基本的问题是当你应该清除turtle时,你正在清除screen。我通过此更改重新编写了您的代码,并解决了其他一些问题。例如,将每个屏幕更新变成一个计时器事件:
from turtle import Screen, Turtle
from pydub import AudioSegment
SAMPLE_SIZE = 1000 # 1 second = 1000 ms
count = 0
def display():
global count
turtle.clear()
for x, sample in enumerate(raw_data[count:count + SAMPLE_SIZE], start=-SAMPLE_SIZE//2):
turtle.setpos(x, sample/2)
screen.update()
count += SAMPLE_SIZE
turtle.setx(-SAMPLE_SIZE//2)
screen.ontimer(display)
sound = AudioSegment.from_wav("./input/experiment.wav")
raw_data = sound.raw_data
screen = Screen()
screen.setup(SAMPLE_SIZE, 500)
screen.tracer(False)
turtle = Turtle()
turtle.hideturtle()
turtle.setx(-SAMPLE_SIZE//2)
display()
screen.exitonclick()