玩家使用技术:

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下基于命令行的音乐播放器相关推荐

  1. android音乐播放器 毕业论文,毕业论文-- 基于Android系统的音乐播放器的实现 .doc...

    毕业论文-- 基于Android系统的音乐播放器的实现 .doc 还剩 31页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! ...

  2. linux(ubuntu)下基于java的在线音乐仿qq播放器,

    linux下基于java的在线音乐仿qq播放器,界面挺漂亮,界面全都是本人自己用java来画的,主要是我自己喜欢用ubuntu,但是由于没有人去做它的播放器,就自己来了,可以在线,有专辑图片,播放列表 ...

  3. 基于Amarok的跨平台音乐播放器:Clementine mac版

    Clementine是一个基于Amarok的跨平台音乐播放器,同时它也支持 Win 和 Mac 平台,属于全栖型选手.Clementine可以将歌曲目录加入"库"中以进行搜索,可以 ...

  4. [内附完整源码和文档] 基于Android的手机音乐播放器的设计与实现

    摘 要 随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活节奏的加快,生活压力越来越大,碎片化的时间越来越多,那么一个可以在碎片化的时间内调节 ...

  5. 基于FPGA设计的音乐播放器

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 基于FPGA设计的音乐播放器 一.生成PCM音频格式的音乐文件 1.PCM音频文件格式 2.Matlab读取WAV文件 二. ...

  6. 基于Android的手机音乐播放器的设计与实现

    源码及论文下载:http://www.byamd.xyz/tag/android/ 摘 要 随着Android系统和移动互联网的快速崛起,手机已经成为人们生活不可缺的一部分,在现代人的生活中,人们生活 ...

  7. 基于android系统的音乐播放器,基于Android系统的音乐播放器软件设计与实现.doc

    基于Android平台的音乐播放器 The Development of Mobile Music Player Based on Android platform system 学生学号: 学生姓名 ...

  8. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)

    代码地址如下: http://www.demodashi.com/demo/11944.html 天道酬勤 前言 作为一名iOS开发者,每当使用APP的时候,总难免会情不自禁的去想想,这个怎么做的?该 ...

  9. web html5音乐播放器设计与实现,基于HTML5技术的音乐播放器的设计与实现

    Vol.33No.11Nov.2017 赤峰学院学报(自然科学版) Journal of Chifeng University (Natural Science Edition )第33卷第11期(下 ...

  10. 在HarmonyOS中实现基于JS卡片的音乐播放器

    /   今日科技快讯   / 近日,苹果首席执行官蒂姆·库克接受<时代>杂志专访,谈及他本人对领导力.企业价值和新技术的看法.库克表示,苹果不仅要引领创新,还要努力让世界变得更安全更公平, ...

最新文章

  1. 最高65万美元!2021美大厂码农收入一览
  2. php member limit,PHPAPP注入第十枚(未过滤)
  3. 微信系列研究之-----资源文件保护的小把戏
  4. Linux 安装 luarocks(lua的模块管理工具)
  5. 安卓APP_ 控件(7)——Toolbar栏目样式
  6. 必填字段的自定义JSF验证器
  7. Redis 持久化方式
  8. linux include 编译,linux-如何使用OpenSSL include编译.c文件?
  9. ECCV 2020 | CV “造车”,生成内容一致的车辆数据集 |
  10. 音标,口型,舌位对照表:适合已有一定英语基础的人重新回顾音标发音,在不断的练习中让自己的发音更准确,口型更标准。...
  11. 核fisher matlab,使用Fisher法matlab结合P值?
  12. android 资料
  13. python之修改pip为阿里源
  14. [Spark]如何设置使得spark程序不输出 INFO级别的内容
  15. mysql数据词典生成markdown_老板让我把数据库字典导出到Markdown格式的文件
  16. macOS中安装secoclient
  17. 数据库课设:简易图书管理系统
  18. Shiro在线刷新权限
  19. Java网络编程并实现一对一聊天室功能
  20. matlab将水印图像嵌入图像,改进的图像自嵌入水印算法及其MATLAB实现

热门文章

  1. React Ant Design UI 图片上传组件 代码片段
  2. ant design Cascader 实现联动省市区数据
  3. 即学即会 Serverless | 初识 Serverless 架构
  4. linux线程调度与rtos,实时Linux和RTOS的基本特性及技术进行比较
  5. Unix网络编程卷一第三章笔记
  6. V 神呼吁宽大处理,以太坊开发者 Virgil Griffith 被判入狱 63 个月
  7. 从内存布局上看,Rust的胖指针到底胖在栈上还是堆上?
  8. 博士的浪漫,就是把你写进论文致谢,保存一辈子
  9. Redis:从应用到底层,都在这儿了!
  10. 日均保护原创超6万篇,腾讯“至信链”助企鹅号作者一键维权