为什么 root.tracer(0, 0) 什么都不做?

问题描述 投票:0回答:1

我之前在关闭示踪剂的情况下多次使用乌龟(出于加速原因)但由于某种原因现在它不起作用!代码(我正在尝试制作音频可视化器。如果可能,请添加一个将当前“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(),它仍然会更新!

python-3.x turtle-graphics python-turtle
1个回答
0
投票

我相信最基本的问题是当你应该清除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()

© www.soinside.com 2019 - 2024. All rights reserved.