用pygame编写一个声音可视化代码要求图标在中间转动音频线再四周使用MP3格式
以下是一个使用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"并与代码文件放在同一目录下。运行代码后,将会打开一个窗口,并播放音频文件。窗口中心的图标会根据音频的声音强度转动,四周的音频线会根据音频的声音强度变化长度
原文地址: https://www.cveoy.top/t/topic/hYhG 著作权归作者所有。请勿转载和采集!