终于实现了 mocp 的随机播放

Totem,mplayer,sopcast,realplayer,bmp
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 终于实现了 mocp 的随机播放

#16

帖子 潇洒走一回 » 2009-10-31 17:45

那样当然是可以,可是就需要再弄一个脚本去关闭moc,不如在moc里直接用shift+q退出方便。我先去试试moc的config。最近在看moc的源码,不过我太菜了,看的挺吃力的。
我通过自己写的叫作Mocp的脚本调用moc,感觉更方便了...
上次由 潇洒走一回 在 2009-10-31 23:56,总共编辑 1 次。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 终于实现了 mocp 的随机播放

#17

帖子 lilydjwg » 2009-10-31 17:51

潇洒走一回 写了:我通过自己写的叫作Mocp的脚本调用moc,感觉更方便了...
贴来瞧瞧
头像
photor
论坛版主
帖子: 11004
注册时间: 2008-04-26 12:41

Re: 终于实现了 mocp 的随机播放

#18

帖子 photor » 2009-10-31 18:29

潇洒走一回 写了:
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播放的脚本中剔除了该功能
行不通,一旦你用mocp -p的话,就是从播放列表的第一首歌开始播放了 :em20
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 终于实现了 mocp 的随机播放

#19

帖子 lilydjwg » 2009-10-31 18:31

photor 写了:
潇洒走一回 写了:
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播放的脚本中剔除了该功能
行不通,一旦你用mocp -p的话,就是从播放列表的第一首歌开始播放了 :em20
没有用 mocp -p 啊,用的是 --playit,又叫 -l
头像
photor
论坛版主
帖子: 11004
注册时间: 2008-04-26 12:41

Re: 终于实现了 mocp 的随机播放

#20

帖子 photor » 2009-10-31 18:38

lilydjwg 写了:
photor 写了:
潇洒走一回 写了:
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播放的脚本中剔除了该功能
行不通,一旦你用mocp -p的话,就是从播放列表的第一首歌开始播放了 :em20
没有用 mocp -p 啊,用的是 --playit,又叫 -l
我是说的潇洒走一回的方案,你那个mocp -l更行不通,你试验一下就知道了
上次由 photor 在 2009-10-31 18:39,总共编辑 1 次。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 终于实现了 mocp 的随机播放

#21

帖子 lilydjwg » 2009-10-31 18:39

潇洒走一回 写了:
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播放的脚本中剔除了该功能
还是没看明白和后台有什么关系。最后由于通信关系让中间休息一秒足够了。
我试了一下,问题在于文件名传递不成功(可能是最后的换行符的关系)。如果真是这样,可能最方便的办法是去改源代码了。
头像
photor
论坛版主
帖子: 11004
注册时间: 2008-04-26 12:41

Re: 终于实现了 mocp 的随机播放

#22

帖子 photor » 2009-10-31 18:42

lilydjwg 写了:
潇洒走一回 写了:
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播放的脚本中剔除了该功能
还是没看明白和后台有什么关系。最后由于通信关系让中间休息一秒足够了。
我试了一下,问题在于文件名传递不成功(可能是最后的换行符的关系)。如果真是这样,可能最方便的办法是去改源代码了。
不但是文件名传递的问题,实际上mocp --next会反复播放你mocp -l的那首歌,而不是到播放列表中的下一首歌 :em20
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 终于实现了 mocp 的随机播放

#23

帖子 潇洒走一回 » 2009-10-31 18:53

lilydjwg 写了:
潇洒走一回 写了:我通过自己写的叫作Mocp的脚本调用moc,感觉更方便了...
贴来瞧瞧
现在用的很简单,Mocp,它只是一个智能开关,第一次执行它会打开播放器,再次执行时它成了关闭播放器,我把它绑定在了一个键盘组合键上:

代码: 全选

#!/bin/bash
#scriptname: Mocp
#该脚本用来调用mocp播放我的音乐
#为mocp做的一个开关,方便绑定在面板上的一个图标上
##########################################################
#下面非日常操作, 当用户音乐文件下面添加新的文件了,并执行 Mocp -u时,下面的命令将被执行...
if [ -n "$1" ]; then
	case "$1" in
	-u)
		echo "正在更新播放列表... ..."
		mocp -c; mocp -a $HOME/music/; echo "Done"; exit 0 ;;
	esac	
	
fi

#脚本通过/tmp/下的StateFile来判断打开还是关闭mocp
[ ! -f /tmp/StateFile ] && { echo "to-open" > /tmp/StateFile; echo "yes" >> /tmp/StateFile; }
#######################################################
read state < /tmp/StateFile
if [ "$state" = "to-open" ]; then
	mocp -p #打开mocp,同时自动播放列表中的音乐,
	sleep 0.3; lrcdis&
	echo "to-close" > /tmp/StateFile
	exit 0

elif [ "$state" = "to-close" ]; then
	echo "to-open" > /tmp/StateFile
	mocp -x
	exit 0
else
	echo "to-open" > /tmp/StateFile
	Mocp #调用自身.

fi
上次由 潇洒走一回 在 2009-11-01 0:01,总共编辑 3 次。
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 终于实现了 mocp 的随机播放

#24

帖子 潇洒走一回 » 2009-10-31 19:11

