b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Linux下基于命令行的音乐播放器

电脑杂谈  发布时间:2020-03-25 19:14:18  来源:网络整理

声纳探鱼器实战视频播放_千年gm命令查看器_播放器 命令行

玩家使用技术:

Python + GST()+控制台解析

播放器 命令行_声纳探鱼器实战视频播放_千年gm命令查看器

播放器自我维持操作:

1. 播放

播放器 命令行_千年gm命令查看器_声纳探鱼器实战视频播放

2. 下一首

3. 上一首歌

千年gm命令查看器_声纳探鱼器实战视频播放_播放器 命令行

4. 暂停

5. 查看播放列表信息

千年gm命令查看器_声纳探鱼器实战视频播放_播放器 命令行

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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...