以下是一个使用Pygame编写的声音可视化代码,要求图标在中间转动,音频线再四周。代码中使用了MP3格式的音频文件。

import pygame
import pygame.mixer
import pygame.draw
import pygame.time
import pygame.locals
import numpy as np
import pyaudio
import wave

# 初始化Pygame
pygame.init()

# 设置屏幕尺寸
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))

# 设置窗口标题
pygame.display.set_caption("Sound Visualization")

# 加载音频文件
audio_file = "audio.mp3"
pygame.mixer.init()
pygame.mixer.music.load(audio_file)

# 获取音频文件的采样率和帧数
audio = wave.open(audio_file, 'rb')
sample_width = audio.getsampwidth()
frame_rate = audio.getframerate()
audio.close()

# 设置音频缓冲区大小
buffer_size = int(frame_rate / 10)

# 创建PyAudio对象
p = pyaudio.PyAudio()

# 打开音频流
stream = p.open(format=p.get_format_from_width(sample_width),
                channels=1,
                rate=frame_rate,
                input=True,
                output=False,
                frames_per_buffer=buffer_size)

# 获取音频流的数据
def get_audio_data():
    data = stream.read(buffer_size)
    return np.frombuffer(data, dtype=np.int16)

# 设置颜色
bg_color = (0, 0, 0)
line_color = (255, 255, 255)
icon_color = (255, 0, 0)

# 设置图标半径和线宽
icon_radius = 50
line_width = 2

# 设置图标位置
icon_x = screen_width // 2
icon_y = screen_height // 2

# 设置音频线的起始角度和长度
start_angle = 0
line_length = 100

# 开始播放音频
pygame.mixer.music.play()

running = True
while running:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.locals.QUIT:
            running = False

    # 清空屏幕
    screen.fill(bg_color)

    # 获取音频数据
    audio_data = get_audio_data()

    # 计算音频线的角度
    angle = np.mean(np.abs(audio_data)) / 32767 * 360

    # 计算音频线的终点坐标
    end_x = icon_x + int(np.cos(np.radians(angle)) * line_length)
    end_y = icon_y - int(np.sin(np.radians(angle)) * line_length)

    # 画音频线
    pygame.draw.line(screen, line_color, (icon_x, icon_y), (end_x, end_y), line_width)

    # 画图标
    pygame.draw.circle(screen, icon_color, (icon_x, icon_y), icon_radius)

    # 更新屏幕
    pygame.display.flip()

    # 限制帧率
    pygame.time.Clock().tick(30)

# 关闭音频流
stream.stop_stream()
stream.close()

# 终止PyAudio对象
p.terminate()

# 退出Pygame
pygame.quit()

在代码中,我们使用了Pygame模块来创建窗口和绘制图形,使用PyAudio模块来处理音频流和获取音频数据。我们首先初始化Pygame和PyAudio,然后加载音频文件并获取音频文件的采样率和帧数。接下来,我们使用PyAudio打开音频流,并定义一个函数来获取音频流的数据。然后,我们设置了图标和音频线的颜色、半径和线宽,并定义了图标的位置、音频线的起始角度和长度。在主循环中,我们首先获取音频数据,计算音频线的角度和终点坐标,然后使用Pygame绘制音频线和图标,并更新屏幕。最后,我们在循环结束时关闭音频流和PyAudio,并退出Pygame。

请确保已安装Pygame和PyAudio模块,并将音频文件命名为"audio.mp3"并与代码文件放在同一目录下。运行代码后,将会打开一个窗口,并播放音频文件。窗口中心的图标会根据音频的声音强度转动,四周的音频线会根据音频的声音强度变化长度

用pygame编写一个声音可视化代码要求图标在中间转动音频线再四周使用MP3格式

原文地址: https://www.cveoy.top/t/topic/hYhG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录