行不通,一旦你用mocp -p的话,就是从播放列表的第一首歌开始播放了
这个本来确实是播放列表中的第一首歌,但是一旦你开启了shuffle,mocp -p变成了在你的列表中随便挑一首开始播放,你每一次执行mocp -p开始播放的那首歌都是不一样的,不信你试试...
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 终于实现了 mocp 的随机播放

#25

帖子 lilydjwg » 2009-10-31 19:12

把 rmocp 改了一下,成 rmocp2 了, r 的意思由 random 改为了 remembering。
只是这样的话再直接用 mocp 会有问题。
附件
rmocp2.zip
(3.19 KiB) 已下载 57 次
上次由 lilydjwg 在 2009-11-01 1:46,总共编辑 3 次。
头像
photor
论坛版主
帖子: 11004
注册时间: 2008-04-26 12:41

Re: 终于实现了 mocp 的随机播放

#26

帖子 photor » 2009-10-31 19:26

潇洒走一回 写了:
行不通,一旦你用mocp -p的话,就是从播放列表的第一首歌开始播放了
这个本来确实是播放列表中的第一首歌,但是一旦你开启了shuffle,mocp -p变成了在你的列表中随便挑一首开始播放,你每一次执行mocp -p开始播放的那首歌都是不一样的,不信你试试...
不喜欢随机怎么办? :em20
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 终于实现了 mocp 的随机播放

#27

帖子 潇洒走一回 » 2009-10-31 20:02

photor 写了:
潇洒走一回 写了:
行不通,一旦你用mocp -p的话,就是从播放列表的第一首歌开始播放了
这个本来确实是播放列表中的第一首歌,但是一旦你开启了shuffle,mocp -p变成了在你的列表中随便挑一首开始播放,你每一次执行mocp -p开始播放的那首歌都是不一样的,不信你试试...
不喜欢随机怎么办? :em20
不喜欢就是个人风格问题了...
随机让我永远都不知道下一首是什么歌...每次顺序都不同...何尝不是一种美妙的体验呢
头像
潇洒走一回
帖子: 735
注册时间: 2009-05-20 21:43

Re: 终于实现了 mocp 的随机播放

#28

帖子 潇洒走一回 » 2009-10-31 20:32

我刚把我的Mocp脚本加入了每次打开时首先播放上次退出时播放的歌曲功能,实际上为了减少麻烦,lastsong是用mplayer播放的,但一般情况下在体验上是感觉不同区别的,根据photor所说,如果mocp没有开启随机功能,这个方案是不适合你的,因为它又会从你的列表中从头播放,而开启了shuffle后每次执行mocp -p播放的永远都是你预料不到的歌曲...

内容如下:

代码: 全选

#!/bin/bash
#scriptname: Mocp
#这是一个mocp的智能开关脚本,打开时可以首先播放上次退出时播放的歌曲
if [ -n "$1" ]; then
	case "$1" in
	-u)
		echo "正在更新播放列表... ..."
		mocp -c; mocp -a $HOME/music/; echo "Done"; exit 0 ;;
	esac	
	
fi
#通过/tmp/StateFile的内容来判断打开还是关闭mocp
[ ! -f /tmp/StateFile ] && echo "to-open" > /tmp/StateFile
#######################################################
read state < /tmp/StateFile
[ -f ~/.moc/lastsong ] && read lastsong < ~/.moc/lastsong
if [ "$state" = "to-open" ]; then
	echo "to-close" > /tmp/StateFile
	[ -n $lastsong ] && mplayer "$lastsong"
	mocp -p #打开mocp,同时自动播放列表中的音乐
	exit 0

elif [ "$state" = "to-close" ]; then
	echo "to-open" > /tmp/StateFile
	mocp -i|grep File |sed 's/File: //' > ~/.moc/lastsong #退出mocp时记住最后播放的歌曲
	mocp -x #退出mocp
	exit 0
else
	echo "to-open" > /tmp/StateFile
	Mocp #调用自身.

fi
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 终于实现了 mocp 的随机播放

#29

帖子 lilydjwg » 2009-10-31 21:07

潇洒走一回 写了:
photor 写了:
潇洒走一回 写了: 不喜欢随机怎么办? :em20
不喜欢就是个人风格问题了...
随机让我永远都不知道下一首是什么歌...每次顺序都不同...何尝不是一种美妙的体验呢
我也喜欢随机。不过现在我在想,给每首歌一个权值,按此权值来随机播放。而权值是听歌时通知程序喜欢或者不太喜欢实现的。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 终于实现了 mocp 的随机播放

#30

帖子 lilydjwg » 2009-10-31 21:12

潇洒走一回 写了:我刚把我的Mocp脚本加入了每次打开时首先播放上次退出时播放的歌曲功能,实际上为了减少麻烦,lastsong是用mplayer播放的,但一般情况下在体验上是感觉不同区别的,根据photor所说,如果mocp没有开启随机功能,这个方案是不适合你的,因为它又会从你的列表中从头播放,而开启了shuffle后每次执行mocp -p播放的永远都是你预料不到的歌曲...
试一下我这个吧(viewtopic.php?f=74&t=236602&p=1542594#p1542115),用 rmocp2 代替 mocp 来读取播放列表并通知 mocp 播放,同时记录播放的歌曲名到 ~/.moc/lastsong。放下一首时就可以从播放列表中找到它的下一首播放了。因为我不喜欢这种播放模式,所以还请大家为我测试了。 :em03
回复