微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pygame 中的意外绘图

如何解决Pygame 中的意外绘图

我正在 pygame 中制作声音可视化器。 这是我的源代码

#importing packages
import pygame,math
import sounddevice as sd

#colors 
COLOR = {
    'Black':[0,0],'White':[255,255,255],'Red':{255,0},'Yellow':[255,'Green':[0,'Blue':[0,255]
    }


#function to get value equal to or between min and max value

def clamp(min_value,max_value,value):

    if value < min_value:
        return min_value

    if value > max_value:
        return max_value

    return value

# class to draw bars in drawing

class AudioBar:

    def __init__(self,cx,cy,color,angle,width=1,min_height=20,max_height=300,extend=False):

        self.cx,self.cy= cx,cy

        self.color = color
        self.prev_height = min_height
        self.width,self.min_height,self.max_height = width,min_height,max_height

        self.angle = math.radians(angle)
        self.ax,self.ay=cx,cy

     # update position of bar
    def update(self,height):
        height = height * 1000
        height = clamp(self.min_height,self.max_height,height)
        if height<self.prev_height:
            height = self.prev_height -(height*0.1)
        else:
            height = self.prev_height + (height*0.1)
        self.ax = self.cx+(math.sin(self.angle)*height)
        self.ay = self.cy+(math.cos(self.angle)*height)
        self.prev_height = height
        return self
    # for rendering on screen
    def render(self,screen)->None:
        pygame.draw.line(screen,self.color,[self.cx,self.cy],[self.ax,self.ay],self.width)

# function to get data from input stream

#i am not get live data . help!

def getData() -> list:
    data,_ = stream.read(360)
    data = data.flatten()
    return data

# main function
def main()-> None:
    pygame.init()
    screen = pygame.display.set_mode([500,500])
    
    bars =[]
#range is 360 to draw lines on 360 angles
    for angle in range(360):
        bars.append(
            AudioBar(
                250,250,COLOR['Black'],angle))
    while True:
        data= getData()
        
        screen.fill(COLOR['White'])
        for i,d in enumerate(data):
            bars[i].update(d).render(screen)
        pygame.display.flip()
            

try:
    stream = sd.InputStream(
        device=1,channels=1)
    with stream:
        main()
except Exception as e:
    raise e

效果很好,但是 绘图中有不需要的加号+ 某种图案。

这能解决吗?

还有一件事是毫无疑问的,在 stream 中,我得到的数据不是新的而是旧的,之后会被渲染。我想要实时数据。而且它看起来不错。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?