鱼C论坛

 找回密码
 立即注册
查看: 1755|回复: 2

[原创] 控制台音乐播放器

[复制链接]
发表于 2019-1-9 20:36:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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')

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-9 20:40:53 | 显示全部楼层
本帖最后由 遛狗的猫小萌 于 2019-1-9 20:45 编辑


                               
登录/注册后可看大图
C:\Users\Cat\Desktop\i.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-14 16:32:16 | 显示全部楼层
请教大侠,下面的代码播放mp3单曲,如果音乐文件比较大(3M)就播放正常,
如果小于1M,就出错,pygame.error: Error reading the stream. (code 18)
请问怎么解决?谢谢
from pygame import mixer
import time

mixer.init()
mixer.music.load('NI506.mp3')
mixer.music.play()
time.sleep(60)
mixer.music.stop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 15:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表