当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 45 篇帖子 ]  前往页数 1, 2, 3  下一页
作者 内容
1 楼 
 文章标题 : 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 13:17 
头像

注册: 2009-04-11 23:46
帖子: 4030
系统: Arch Linux
送出感谢: 11
接收感谢: 110
别的不说了,贴代码:(注意是 Python3 的)
代码:
#!/usr/bin/env python3
# fileencoding=utf-8

'''随机播放的 mocp'''

import os
import random

mocdir = os.path.expanduser('~/.moc/')

def getlist():
  '''从默认播放列表获取文件列表'''
  def getit(f):
    l = []
    for i in f:
      i = i.strip()
      if i.startswith('#'):
        continue
      l.append(i)
    return l

  file = os.path.join(mocdir, 'playlist.m3u')
  try:
    with open(file) as f:
      l = getit(f)
  except IOError as e:
    if e.errno == 21:
      print('错误:%s 是目录。' % e.filename, file=sys.stderr)
    else:
      print('未知错误:错误号', e.errno, ';错误信息', e.strerror, file=sys.stderr)
    sys.exit(FileError)
 
  return l

def playafile(l):
  '''随机播放一个文件'''
  file = random.choice(l)
  file = os.path.abspath(file)
  status = os.system("mocp --playit '%s'" % file)
  print('播放文件 %s。' % file)
  if status:
    print('错误:子进程 mocp 返回了错误号 %d。' % status, file=sys.stderr)

def main():
  playafile(getlist())

def usage():
  print('''rmocp --- 让 mocp 随机播放音乐
 
  说明:
    运行此程序即可让 mocp 随机播放它的播放列表中的音乐。
    在 mocp 中作如下设置可让其自动随机播放:
      取消 AutoNext;
      设置 OnStop 为本程序的绝对路径。
   
  作者:
    lilydjwg <lilydjwg@gmail.com>
   
  版本:
    1.0''')

if __name__ == '__main__':
  main()


怎么用里面写了。

我对 mocp 使用的 socket 通信特别感兴趣,就自己做了个 rmocp 程序(见附件,程序自身有使用说明)。后来才注意到 mocp 的 --playit 选项,发现要实现随机播放根本不用那么复杂(就上面不到 100 行的代码)。不过对于 socket 通信倒是学了不少,也算没白忙一场。而且,rmocp 是可以使用任意的播放列表的(包括从管道读取)。


附件:
rmocp.zip [3.24 KiB]
被下载 23 次


_________________
我的博客 http://blog.lilydjwg.me/
Dropbox,你值得拥有。
提问的智慧
Arch Linux 中文论坛

我的vimrc: http://git.io/vimrc


最后由 lilydjwg 编辑于 2014-10-17 20:27,总共编辑了 2 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 13:22 
头像

注册: 2007-08-22 15:55
帖子: 2837
地址: 新加坡
系统: Archlinux
送出感谢: 0 次
接收感谢: 9
不错,支持下。
不过我比较期待的是能重启后继续上次播放的曲目。。


_________________
Entschuldigung. Ich habe keine ahnung.
Secure with PGP: gpg --recv-keys 0x68b6e3d8
Fingerprint: 5556 517C F52F E402 DDF5 5400 6D30 F13E 68B6 E3D8
Towards A Sustainable Earth: Print Only When Necessary


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 13:27 
头像

注册: 2009-04-11 23:46
帖子: 4030
系统: Arch Linux
送出感谢: 11
接收感谢: 110
xjpvictor 写道:
不错,支持下。
不过我比较期待的是能重启后继续上次播放的曲目。。

这个我不期待,所以没写。简单说一下
OnSongChange 设置成一个脚本,比如
代码:
mocp -i | grep File | sed -e 's/File: //'> lastsong

想接着播放时,使用脚本
代码:
cat lastsong | xargs mocp --playit
mocp --next


_________________
我的博客 http://blog.lilydjwg.me/
Dropbox,你值得拥有。
提问的智慧
Arch Linux 中文论坛

我的vimrc: http://git.io/vimrc


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 15:59 
头像

注册: 2009-05-20 21:43
帖子: 735
送出感谢: 2
接收感谢: 2
关于moc的随机播放,还有添加和更新播放列表功能,本来就是moc已有的功能...请看http://forum.ubuntu.org.cn/viewtopic.php?f=74&t=230589&p=1541384#p1541384


