Python语言带速度的简谱播放器代码QZQ

import pygame
import tkinter as tk
from tkinter import scrolledtext

初始化pygame的混音器

pygame.mixer.init()

音乐文件映射

music_files = {
‘-’: ‘0.wav’,
‘1’: ‘1.wav’,
‘2’: ‘2.wav’,
‘3’: ‘3.wav’,
‘4’: ‘4.wav’,
‘5’: ‘5.wav’,
‘6’: ‘6.wav’,
‘7’: ‘7.wav’
}

播放音乐的函数

def play_music():
user_input = text_box.get(“1.0”, tk.END).strip()
speed_str = speed_entry.get().strip()
if not user_input:
print(“输入框为空,请输入数字简谱。”)
return
try:
note_duration = int(speed_str)
except ValueError:
print(“速度输入不是有效的整数,请重新输入。”)
return

for digit in user_input:
    if digit in music_files:
        pygame.mixer.music.load(music_files[digit])
        pygame.mixer.music.play()
        pygame.time.wait(note_duration)
    else:
        print(f"数字 {digit} 没有对应的音乐文件。")
        break

创建右键菜单

def create_context_menu(event):
context_menu = tk.Menu(root, tearoff=0)
context_menu.add_command(label=“复制”, command=lambda: text_box.event_generate(“<>”))
context_menu.add_command(label=“粘贴”, command=lambda: text_box.event_generate(“<>”))
context_menu.add_command(label=“全选”, command=select_all_text)
context_menu.add_command(label=“删除”, command=delete_text)
try:
context_menu.tk_popup(event.x_root, event.y_root)
finally:
context_menu.grab_release()

全选文本的函数

def select_all_text():
text_box.tag_add(tk.SEL, “1.0”, tk.END)

删除文本的函数

def delete_text():
text_box.delete(“1.0”, tk.END)

创建主窗口

root = tk.Tk()
root.title(“数字简谱播放器”)
root.geometry(“400x250”) # 适当调整窗口大小

创建一个文本框让用户输入数字简谱

text_box = scrolledtext.ScrolledText(root, width=50, height=10)
text_box.pack(padx=10, pady=10)
text_box.bind(“”, create_context_menu) # 绑定右键点击事件

创建一个标签和编辑框用于输入速度

speed_label = tk.Label(root, text=“请输入播放速度(毫秒/音符):”)
speed_label.pack(pady=5)
speed_entry = tk.Entry(root)
speed_entry.pack(pady=5)

创建一个按钮,点击后播放音乐

play_button = tk.Button(root, text=“播放音乐”, command=play_music)
play_button.pack(pady=10)

运行主循环

root.mainloop()

清理Tkinter

root.destroy()

你可能感兴趣的:(python,pygame,开发语言)