以下是一个使用 Pygame 编写的音频可视化代码,要求图标在中间转动,音频线再四周。代码中使用了 MP3 格式的音频文件。\n\npython\nimport pygame\nimport pygame.mixer\nimport pygame.draw\nimport pygame.time\nimport pygame.locals\nimport numpy as np\nimport pyaudio\nimport wave\n\n# 初始化 Pygame\npygame.init()\n\n# 设置屏幕尺寸\nscreen_width = 800\nscreen_height = 600\nscreen = pygame.display.set_mode((screen_width, screen_height))\n\n# 设置窗口标题\npygame.display.set_caption("Sound Visualization")\n\n# 加载音频文件\naudio_file = "audio.mp3"\npygame.mixer.init()\npygame.mixer.music.load(audio_file)\n\n# 获取音频文件的采样率和帧数\naudio = wave.open(audio_file, 'rb')\nsample_width = audio.getsampwidth()\nframe_rate = audio.getframerate()\naudio.close()\n\n# 设置音频缓冲区大小\nbuffer_size = int(frame_rate / 10)\n\n# 创建 PyAudio 对象\np = pyaudio.PyAudio()\n\n# 打开音频流\nstream = p.open(format=p.get_format_from_width(sample_width),\n channels=1,\n rate=frame_rate,\n input=True,\n output=False,\n frames_per_buffer=buffer_size)\n\n# 获取音频流的数据\ndef get_audio_data():\n data = stream.read(buffer_size)\n return np.frombuffer(data, dtype=np.int16)\n\n# 设置颜色\nbg_color = (0, 0, 0)\nline_color = (255, 255, 255)\nicon_color = (255, 0, 0)\n\n# 设置图标半径和线宽\nicon_radius = 50\nline_width = 2\n\n# 设置图标位置\nicon_x = screen_width // 2\nicon_y = screen_height // 2\n\n# 设置音频线的起始角度和长度\nstart_angle = 0\nline_length = 100\n\n# 开始播放音频\npygame.mixer.music.play()\n\nrunning = True\nwhile running:\n # 处理事件\n for event in pygame.event.get():\n if event.type == pygame.locals.QUIT:\n running = False\n\n # 清空屏幕\n screen.fill(bg_color)\n\n # 获取音频数据\n audio_data = get_audio_data()\n\n # 计算音频线的角度\n angle = np.mean(np.abs(audio_data)) / 32767 * 360\n\n # 计算音频线的终点坐标\n end_x = icon_x + int(np.cos(np.radians(angle)) * line_length)\n end_y = icon_y - int(np.sin(np.radians(angle)) * line_length)\n\n # 画音频线\n pygame.draw.line(screen, line_color, (icon_x, icon_y), (end_x, end_y), line_width)\n\n # 画图标\n pygame.draw.circle(screen, icon_color, (icon_x, icon_y), icon_radius)\n\n # 更新屏幕\n pygame.display.flip()\n\n # 限制帧率\n pygame.time.Clock().tick(30)\n\n# 关闭音频流\nstream.stop_stream()\nstream.close()\n\n# 终止 PyAudio 对象\np.terminate()\n\n# 退出 Pygame\npygame.quit()\n\n\n在代码中,我们使用了 Pygame 模块来创建窗口和绘制图形,使用 PyAudio 模块来处理音频流和获取音频数据。我们首先初始化 Pygame 和 PyAudio,然后加载音频文件并获取音频文件的采样率和帧数。接下来,我们使用 PyAudio 打开音频流,并定义一个函数来获取音频流的数据。然后,我们设置了图标和音频线的颜色、半径和线宽,并定义了图标的位置、音频线的起始角度和长度。在主循环中,我们首先获取音频数据,计算音频线的角度和终点坐标,然后使用 Pygame 绘制音频线和图标,并更新屏幕。最后,我们在循环结束时关闭音频流和 PyAudio,并退出 Pygame。\n\n请确保已安装 Pygame 和 PyAudio 模块,并将音频文件命名为 "audio.mp3" 并与代码文件放在同一目录下。运行代码后,将会打开一个窗口,并播放音频文件。窗口中心的图标会根据音频的声音强度转动,四周的音频线会根据音频的声音强度变化长度。


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

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