播放ktv模块

播放ktv模块

"""
   playktv.py模块,本模块提供playktv函数。
   在海龟屏幕显示歌词并播放歌曲。
"""
import time 
from turtle import *
from winsound import PlaySound,SND_ASYNC

def playktv(turtle,song_file,lrc_file,fontstyle=("",24,"normal") ):
    """在海龟屏幕显示歌词并播放歌曲
       turtle:海龟对象或其子类的实例
       song_file:歌曲文件
       lrc_file:歌词文件,诸如:[00:00.00]月满西楼
                                 [01:00.12]红藕香残 玉簟秋
       上面这样的歌词文件。
       fontstyle为三元组,表示用write写字时的字体风格。
    """

    x,y = turtle.position()            # 歌词中央坐标
    fgcolor = turtle.pencolor()        # 歌词前景色 
    bgcolor = turtle.fillcolor()       # 歌词背景色
    
    words_list=[]                      # 歌词列表
    words_index=0                      # 歌词索引

    f = open(lrc_file)                 # 打开歌词文件
    words_=f.readlines()               # 读取歌词文件
    f.close()                          # 关闭文件

    words_list=[ line.strip() for line in words_ if len(line)>1]  
    words_lines=len(words_list)    

    PlaySound(song_file, SND_ASYNC) # 异步播放音效

    def get_time_axis(index):
        """获取时间轴"""
        songtime=words_list[index]
        songtime=songtime.split("]")[0]
        songtime=songtime.split(":")
        songtimef=songtime[0][1:3]
        songtimef=int(songtimef)*60    
        songtimem=float(songtime[1])
        return int((songtimef+songtimem)*1000)
    
    words_index=0
    begin_time=time.time()
    def display_subtitle():
        """随着音乐显示歌词函数"""
        nonlocal words_index            # 歌词索引号
        nonlocal words_lines            # 歌词line数          
        current_time=time.time()
        running_time=(current_time-begin_time)*1000
        # 如果逝去的时间大于歌词文件中那个时间点就换歌词
        if running_time > get_time_axis(words_index):
            turtle.clear()
            display_words_=words_list[words_index].split("]")[1]
            turtle.goto(x,y)
            turtle.color(bgcolor)
            # 在左上一个单位印字
            turtle.write(display_words_,align='center',font=fontstyle)
            turtle.goto(x-1,y+1)
            turtle.color(fgcolor)
            turtle.write(display_words_,align='center',font=fontstyle)    
            words_index=words_index+1            
        if words_index
					
李兴球

李兴球的博客是Python创意编程原创博客

评论已关闭。