_________________
http://wonc.me/


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 16:07 
头像

注册: 2008-04-26 12:41
帖子: 10974
送出感谢: 11
接收感谢: 38
潇洒走一回 写道:
关于moc的随机播放,还有添加和更新播放列表功能,本来就是moc已有的功能...请看http://forum.ubuntu.org.cn/viewtopic.php?f=74&t=230589&p=1541384#p1541384

:em09


_________________
[新手必读]wubi安装常见问题(FAQ)
[分享]装双系统的同学必看——Windows与Linux系统共享交换分区的方法
kde下唯美的暗黑内透主题(无需编译)
无穷老机上的Trinity Desktop Environment


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 16:19 
头像

注册: 2009-05-20 21:43
帖子: 735
送出感谢: 2
接收感谢: 2
lilydjwg 写道:
xjpvictor 写道:
不错,支持下。
不过我比较期待的是能重启后继续上次播放的曲目。。

这个我不期待,所以没写。简单说一下
OnSongChange 设置成一个脚本,比如
代码:
mocp -i | grep File | sed -e 's/File: //'> lastsong

想接着播放时,使用脚本
代码:
cat lastsong | xargs mocp --playit
mocp --next

通过这个方式记住上次未完的歌曲是行不通的,cat lastsong | xargs mocp --playit这条命令会在后台播放lastson,它不会占用shell,所以紧接着mocp --next又执行了,事实上,上次的歌曲根本没播放...所以还得调用mocp -i提取lastsong的时长,playit执行后,要sleep那个时长的时间,然后继续,当然还可以绕一下,使用mplayer来播放上次的歌曲,它是在前台运行的,把歌曲播放玩之后才交出控制权,所以可以把mocp -p写在mplayer $lastsong后面...
我说的两种方式,我都通过bash实现过,但是衔接的不太好...加上我对该功能不感兴趣,我在我个人的控制mocp播放的脚本中剔除了该功能


_________________
http://wonc.me/


最后由 潇洒走一回 编辑于 2009-10-31 16:35,总共编辑了 1 次

页首
 用户资料  
 
7 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 16:26 
头像

注册: 2007-08-22 15:55
帖子: 2837
地址: 新加坡
系统: Archlinux
送出感谢: 0 次
接收感谢: 9
但问题是你的onsongchange是要每隔一段时间就去查看一下moc的状态吗?有没有办法能让moc在换下一首的时候自动调用?


_________________
Entschuldigung. Ich habe keine ahnung.
Secure with PGP: gpg --recv-keys 0x68b6e3d8
Fingerprint: 5556 517C F52F E402 DDF5 5400 6D30 F13E 68B6 E3D8
Towards A Sustainable Earth: Print Only When Necessary


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 16:33 
头像

注册: 2009-05-20 21:43
帖子: 735
送出感谢: 2
接收感谢: 2
xjpvictor 写道:
但问题是你的onsongchange是要每隔一段时间就去查看一下moc的状态吗?有没有办法能让moc在换下一首的时候自动调用?

可以单独使用mplayer播放lastsong,它播放结束时下面的命令才会执行,这个我用bash实现过...


_________________
http://wonc.me/


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 16:39 
头像

注册: 2007-08-22 15:55
帖子: 2837
地址: 新加坡
系统: Archlinux
送出感谢: 0 次
接收感谢: 9
潇洒走一回, 我是说这个lastsong,是不是要过几秒就检查一下有没有变,还是说能让moc在换歌的时候自动更改lastsong


_________________
Entschuldigung. Ich habe keine ahnung.
Secure with PGP: gpg --recv-keys 0x68b6e3d8
Fingerprint: 5556 517C F52F E402 DDF5 5400 6D30 F13E 68B6 E3D8
Towards A Sustainable Earth: Print Only When Necessary


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 16:52 
头像

注册: 2009-04-11 23:46
帖子: 4030
系统: Arch Linux
送出感谢: 11
接收感谢: 110
xjpvictor 写道:
但问题是你的onsongchange是要每隔一段时间就去查看一下moc的状态吗?有没有办法能让moc在换下一首的时候自动调用?


写到 moc 的 config 里,由 mocp 自动调用啊


_________________
我的博客 http://blog.lilydjwg.me/
Dropbox,你值得拥有。
提问的智慧
Arch Linux 中文论坛

我的vimrc: http://git.io/vimrc


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 16:57 
头像

