python3 音乐播放器_Android QPython3 可视化-音乐播放:MusicPlay.py
#需要BaseWindow.py
from BaseWindow import *
from android import rsla,jsla
from os.path import abspath
from traceback import format_exc
XML="""<?xml version="1.0" encoding="utf-8"?>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#5f7faf"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_weight="25">
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/Title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="8dp"
android:text="%s"
android:textColor="#ff0000"
android:gravity="center"
/>
android:id="@+id/MusicFileName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="%s"
android:textColor="#0000ff"
/>%s
%s
android:id="@+id/MusicTime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
/>
android:id="@+id/MusicNowTime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" "
android:textColor="#007f00"
android:layout_weight="1"
/>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1">
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="停止"
android:id="@+id/Play"
android:textSize="8dp"
android:background="#007f7f"
android:textColor="#ffffffff"
android:layout_weight="1"
android:gravity="center"/>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="暂停"
android:id="@+id/Pause"
android:textSize="8dp"
android:background="#7f7f00"
android:textColor="#ffffffff"
android:layout_weight="1"
android:gravity="center"/>
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="退出"
android:id="@+id/Exit"
android:textSize="8dp"
android:background="#7f3f3f"
android:textColor="#ffffffff"
android:layout_weight="1"
android:gravity="center"/>
"""
LrcXml='''
android:id="@+id/MusicNowLyric"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="8dp"
android:text=" "
android:textColor="#ef7000"
android:layout_weight="0.8"
/>''','''
android:id="@+id/Lyric"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:textColor="#cf00cf"
/>'''
def getSec(Dict,Name):
try:
r=Dict[Name]
except:
return '0分0.000秒',0
s,t=divmod(r,60000)
s=int(s)
t=round(t/1000,3)
return '%2d分%6.3f秒'%(s,t),r
def TxtRead(File):
m=open(File,"rb").read()
if m[0:3]==b'\xef\xbb\xbf':#UTF-8文件头
return m[3:].decode("utf-8")
else:
try:
return m.decode("utf-8")
except:
try:
return m.decode("gbk")
except:
return m.decode("utf-16")
def LrcAna(con):
global Lrc,lrcm,LrcT
con=con.splitlines()
Lrc=[]
for a in con:
b=a.rfind(']')
if b==-1:
continue
c=a[b+1:]
d=a[1:b].replace(' ','')
e=d.split('][')
for f in e:
g=colon2Time(f)
if g==-1:
continue
Lrc.append((g,c))
Lrc=sorted(Lrc)
lrcm=len(Lrc)
LrcT=[]
for a in range(lrcm):
LrcT.append(Lrc[a][0])
Lrc[a]=Lrc[a][1]
lrcm-=1
Lrc=tuple(Lrc)
LrcT=tuple(LrcT)
def shwLrc(Time):
if Time<=LrcT[0]:
k=(LrcT[0]-Time)//1000
if k<=4:
k=Dot[1]*(4-k)+Dot[0]*k
else:
k=''
v.MusicNowLyric.text=k
return
elif Time>=LrcT[lrcm]:
v.MusicNowLyric.text=Lrc[lrcm]
return
a=0;b=lrcm
while a!=b:
c=(a+b)//2
if Time
b=c
elif Time>=LrcT[c+1]:
a=c
else:
v.MusicNowLyric.text=Lrc[c]
return
else:
v.MusicNowLyric.text=Lrc[a]
def colon2Time(Time):
T=Time.split(':',1)
try:
return int(Eval(T[0])*60000+Eval(T[1])*1000)
except:
return -1
def Eval(x):
x=x.strip()
if x[0]=='0':
x=x[1:]
if x=='':
return 0
else:
return eval(x)
Dot=chr(9675),chr(9679)
def Info():
global npo
npo=v.MusicTime.progress
while True:
if rsla('mediaIsPlaying'):
s='播放中'
else:
s='未播放'
v.Play.text='播放'
v.Pause.text='继续'
Seek()
t=rsla('mediaPlayInfo')
t,i=getSec(t,'position')
ShwLrc(i)
npo=v.MusicTime.progress=str(i//1000)
v.MusicNowTime.text='%s/%s %s'%(t,dur,s)
if s=='未播放' or v.Pause.checked=='true' or v.Play.checked=='true' or v.Exit.checked=='true':
break
def Seek():
if npo!=v.MusicTime.progress:
jsla('mediaPlaySeek',int(v.MusicTime.progress)*1000)
def Err():
v.MusicFileName.text=v.MusicFileName.text+"\n"+format_exc()
jsla('mediaPlayClose')
class MainScreen(Layout):
def on_show(self):
global v
v=self.views
v.Play.add_event(click_EventHandler(v.Play,self.play))
v.Pause.add_event(click_EventHandler(v.Pause,self.pause))
v.MusicTime.add_event(click_EventHandler(v.MusicTime,Info))
v.Exit.add_event(click_EventHandler(v.Exit,self.exit))
try:
if rsla('mediaIsPlaying'):
jsla('mediaPlayClose')
global dur
if dur:
v.Lyric.text=dur
jsla('mediaPlay',Path)
r=rsla('mediaPlayInfo')
dur,r=getSec(r,'duration')
v.MusicTime.max=str(r//1000)
Info()
except:
Err()
def on_close(self):
pass
def play(self,view,dummy):
try:
if rsla('mediaIsPlaying'):
jsla('mediaPlayClose')
else:
jsla('mediaPlay',Path)
v.Play.text='停止'
v.Pause.text='暂停'
v.Play.checked='false'
Info()
except:
Err()
def pause(self,view,dummy):
try:
if rsla('mediaIsPlaying'):
jsla('mediaPlayPause')
else:
Seek()
jsla('mediaPlayStart')
v.Pause.text='暂停'
v.Play.text='停止'
v.Pause.checked='false'
Info()
except:
Err()
def exit(self,view,dummy):
jsla('mediaPlayClose')
FullScreenWrapper2App.close_layout()
def MusicPlay(MusicPath='',Title='QPython3 Music Player'):#主函数
#音乐播放(音乐文件路径,标题)
#支持LRC歌词文件,支持无损音乐格式
#例如MusicPlay("Aa/Bb.mp3"),如果"Aa/Bb.lrc"同时存在,则两个文件会被同时导入
global Path,Path2,dur,Lrc,ShwLrc
Path=abspath(MusicPath)
Path2=MusicPath
try:
dur=TxtRead(Path[:Path.rfind('.')]+'.lrc')
LrcAna(dur)
x=Str2Xml(Title),Str2Xml(Path2),LrcXml[1],LrcXml[0]
ShwLrc=shwLrc
except:
dur='';Lrc=()
x=Str2Xml(Title),Str2Xml(Path2),'',''
ShwLrc=lambda s:None
FullScreenWrapper2App.show_layout(MainScreen(XML%x,'Music'))
FullScreenWrapper2App.eventloop()
__all__=('MusicPlay','droid')
#QPython3 Music Player by 乘着船
含LRC歌词
含LRC歌词
含LRC歌词
不含LRC歌词
支持无损音乐格式
python3 音乐播放器_Android QPython3 可视化-音乐播放:MusicPlay.py相关推荐
- html音乐播放器换歌,web-audio-api可视化音乐播放器,实现暂停切换歌曲功能,粉色系专场~...
可视化的音乐播放器,可戳我观看效果 了解Web-Audio-Api 基础知识 标签是HTML5的新标签,通过添加src属性实现音乐播放. AudioContext是音频播放环境,原理与canvas的绘 ...
- html+css+js本地音乐播放器,实现可视化音频频谱
效果 html+css+js本地音乐播放器,实现可视化音频频谱 前言 之前用swing写了个本地音乐播放器(如下图),但是效果一言难尽,界面丑,功能bug也多,唉 所以后面又重新用html写了个,界面 ...
- 仿网易云音乐html代码,仿网易云音乐外链播放器UI的HTML5音乐播放器插件
简要教程 APlayer是一款仿网易云音乐外链播放器UI的HTML5音乐播放器插件.APlayer音乐播放器可以自定义歌曲封面,可以自定义同步歌词等,界面时尚大方,是一款非常好的HTML5音乐播放器插 ...
- html5自动播放音乐外链,仿网易云音乐外链播放器UI的HTML5音乐播放器插件
APlayer是一款仿网易云音乐外链播放器UI的HTML5音乐播放器插件.APlayer音乐播放器可以自定义歌曲封面,可以自定义同步歌词等,界面时尚大方,是一款非常好的HTML5音乐播放器插件. 安装 ...
- html制作在线视频音乐播放器,用html5制作音乐播放器,这3款就足够了!
用HTML5结合Jquery做一个简易版的音乐播放器 代码展示: 三生草 var sum = 1; function ssss(a) { var s = document.getElementById ...
- android音乐播放器文章,Android论文音乐播放器文章.doc
毕业论文毕业设计开题报告论文报告设计报告可行性研究报告 移动互联网开发 结业论文设计 学生姓名: 黄敏 学 号: k031241508 班 级: k0312415 论文题目: 音乐播放器 摘要: 当今 ...
- 基于android的音乐播放器毕业设计,基于android音乐播放器的毕业设计ppt
<基于android音乐播放器的毕业设计ppt>由会员分享,可在线阅读,更多相关<基于android音乐播放器的毕业设计ppt(29页珍藏版)>请在人人文库网上搜索. 1.1. ...
- android 音乐播放器设计,基于Android音乐播放器设计的实现毕业论文.pdf
摘要 随着手机的智能化以及网络的普及和应用,人类将进入移动互联 网的新时代.在国内,随着4G牌照的下发,三大运行商也在加紧抢 占移动互联网领域的制高点.在此过程中,人们对新一代移动互联终 端设备的功能 ...
- 单片机音乐播放器课程设计C语言,单片机音乐播放器课程设计中音乐代码怎么弄...
单片机音乐播放器课程设计中音乐代码怎么弄 答案:2 信息版本:手机版 解决时间 2019-10-06 13:16 已解决 2019-10-06 02:07 单片机音乐播放器课程设计中音乐代码怎么弄 ...
最新文章
- scrapy 模块功能流程--转
- 5分钟快速掌握 Python 定时任务框架
- qldump 备份所有表_MySQL中的备份和恢复是怎样执行的?
- X86汇编语言从实模式到保护模式08:中断和动态时钟显示
- Gradle学习之闭包
- win7字体安装_PR CC 下载和安装教程
- 生物信息分析中的reads是什么
- AADL Inspector 故障树安全分析模块
- adb devices后出现设备offline的解决方法
- java自行车DH32,中国国际自行车嘉年华之Enduro、DH装备篇
- 2020版熊猫金币解读及购买方式
- excel表格内文字怎么换行_Excel单元格内如何换行,这几招快拿小本本记下来
- 2006-09-28 墨子的双眼皮
- 16999元!华为Mate X终于发布了!附上手视频
- 易周金融 | 邮惠万家银行开业;微信公众号叫停四类金融营销宣传
- 在git clone报错
- 易地推招生拓客分享:如何让社群招生成为培训机构招生利器?
- 《计算机网络-谢希仁》读书笔记---概述
- Macbook M1 软件不兼容的解决办法
- 驱动程序之_3_网络设备_3_网卡驱动移植
热门文章
- 可视化不确定网络的概率图布局方法
- 4-20mA、0-5v模拟信号隔离器(光电)、安全栅、0-10v信号变送器
- 【openfire,smack使用总结】--Smack库的使用
- opencv resize方法总结
- 还原数据库bak文件
- Pycharm更换国内源(最新版无mange repositories)
- Github查看代码小技巧
- 趣头条“花钱买用户”?你看懂趣头条真正玩法了吗
- 趣头条——前区块链时代一次不成功的实验
- 普京称:一旦美国向乌提供爱国者防空系统,俄罗斯将100% 摧毁它们,如何解读其表态?...