|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
学python两个月来感觉太爽了
以前学过一点C感觉C就像手动档的车
python绝对是自动档的
下面是我写的一个控制台音乐播放器
需要安装pygame,easygui库才可以用
import time
import pygame
import os
import sys
import random
import msvcrt
import easygui
#带边界值得整数型输入函数
def int_input(c,min,max):
while(1):
num_str=input(c)
if num_str.isdecimal()==True:
num=int(num_str)
if min<=num<=max:
return num
#循环内输入函数
def kbfunc():
x = msvcrt.kbhit()
if x:
ret = chr(ord(msvcrt.getch()))
#ret = msvcrt.getch()
else:
ret = -1
return ret
#搜索mp3函数
def find_mp3(dir):
#dir='C:\\Users\\CAT\\Desktop'
#f_name='a.txt'
#print(os.walk(''))
l=[]
for root,dirs,files in os.walk(dir,topdown=False):
for name in files:
#if os.path.splitext(name)[1] == '.mp3' :
if os.path.splitext(name)[1] == '.mp3' or\
os.path.splitext(name)[1] == '.ogg' :
#print(os.path.join(root,name))
l.append(os.path.join(root,name))
return l
#播放mp3函数
def play_mp3(dir):
global sx
sx=True
pygame.mixer.music.load(dir)
pygame.mixer.music.play(1)
# play_mp3(music_list[i])
#画横线函数
def row(x=0):
width = os.get_terminal_size().columns
height = os.get_terminal_size().lines
for count in range(0,width):
print('-',end='')
if x:
print()
#新建目录文件函数
def md_dir():
global music_list
dir=easygui.diropenbox(msg=None, title=None, default=None)
if dir==None:
return 0
try:
f=open('dir.txt','w',encoding='UTF-8')
f.write(dir)
f.close()
os.system('cls')
load_dir()
music_list=find_mp3(music_dir)
d_ui()
return 1
except FileNotFoundError:
print('写入文件失败!')
os.system('pause')
exit()
#从'dir.txt'加载音乐列表函数
def load_dir():
global music_dir
try:
f=open('dir.txt','r',encoding='UTF-8')
music_dir=f.read()
f.close()
except FileNotFoundError:
print('没有发现\'dir.txt\'的文件')
print('请选择一个音乐文件夹')
md_dir()
#绘制列表函数
def d_ui():
row()
print(" %s下共%d个音乐"%(music_dir,len(music_list)))
row(1)
for a in range(0,len(music_list)):
print('[%d] %s'%(a,music_list[a]))
print()
row(1)
print(" %s下共%d个音乐"%(music_dir,len(music_list)))
print(\
' 欢迎使用控制台播放器!!\n\
2019 (c) Ju Xinyang\n\
[d]:设置扫描音乐目录(选择一个要播放的音乐文件夹)\n\
[b]:输入歌曲编号播放\n\
[\']:顺序播放整个列表\n\
[?]:随机播放一曲\n\
[,]:上一曲 [.]:下一曲\n\
[p]:暂停 [o]:继续 \n\
[[]:音量减 []]:音量加\n\
[n]:播放列表设为所有歌曲 \n\
[m]:播放列表设为查找歌曲\n\
[f]:查找歌曲\n\
[\\]:改变播放模式(顺序,单曲,随机))\n\
[c]:查看音量&播放模式\n\
')
row(1)
#os.system("mode con cols=60 lines=9000")
#os.system("mode con cols=120")
os.system("title 控制台音乐播放器")
i=0
value=0.5
play_mode=0
music_dir=''
find_music_list=[]
music_list=[]
sx=False
pygame.mixer.init()
pygame.mixer.music.set_volume(value)
os.system('cls')
load_dir()
music_list=find_mp3(music_dir)
d_ui()
while(1):
try:
while(1):
r = kbfunc()
if pygame.mixer.music.get_busy()==False and sx==1:
if play_mode == 0: #顺序
i=(i+1)%len(music_list)
play_mp3(music_list[i])
print('>>> %d %-50s'%(i,music_list[i]))
elif play_mode == 1: #单曲循环
play_mp3(music_list[i])
print('>>> %d %-50s'%(i,music_list[i]))
elif play_mode == 2: #随机播放
i=random.randint(0,len(music_list)-1)
play_mp3(music_list[i])
print('>>> %d %-50s'%(i,music_list[i]))
if r != -1:
#print(r)
if r==' ':
input()
pass
elif r=='d':
md_dir()
elif r=='p':
if pygame.mixer.music.get_busy()==True:
pygame.mixer.music.pause()
print('已暂停')
elif r=='o':
if pygame.mixer.music.get_busy()==True:
pygame.mixer.music.unpause()
print('恢复播放')
elif r=='\'':
play_mp3(music_list[i])
print('顺序播放列表')
print('>>> %d %-50s'%(i,music_list[i]))
elif r==',':
if i>=1:
i-=1
else :
i=len(music_list)-1
play_mp3(music_list[i])
print(' < >>> %d %-50s'%(i,music_list[i]))
elif r=='.':
i=(i+1)%len(music_list)
play_mp3(music_list[i])
print(' > >>> %d %-50s'%(i,music_list[i]))
elif r=='b':
while (1):
i=int_input('请输入序号:',0,len(music_list)-1)
play_mp3(music_list[i])
print('>>> %d %-50s'%(i,music_list[i]))
break
elif r==']':
if value<1:
value+=0.05
else :
value=1
pygame.mixer.music.set_volume(value)
#print('音量:%.0f%%'%(value*100))
elif r=='[':
if value>0:
value-=0.05
else :
value=0
pygame.mixer.music.set_volume(value)
#print('音量:%.0f%%'%(value*100))
elif r=='\\':
play_mode=(play_mode+1)%3
if play_mode == 0 :
print('顺序播放 >')
elif play_mode == 1:
print('单曲循环 -')
elif play_mode == 2 :
print('随机播放 ?')
elif r=='?':
i=random.randint(0,len(music_list)-1)
play_mp3(music_list[i])
print(' ? >>> %d %-50s'%(i,music_list[i]))
elif r=='f':
music_list=find_mp3(music_dir)
find_music_list=[]
while (1):
fm=input('请输入查找歌曲名的一部分:')
old_num=0
new_num=0
for e in music_list:
if e.find(fm)>0:
find_music_list.append(e)
print('[%d] [%d] %s'%(old_num ,new_num,e))
new_num+=1
old_num += 1
# for a in range(0,len(find_music_list)):
# print('[%d] %s'%(a,find_music_list[a]))
print('查找完毕!!查找歌曲如上\n[m]可以将播放列表设成查找列表')
break
elif r=='n':
music_list=find_mp3(music_dir)
print('歌曲列表切换到 全部歌曲')
elif r=='m':
if len(find_music_list)==0:
print('所查找的歌曲列表为空!')
else :
music_list=find_music_list
print('歌曲列表切换到 所查找的歌曲')
elif r=='c':
print('当前音量:%.0f%%'%(value*100))
#print('%d %d'%(pygame.mixer.music.get_busy(),sx))
print('当前播放模式:',end='')
if play_mode == 0 :
print('顺序播放 >')
elif play_mode == 1:
print('单曲循环 -')
elif play_mode == 2 :
print('随机播放 ?')
else:
pass
time.sleep(0.1)
except pygame.error:
print('◆%s\n文件有错误!!!自动播放下一首!!!'%(music_list[i]))
os.system('pause')
|
|