You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
5.2 KiB
154 lines
5.2 KiB
# -*- coding: utf-8 -*-
|
|
"""
|
|
Created on Sun Dec 4 15:31:43 2022
|
|
|
|
@author: 86155
|
|
"""
|
|
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
Created on Sat Dec 3 11:45:42 2022
|
|
|
|
@author: 86155
|
|
"""
|
|
|
|
import pygame
|
|
import time
|
|
import threading
|
|
from turtle import *
|
|
from random import random,randint
|
|
|
|
music=input("请输入歌曲名")
|
|
Name=music
|
|
musicName=open(file=music,mode='r',encoding='utf-8')
|
|
music1=musicName.readline()
|
|
music2=musicName.readline()
|
|
musicName.close()
|
|
print('播放{}'.format(Name))
|
|
rhythm=eval(input("请输入节拍(正常速度是0.5)"))
|
|
beat=rhythm
|
|
print('节拍已确定')
|
|
tone=input('请确定基调')
|
|
#创建键盘#确定基调
|
|
if tone == 'C' :
|
|
pianokey={'1':'c1','2':'d1','3':'e1','4':'f1','5':'g1','6':'a1','7':'b1',
|
|
'q':'c','w':'d','e':'e','r':'f','t':'g','y':'a','u':'b',
|
|
'a':'c2','s':'d2','d':'e2','f':'f2','g':'g2','h':'a2','j':'b2',
|
|
'z':'_C','x':'_D','c':'_E','v':'_F','b':'_G','n':'_A','m':'_B',
|
|
'i':'c3','o':'d3','p':'e3','k':'f3','l':'g3',';':'a3',',':'b3',
|
|
'0':'0'
|
|
}
|
|
elif tone =='D':
|
|
pianokey={'1':'d1','2':'e1','3':'f1#','4':'g1','5':'a1','6':'b1','7':'c2#',
|
|
'q':'d','w':'e','e':'f#','r':'g','t':'a','y':'b','u':'c1#',
|
|
'a':'d2','s':'e2','d':'f2#','f':'g2','g':'a2','h':'b2','j':'c3#'
|
|
}
|
|
elif tone =='E':
|
|
pianokey={'1':'e1','2':'f1#','3':'g1#','4':'a1','5':'b1','6':'c2#','7':'d2#',
|
|
'q':'e','w':'f#','e':'g#','r':'a','t':'b','y':'c1#','u':'d1#',
|
|
'a':'e2','s':'f2#','d':'g2#','f':'a2','g':'b2','h':'c#','j':'d#',
|
|
'0':'0'
|
|
}
|
|
elif tone =='F':
|
|
pianokey={'1':'f1','2':'g1','3':'a1','4':'a1#','5':'c2','6':'d2','7':'e2',
|
|
'q':'f','w':'g','e':'a','r':'a#','t':'c1','y':'d1','u':'e1',
|
|
'a':'f2','s':'g2','d':'a2','f':'a2#','g':'c3','h':'d3','j':'e3',
|
|
'0':'0'
|
|
}
|
|
elif tone =='G':
|
|
pianokey={'1':'g1','2':'a1','3':'b1','4':'c2','5':'d2','6':'e2','7':'f2#',
|
|
'q':'g','w':'a','e':'b','r':'c1','t':'d1','y':'e1','u':'f1#',
|
|
'a':'g2','s':'a2','d':'b2','f':'c3','g':'d3','h':'e3','j':'f3#',
|
|
'0':'0'
|
|
}
|
|
elif tone =='A':
|
|
pianokey={'1':'a1','2':'b1','3':'c2#','4':'d2','5':'e2','6':'g2#','7':'h2#',
|
|
'q':'a','w':'b','e':'c1#','r':'d1','t':'e1','y':'g1#','u':'h1#',
|
|
'a':'a2','s':'b2','d':'c3#','f':'d3','g':'e3','h':'g3#','j':'h3#',
|
|
'0':'0'}
|
|
elif tone =='B':
|
|
pianokey={'1':'b1','2':'c2#','3':'d2#','4':'e2','5':'f2#','6':'g2#','7':'a2#',
|
|
'q':'b','w':'c1#','e':'d1#','r':'e1','t':'f1#','y':'g1#','u':'a1#',
|
|
'a':'b2','s':'c3#','d':'d3#','f':'e3','g':'f3#','h':'g3#','j':'g3#',
|
|
'0':'0'
|
|
}
|
|
print('基调已确定')
|
|
|
|
pygame.init()#初始化?
|
|
pygame.mixer.init()#初始化混音器模块
|
|
|
|
def playpiano(music):
|
|
music=music.split(' ')
|
|
for n in music:
|
|
if n=='|':
|
|
continue
|
|
elif '·_' in n :
|
|
pygame.mixer.Sound("audios/"+pianokey[n[0]]+ ".wav").play(maxtime = 1500)
|
|
time.sleep(beat*5/4)
|
|
elif '_·'in n:
|
|
pygame.mixer.Sound("audios/"+pianokey[n[0]]+ ".wav").play(maxtime = 1500)
|
|
time.sleep(beat*(3/4))
|
|
elif '__'in n:
|
|
pygame.mixer.Sound("audios/"+pianokey[n[0]]+ ".wav").play(maxtime = 1500)
|
|
time.sleep(beat/4)
|
|
elif '_'in n:
|
|
pygame.mixer.Sound("audios/"+pianokey[n[0]]+ ".wav").play(maxtime = 1500)
|
|
time.sleep(beat/2)
|
|
elif '·'in n:
|
|
pygame.mixer.Sound("audios/"+pianokey[n[0]]+ ".wav").play(maxtime = 1500)
|
|
time.sleep(beat*(1.5))
|
|
elif '-'in n:
|
|
k=n.count('-')
|
|
pygame.mixer.Sound("audios/"+pianokey[n[0]]+ ".wav").play(maxtime = 1500)
|
|
time.sleep(beat*(k+1))
|
|
else:
|
|
pygame.mixer.Sound("audios/"+pianokey[n[0]]+ ".wav").play(maxtime = 1500)
|
|
time.sleep(beat)
|
|
|
|
def painting (a):
|
|
screen = Screen()
|
|
width ,height = 800,600
|
|
screen.setup(width,height)
|
|
screen.title("星图")
|
|
screen.bgcolor("black")
|
|
screen.mode("logo")
|
|
screen.delay(0)
|
|
|
|
|
|
t = Turtle(visible = False,shape='circle')
|
|
t.pencolor("white")
|
|
t.fillcolor("white")
|
|
t.penup()
|
|
t.setheading(-90)
|
|
t.goto(width/2,randint(-height/2,height/2))
|
|
|
|
stars = []
|
|
for i in range(200):
|
|
star = t.clone()
|
|
s =random() /3
|
|
star.shapesize(s,s)
|
|
star.speed(int(s*10))
|
|
star.setx(width/2 + randint(1,width))
|
|
star.sety( randint(-height/2,height/2))
|
|
star.showturtle()
|
|
stars.append(star)
|
|
|
|
while True:
|
|
for star in stars:
|
|
star.setx(star.xcor() - 3 * star.speed())
|
|
if star.xcor()<-width/2:
|
|
star.hideturtle()
|
|
star.setx(width/2 + randint(1,width))
|
|
star.sety( randint(-height/2,height/2))
|
|
star.showturtle()
|
|
lt = threading.Thread(target=playpiano, args=[music1])
|
|
rt = threading.Thread(target=playpiano, args=[music2])
|
|
hand= threading.Thread(target=painting, args=('1'))
|
|
hand.start()
|
|
rt.start()
|
|
lt.start()
|
|
hand.join()
|
|
rt.join()
|
|
lt.join()
|
|
|