注册: 2007-08-22 15:55
帖子: 2837
地址: 新加坡
系统: Archlinux
送出感谢: 0 次
接收感谢: 9
lilydjwg 写道:
xjpvictor 写道:
但问题是你的onsongchange是要每隔一段时间就去查看一下moc的状态吗?有没有办法能让moc在换下一首的时候自动调用?


写到 moc 的 config 里,由 mocp 自动调用啊

moc的config里有这个?好的,回去看看。谢谢了哈。。


_________________
Entschuldigung. Ich habe keine ahnung.
Secure with PGP: gpg --recv-keys 0x68b6e3d8
Fingerprint: 5556 517C F52F E402 DDF5 5400 6D30 F13E 68B6 E3D8
Towards A Sustainable Earth: Print Only When Necessary


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 16:59 
头像

注册: 2009-05-20 21:43
帖子: 735
送出感谢: 2
接收感谢: 2
xjpvictor 写道:
潇洒走一回, 我是说这个lastsong,是不是要过几秒就检查一下有没有变,还是说能让moc在换歌的时候自动更改lastsong

我前面说了我试过两种方案来记住上次播放的歌曲,通过playit播放的话,我没有使用通过循环来每隔几秒用mocp -i来检察一次lastsong是否已经播放结束,然后接着mocp -p的方式,当然那是可以的,我是在提取lastsong的路径和名字时,同时提取了它的时长T,在脚本中playit那句后面加上sleep $T,然后才是mocp -p...但是缺陷是,在播放lastsong的过程中,如果前进或是后退的话,后面会有麻烦的,只能老老实实的把lastsong听完...


_________________
http://wonc.me/


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 17:09 
头像

注册: 2009-05-20 21:43
帖子: 735
送出感谢: 2
接收感谢: 2
潇洒走一回 写道:
xjpvictor 写道:
潇洒走一回, 我是说这个lastsong,是不是要过几秒就检查一下有没有变,还是说能让moc在换歌的时候自动更改lastsong

我前面说了我试过两种方案来记住上次播放的歌曲,通过playit播放的话,我没有使用通过循环来每隔几秒用mocp -i来检察一次lastsong是否已经播放结束,然后接着mocp -p的方式,当然那是可以的,我是在提取lastsong的路径和名字时,同时提取了它的时长T,在脚本中playit那句后面加上sleep $T,然后才是mocp -p...但是缺陷是,在播放lastsong的过程中,如果前进或是后退的话,后面会有麻烦的,只能老老实实的把lastsong听完...

我明白了,你是说什么时候把lastsong记下来, 当然是在mocp退出的时候最好啦,何必那么浪费呢?退出时可以不使用mocp -x嘛! 可以是Mocp -x,Mocp的内容自己写


_________________
http://wonc.me/


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 17:15 
头像

注册: 2007-08-22 15:55
帖子: 2837
地址: 新加坡
系统: Archlinux
送出感谢: 0 次
接收感谢: 9
潇洒走一回, 大哥,你终于明白我说什么了啊。。那样当然是可以,可是就需要再弄一个脚本去关闭moc,不如在moc里直接用shift+q退出方便。我先去试试moc的config。最近在看moc的源码,不过我太菜了,看的挺吃力的。


_________________
Entschuldigung. Ich habe keine ahnung.
Secure with PGP: gpg --recv-keys 0x68b6e3d8
Fingerprint: 5556 517C F52F E402 DDF5 5400 6D30 F13E 68B6 E3D8
Towards A Sustainable Earth: Print Only When Necessary


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 终于实现了 mocp 的随机播放
帖子发表于 : 2009-10-31 17:44 
头像

注册: 2009-04-11 23:46
帖子: 4030
系统: Arch Linux
送出感谢: 11
接收感谢: 110
xjpvictor 写道:
潇洒走一回, 大哥,你终于明白我说什么了啊。。那样当然是可以,可是就需要再弄一个脚本去关闭moc,不如在moc里直接用shift+q退出方便。我先去试试moc的config。最近在看moc的源码,不过我太菜了,看的挺吃力的。


可以看看 /usr/share/doc/moc/config.example.gz


_________________
我的博客 http://blog.lilydjwg.me/
Dropbox,你值得拥有。
提问的智慧
Arch Linux 中文论坛

我的vimrc: http://git.io/vimrc


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 45 篇帖子 ]  前往页数 1, 2, 3  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译