linux 命令行 播放器,Linux下基于命令行的音乐播放器
玩家使用技术:
Python + GST()+控制台解析
播放器自我维持操作:
1. 播放
2. 下一首
3. 上一首歌
4. 暂停
5. 查看播放列表信息
6. 查看当前的播放信息
7. 停止(退出)
通过分析由meliae转储的内存信息,它最多占用2.5M内存播放器 命令行播放器 命令行,这相对较小.
对应的代码: (需要在ubuntu下安装py-gst: sudo apt-get install python-gst0.10)
import gst
import gobject
import sys
#to avoid eclipse'warning
eval('gobject.threads_init()')
from threading import Thread
class AudioPlayer:
EVENT_PLAY_NEW = 1
def __init__(self, advisor):
self.main = gobject.MainLoop()
self.player = gst.element_factory_make('playbin', 'player')
self.index = -1
self.list = None
self.advisor = advisor
bus = self.player.get_bus()
bus.add_signal_watch()
bus.connect('message', self.on_message)
Thread(target=self.main.run).start()
def add_list(self , list=[]):
if list is None:
list = []
self.list = [(i, l.strip(), l[l.rfind('/') + 1:]) for (i, l) in enumerate(list)]
def play(self, index=None):
#play specified tracks
if 0 <= index < len(self.list):
self.index = index
self.player.set_state(gst.STATE_NULL)
self.player.set_property('uri', self.list[index][1])
self.player.set_state(gst.STATE_PLAYING)
if self.advisor:
self.advisor.on_message(AudioPlayer.EVENT_PLAY_NEW, (self.index, self.get_title()))
#resume playing
if index is None:
if self.index > -1:
self.player.set_state(gst.STATE_PLAYING)
def pause(self):
self.player.set_state(gst.STATE_PAUSED)
def stop(self):
self.player.set_state(gst.STATE_NULL)
self.main.quit()
def get_title(self):
if self.index == -1 or len(self.list) == 0:
return None
return self.list[self.index][2]
def get_previous(self):
if self.index == -1 or len(self.list) == 0:
return - 1
if self.index == 0:
return 0
return self.index - 1
def get_next(self):
if len(self.list) == 0:
return - 1
if self.index + 1 == len(self.list):
return 0
return self.index + 1
def on_message(self, bus, message):
t = message.type
if t == gst.MESSAGE_ERROR:
self.play(self.get_next())
elif t == gst.MESSAGE_EOS:
self.play(self.get_next())
class Console:
def __init__(self, list):
self.player = AudioPlayer(self)
self.player.add_list(list)
self.player.play(0)
Thread(target=self.run).start()
def run(self):
while(True):
self.on_cmd(raw_input())
def on_cmd(self, cmd):
if cmd is None:
return
if cmd.startswith('play'):
self.player.play()
elif cmd.startswith('next'):
self.player.play(self.player.get_next())
elif cmd.startswith('previous'):
self.player.play(self.player.get_previous())
elif cmd.startswith('pause'):
self.player.pause()
elif cmd.startswith('list'):
print '====================================='
for info in self.player.list:
print '%s. %s' % (info[0], info[2])
print '====================================='
elif cmd.startswith('info'):
print '====================================='
print '%s. %s' % (self.player.index, self.player.get_title())
print '====================================='
elif cmd.startswith('stop'):
self.player.stop()
sys.exit(0)
elif cmd.startswith('dump'):
from meliae import scanner
scanner.dump_all_objects('./dump.txt')
else:
print '''=====================================
Usage:
play
next
previous
pause
list
info
stop
dump
====================================='''
def on_message(self, event, info):
if event == AudioPlayer.EVENT_PLAY_NEW:
print '====================================='
print 'Tracks: %s.%s' % (info[0], info[1])
print '====================================='
if len(sys.argv) != 2:
print 'player.py mp3.list'
sys.exit(-1)
list = [l.strip() for l in open(sys.argv[1]).readlines() if l.strip() != '']
Console(list)
原始链接:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-152097-1.html
linux 命令行 播放器,Linux下基于命令行的音乐播放器相关推荐
- android音乐播放器 毕业论文,毕业论文-- 基于Android系统的音乐播放器的实现 .doc...
毕业论文-- 基于Android系统的音乐播放器的实现 .doc 还剩 31页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! ...
- linux(ubuntu)下基于java的在线音乐仿qq播放器,
linux下基于java的在线音乐仿qq播放器,界面挺漂亮,界面全都是本人自己用java来画的,主要是我自己喜欢用ubuntu,但是由于没有人去做它的播放器,就自己来了,可以在线,有专辑图片,播放列表 ...
- 基于Amarok的跨平台音乐播放器:Clementine mac版
Clementine是一个基于Amarok的跨平台音乐播放器,同时它也支持 Win 和 Mac 平台,属于全栖型选手.Clementine可以将歌曲目录加入"库"中以进行搜索,可以 ...
- [内附完整源码和文档] 基于Android的手机音乐播放器的设计与实现
摘 要 随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活节奏的加快,生活压力越来越大,碎片化的时间越来越多,那么一个可以在碎片化的时间内调节 ...
- 基于FPGA设计的音乐播放器
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 基于FPGA设计的音乐播放器 一.生成PCM音频格式的音乐文件 1.PCM音频文件格式 2.Matlab读取WAV文件 二. ...
- 基于Android的手机音乐播放器的设计与实现
源码及论文下载:http://www.byamd.xyz/tag/android/ 摘 要 随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活 ...
- 基于android系统的音乐播放器,基于Android系统的音乐播放器软件设计与实现.doc
基于Android平台的音乐播放器 The Development of Mobile Music Player Based on Android platform system 学生学号: 学生姓名 ...
- iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)
代码地址如下: http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该 ...
- web html5音乐播放器设计与实现,基于HTML5技术的音乐播放器的设计与实现
Vol.33No.11Nov.2017 赤峰学院学报(自然科学版) Journal of Chifeng University (Natural Science Edition )第33卷第11期(下 ...
- 在HarmonyOS中实现基于JS卡片的音乐播放器
/ 今日科技快讯 / 近日,苹果首席执行官蒂姆·库克接受<时代>杂志专访,谈及他本人对领导力.企业价值和新技术的看法.库克表示,苹果不仅要引领创新,还要努力让世界变得更安全更公平, ...
最新文章
- 最高65万美元!2021美大厂码农收入一览
- php member limit,PHPAPP注入第十枚(未过滤)
- 微信系列研究之-----资源文件保护的小把戏
- Linux 安装 luarocks(lua的模块管理工具)
- 安卓APP_ 控件(7)——Toolbar栏目样式
- 必填字段的自定义JSF验证器
- Redis 持久化方式
- linux include 编译,linux-如何使用OpenSSL include编译.c文件?
- ECCV 2020 | CV “造车”,生成内容一致的车辆数据集 |
- 音标,口型,舌位对照表:适合已有一定英语基础的人重新回顾音标发音,在不断的练习中让自己的发音更准确,口型更标准。...
- 核fisher matlab,使用Fisher法matlab结合P值?
- android 资料
- python之修改pip为阿里源
- [Spark]如何设置使得spark程序不输出 INFO级别的内容
- mysql数据词典生成markdown_老板让我把数据库字典导出到Markdown格式的文件
- macOS中安装secoclient
- 数据库课设:简易图书管理系统
- Shiro在线刷新权限
- Java网络编程并实现一对一聊天室功能
- matlab将水印图像嵌入图像,改进的图像自嵌入水印算法及其MATLAB实现
热门文章
- React Ant Design UI 图片上传组件 代码片段
- ant design Cascader 实现联动省市区数据
- 即学即会 Serverless | 初识 Serverless 架构
- linux线程调度与rtos,实时Linux和RTOS的基本特性及技术进行比较
- Unix网络编程卷一第三章笔记
- V 神呼吁宽大处理,以太坊开发者 Virgil Griffith 被判入狱 63 个月
- 从内存布局上看,Rust的胖指针到底胖在栈上还是堆上?
- 博士的浪漫,就是把你写进论文致谢,保存一辈子
- Redis:从应用到底层,都在这儿了!
- 日均保护原创超6万篇,腾讯“至信链”助企鹅号作者一键维权