社区QQ群-请进入.附:行为准则 版本更新记录与翻译 Foobar2000 0.9.5.6 Final 标准汉化版发布 FOOBAR2000中文社区诚邀各版版主--长期
Foobar2000基础帮助中心
新手必看 FB2K小常识
百辩堂·网络辩论赛
无损音乐资源共享
插件集合帖
汉化团队插件发布帖
foobar2000全球资源搜索引擎
foobar2000扩展与主题支持beta
1/2页12 跳转到查看:12620
发新话题 回复该主题

[制作调试] fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

这是一篇老文了,不过仍有学习的价值,适合做版本修改的朋友参考,我们可以对FOOBAR2000中各种标题格式的显示与控制能更深入的理解。原作:backspace(美丽元素)。

首先我们来讲讲播放列表中的主要的几种数字:

(播放列表序号%_playlist_number%、音轨序号%tracknumber%、音轨时长%_length%、文件大小%_filesize%)显示的设置
针对默认用户界面,columns UI 类似。
涉及到的语句: $if、$puts、$get、$repeat、$len、$sub、$ifgreater、$num、$cut、$div、$mod、$mul

如果我们想要得到的显示效果是:

0001 …… 01 …… 03:52 …… 003.55 M
0002 …… 02 …… 12:29 …… 017.93 M


0127 …… 14 …… 04:13 …… 004.31 M


//首先定义颜色dark_number、light_number
//各个语句的开始和结束由 ( ) 括起来
//下面相同颜色的括号表示一个语句的开始和结束,相同颜色的逗号为该语句中间的分割字符

//判断歌曲是否正在播放
//$if 语句的一般形式为 $if(a,b,c),如果 a 成立,则 b,否则 c,有时 c 可以省略
//同 $if 语句相近的语句有 $if2、$if3
//$if2 的一般形式为 $if2(a,b),他和 $if(a,a,b) 效果一样
//$if3 的一般形式为 $if3(a,b,c,d,e,……),a b c d e 中谁先出现运行谁

$if(%_isplaying%,

//正在播放时
//颜色代码的显示方式是 平时显示的颜色选中时显示的颜色
//有一个和 $puts 语句先进的语句 $put,两者的区别是 $put 在定义的同时会在列表中显示,而 $puts 不显示,通常我们用$puts

$puts(dark_number,01385C01385C)
$puts(light_number,0099FF0099FF)

,

//没有播放时

$puts(dark_number,01385C01385C)
$puts(light_number,0169AF0169AF)

)



//开始定义播放列表序号playlistnumber

$puts(playlistnumber,

//调用颜色dark_number
//$get 语句的作用就是调用前面定义的函数,比如前面的playlistnumber

$get(dark_number)

//用 $len 语句得到歌曲在列表中的播放列表序号 %_playlist_number% 的长度(字符位数)
//再用 $sub 语句来取得 播放列表序号长度 和 4 的差,用来 判断播放列表序号长度是否达到 4 位
//如果没有达到 4 位用 $repeat 语句在播放列表序号前插入字符 0 来补足 4 位
//这里的 4 也可以用 $len(%_playlist_total%) 来代替,得到是当前播放列表歌曲总数的长度

$repeat('0',$sub(4,$len(%_playlist_number%)))

//调用颜色light_number 和 播放列表序号 %_playlist_number%

$get(light_number)%_playlist_number%

)



//开始定义音轨序号tracknumber
//$ifgreater 语句一般形式为 $ifgreater(a,b,c,d),当 a>b 时 c,当 a<b 时 d。

$puts(tracknumber,
$ifgreater(%tracknumber%,9,

//当音轨序号大于 9 时
//$num 语句一般形式为 $num(a,b),其中 a b 均为数字
//作用判断 a (去掉 a 前面的 0 后的) 位数 是否> b,> 直接显示 a,< 则在 a 前面补 0 到 b 位

$get(light_number)$num(%tracknumber%,2)

,

//当音轨序号小于 9 时
// ' (单引号) 的作用是不处理显示字符、字符串

$get(dark_number)'0'$get(light_number)$num(%tracknumber%,1)
)
)



//开始定义音轨时长length
//判断音轨时长位数是否大于 5,不足补 0,大于时不显示

$puts(length,
$get(dark_number)
$repeat(0,$sub(5,$len(%_length%)))

//判断音轨时长位数是否大于 5,大于时显示 >1 HH (大于一小时),小于时显示音轨时长

$get(light_number)
$ifgreater($len2(%_length%),5,'>'$cut(%_length%,1)' HH',%_length%)

)

//这里我们也可以设置成
//$cut 语句一般形式位 $cut(a,b),a 可以是任何字符串,b 为数字(也可以是结果为数字的语句,如下面的 $sub(8,$len(%_length%)) )
//作用判断 a 的位数 是否> b,< 直接显示 a,> 则显示 a 前面 b 个字符

$puts(length_2,
$get(dark_number)$cut(00:00:00,$sub(8,$len(%_length%)))
$get(light_number)%_length%
)



//开始定义文件大小filesize
//这里算法很多,可以参考 PHP?showtopic=32569" target=_blank>http://www.sbtop.com/bbs/index.php?showtopic=32569
//我的算法是,先求出整数位,1048576=1024*1024,$div 语句为除法语句

$puts(real_number,$div(%_filesize%,1048576))

//求出小数位 $mod 为求余语句,$mul 为乘法语句

$puts(decimal_fraction,$div($mul($mod(%_filesize%,1048576),100),1048576))

//设置文件大小filesize

$puts(filesize,
$get(real_number)'.'$num($get(decimal_fraction),2)
)
$puts(filesize,
$get(dark_number)
$cut(000.00,$sub(6,$len($get(filesize))))
$get(light_number)
$get(filesize) M)


//开始显示
$get(playlistnumber) ……
$get(tracknumber) ……
$get(length) ……
$get(length_2) ……
$get(filesize)


大家可以把上面的代码复制到 title formatting,playlist 栏 看看效果
$blend 语句

一般形式为 $blend(a,b,c,d) 其中 a b 为两种颜色或者结果为颜色的语句,c d 为两个数字或者结果为数字的语句
作用是在 a b 两种颜色之间按 c 除以 d 产生一种颜色

举例:

//%title% 为歌曲名

$blend(000000000000,FFFFFFFFFFFF,%_playlist_number%,20)%title%

//如果想在播放列表中不同歌手名用不同的颜色显示,比较简单的方法如下
//%artist% 为歌手名,5 可以改成其他数字,他的意思是会出现有 5 种颜色
//$len2 语句和 $len 语句同样是取字符长度的语句,不同的是 $len2 会把双宽字符看作两个字符
//如 $len2(歌手) 结果为 4, $len(歌手) 结果为 2
//如果想让同一个歌手在不同专辑时也以不同的颜色显示,可以把 $len2(%artist%) 改成 $add($len2(%artist%),$len2(%album%))

$blend(000000000000,FFFFFFFFFFFF,$len2(%artist%),5)%artist%


$transition 语句

一般形式为 $transition(a,b,c) 其中 a 为字符串,b c 为颜色
作用是使 a 以从 b 到 c 的不断变化的颜色显示出来

举例:
$transition(%title%,000000000000,FFFFFFFFFFFF)

//下面我们把 $blend 和 $ transition 语句结合起来使用看看
// 20 的作用和前面的 5 一样表示没 20 行颜色循环一次,可以根据自己的喜好调整,颜色也是

$puts(colour,
$blend(000000000000,FFFFFFFFFFFF,%_playlist_number%,20))

$puts(colour_2,
$blend(FFFFFFFFFFFF,000000000000,%_playlist_number%,20))

$transition(%title%,$get(colour),$get(colour_2))
现在说说上面这副图中左边的专辑信息的做法,主要针对下面第二种,其他类似可能会有不完善的地方

//在默认用户界面下首先应该考虑字体对显示效果的影响
//我们先来看看选择等宽字体(如宋体、LUCida Console)时的情况,宋体下一些边框字符(┴ ┬ ─ ├等),会占用两个字符位,为双宽字符
//而在 Lucida Console 字体下他们只占用一个字符位

//我们先来看看一些专辑基本信息(歌手、专辑、音乐类型、文件类型等)的设置

//歌手
// %various% %album artist% 都是在一些合辑中可能出现的标签
// %performer% 为表演者标签
$puts(artist,
$if3(%various%,%album artist%,%performer%,%artist%))

//修改如下
$puts(artist,
$if($or(%various%,%album artist%),
$if2(%album artist%,Various Artist),
$if3(%artist%,%performer%)))

//专辑
$puts(album,%album%)

//发行年份
$puts(date,$if($or(%date%,%yeat%,%albumdate%),'['$if3(%date%,%yeat%,%albumdate%)']'))

//流派
$puts(genre,$if2(%genre%,other))


//文件类型
//从 %__codec% 标签可获得文件类型信息
// PCM->WAV
// Vorbis->OGG
// Windows Media Audio V7/V8->WMA
// Musepack->MPC
// FLAC->FLA
// Next/Sun Audio->SND
// Audio Interchange File Format->AIF
// Amiga 8SVX Sound->SVX
// Creatice Voice Format->VOC
// Dolby Digital Audio->AC3
// Audio CD->CD
// MPEG Layer 2->MP2
// MPEG Layer 3->MP3
// MPEG Layer-3->MP3
// AAC Audiostream->AAC
// OptimFROG->OFR
// OptimFROG DualStream->OFS
// WavePack->WV
// Shorten->SHN
// LPAC->PAC
// Speex->SPX
// C64 SID-Song->SID
// Compressed Soundtracker Module->MDZ
// Compressed Screamtracker Module->S3Z
// Compressed Impulsetracker Module->ITZ
// Compressed Fasttracker II Module->XMZ
// Compressed Module->MO3
// Soundtracker Module->MOD
// Screamtracker Module->S3M
// Fasttracker II Module->XM
// Impulsetracker Module->IT
// Unreal Music File->UMX
// Multitracker Module MTM
// Final MusiCSystem eXtended->TFM
// Monkey''s Audio->APE

//这里我只设置一些常用的
//$stricmp 语句的作用是判断两个字符串是否相同,不区别大小写,数字时判断大小
//$ext 语句可获得扩展名,$upper 语句可将字符串中小写字母转换为大写
//注意这里 Monkey's Audio 的写法 Monkey''s Audio
$puts(codec,
$if($stricmp(%__codec%,MP3),'MP3',
$if($stricmp(%__codec%,MP2),'MP2',
$if($stricmp(%__codec%,Windows Media Audio V7/V8),'WMA',
$if($stricmp(%__codec%,musepack),'MPC',
$if($stricmp(%__codec%,vorbis),'Ogg',
$if($stricmp(%__codec%,Monkey''s Audio),'APE',
$if($stricmp(%__codec%,FLAC),'FLA',
$upper($ext(%_path%))))))))))

//声道
$puts(channel,
$ifgreater(%__channels%,1,Stereo,Mono))

//采样率
$puts(samplerate,
$cut(%__samplerate%,2)Khz)


//比特率
//我这样作的目的是控制比特率位数为 3 位,方便对齐
$puts(bitrate,
$if($stricmp($len2(%__bitrate%),4),'>1Kkbps',$repeat('0',$sub(3,$len(%__bitrate%)))%__bitrate%'kbps'))


//为了方便下面的操作我们把他们组合以下
$puts(track_info,$get(codec) $get(channel) $get(bitrate) $get(samplerate))

$puts(album_info,$get(date) $get(genre))



//下面我们开始设置这部分的显示方式
//先考虑在 Lucida Console 字体下的情况
//我们确定这一部分的显示宽度为 40 个字符位
//考虑到┴ ┬ ─ ├等边框字符只占一个字符位,要让各信息居中显示只需要 ($get(info_width)-信息宽度)÷2
//又考虑到在foobar中 奇数÷2=(奇数-1)÷2,这样当信息宽度为奇数时该行的实际显示宽度只有 39
//所以这个时候我们只需要在最后加入一个边框字符来填补这个空缺

//有时会出现某一行的信息宽度超过了 40
//这时我们可以把该专辑的各行显示信息作比较,取出最长的
//而有时这最长的可能为奇数,我们就给他加上 1,把他变成偶数
//$max 语句可选出最大值,$min 语句可选出最小值
$puts(widest,
$max($len2($get(artist)),$len2($get(album)),$len2($get(album_info)),$len2($get(track_info))))

$if($stricmp($mod($get(widest),2),1),
$puts(widest_2,$add($get(widest),1)),
$puts(
widest_2,$get(widest)))

$puts(info_width,$max(40,$get(widest_2)))

//$select 一般形式为 $select(n,a,b,c,……) n 为数字,n=1 时返回 a,n=2 时返回 b,n=3 时返回 c
$puts(info,
$ifgreater(5,%tracknumber%,
$select(%tracknumber%,
// 1: 歌手
$repeat(,$div($sub($get(info_width),$len2($get(artist))),2))
$get(artist)
$repeat(,$div($sub($get(info_width),$len2($get(artist))),2))
$if($stricmp($mod($len2($get(artist)),2),1),,)
,
// 2: 专辑
$repeat( ,$div($sub($get(info_width),$len2($get(album))),2))
$get(album)
$repeat( ,$div($sub($get(info_width),$len2($get(album))),2))
$if($stricmp($mod($len2($get(album)),2),1), ,)
,
// 3: 歌曲信息
$repeat( ,$div($sub($get(info_width),$len2($get(track_info))),2))
$get(track_info)
$repeat( ,$div($sub($get(info_width),$len2($get(track_info))),2))
$if($stricmp($mod($len2($get(track_info)),2),1), ,)

// 4: 专辑信息
$repeat( ,$div($sub($get(info_width),$len2($get(album_info))),2))
$get(album_info)
$repeat( ,$div($sub($get(info_width),$len2($get(album_info))),2))
$if($stricmp($mod($len2($get(album_info)),2),1), ,)
,
)
// >4 ∷
,$repeat( ,$get(info_width))))


0000FF
│$get(info)│
//在 宋体
//因为┴ ┬ ─ ├等边框字符为双宽字符,这就意味着歌手两边的的边框字符个数是除以 4 后得到的
//那么这一部分的总宽度必须是 4 的倍数,歌手名宽度也必须为 2 的倍数才可能对的齐,那么

$if($stricmp($mod($len2($get(artist)),2),1),
$puts(artist,$get(artist)^),
$puts(artist,$get(artist)))

$puts(widest,
$max($len2($get(artist)),$len2($get(album)),$len2($get(album_info)),$len2($get(track_info))))
$puts(info_width,$max(40,$get(widest)))

//这里我们把这一部分的宽度调整为 4 的倍数
$if($not($stricmp($mod($get(info_width),4),0)),
$puts(info_width,$add($get(info_width),$mod($get(info_width),4))),
$puts(info_width,$get(info_width)))

//我们考虑以下在歌手名宽度不是 4 的倍数时,在 foobar 中
// (info_width - $len2($get(artist)))÷4 ×4+ $len2($get(artist)) 的结果为 info_width -2
//这样我们就需要在最后补上一个边框字符 ─
//同样在这种情况下我为了美观,使音轨序号 为 2 3 4 时的字符串向前移动一格,定义了 info_width_2

$if($not($stricmp($mod($len2($get(artist)),4),0)),
$puts(info_width_2,$sub($get(info_width),2)),
$puts(info_width_2,$get(info_width)))

//下面开设置这部分显示方式

$puts(info,
$ifgreater(5,%tracknumber%,
$select(%tracknumber%,
// 1: 歌手
//这儿和 Lucida Console 字体时有所不同,是除以 4 不是 2 了
$repeat(─,$div($sub($get(info_width),$len2($get(artist))),4))
$get(artist)
$repeat(─,$div($sub($get(info_width),$len2($get(artist))),4))
//这里也有了变化,当歌手名宽度不是 4 的倍数时后面加─
$if($not($stricmp($mod($len2($get(artist)),4),0)),─,)
,
// 2: 专辑
//这里 info_width_2
$repeat( ,$div($sub($get(info_width_2),$len2($get(album))),2))
$get(album)
$repeat( ,$div($sub($get(info_width),$len2($get(album))),2))
//因为字符串向前移动了一格,这里在后面补上
$if($not($stricmp($mod($len2($get(artist)),4),0)), ,)
$if($stricmp($mod($len2($get(album)),2),1), ,)
,
// 3: 歌曲信息
//这里 info_width_2
$repeat( ,$div($sub($get(info_width_2),$len2($get(track_info))),2))
$get(track_info)
$repeat( ,$div($sub($get(info_width),$len2($get(track_info))),2))
//因为字符串向前移动了一格,这里在后面补上
$if($not($stricmp($mod($len2($get(artist)),4),0)), ,)
$if($stricmp($mod($len2($get(track_info)),2),1), ,)
,
// 4: 专辑信息
//这里 info_width_2
$repeat( ,$div($sub($get(info_width_2),$len2($get(album_info))),2))
$get(album_info)
$repeat( ,$div($sub($get(info_width),$len2($get(album_info))),2))
//因为字符串向前移动了一格,这里在后面补上
$if($not($stricmp($mod($len2($get(artist)),4),0)), ,)
$if($stricmp($mod($len2($get(album_info)),2),1), ,)
,
)
// >4 ∷,$repeat( ,$get(info_width))))


0000FF
│$get(info)│
下面几个为特殊的语句 $tab()、$crlf()、$char

$crlf() 语句

一般形式即为 $crlf()
作用换行,这就决定了他不可能用在播放列表的设置中,而通常被运用在系统托盘 system tray) 的显示设置中

举例:

歌手:$if3(%artist%,%performer%,%various%,%album artist%,Unknow Artist)
$crlf()
专辑:$if2(%album%,Unknow Album)$if(%date%,'('%date%')',)
$crlf()
歌曲:'[#'$num(%tracknumber%,2)']'$if2(%title%,%_filename%)
$crlf()
%__codec% '/' %__bitrate%'kbps' '/' $cut(%__samplerate%,2)'kHz'

和$crlf() 语句有相同功能的是 $char(10) 语句


$tab() 语句

一般形式 $tab()
作用是产生一个制表符,也就是右对齐
相同功能的语句为 $char(9)

举例:

//通常在播放列表中歌曲时长的显示会用到他
//这里 $tracknumber(2) 的作用和 $num(%tracknumber%,2) 的作用一样
0000FF
%_playlist_number% %artist%-'['$tracknumber(2)']'%album%-%title%
$tab()
0000FF
%_length%
//$tab() 语句还有一个经常用到的地方,这里用具有相同功能的 $char(9) 代替
//这里的数字表示显示宽度占窗口宽度的百分比
$puts(size_artist,30)
$puts(size_album,30)
$puts(size_title,40)

0000FF%artist%
$repeat($char(9),$get(size_artist))

0000FF%album%
$repeat($char(9),$get(size_album))

0000FF%title%
$repeat($char(9),$get(size_title))

这样是不是很方便对齐啊
其实要对齐还可以运用 $padcut、$padcut_right 这样的语句,或者是用 $repeat 语句

$padcut 语句

一般形式 $padcut(a,b,c),a 为字符串,b 为数字,c一个字符
作用是当字符串 a 宽度 > b 时,将 a 截断到 b 个字符宽度,当 < b 时,将 a 用字符 c 补齐到 b 个字符宽度, c 可以没有,用 空格 代替。

举例:

0000FF
$padcut(%artist%,30,'.')

$padcut(%album%,40)

$padcut(%title%,50)


$padcut_right 语句

他和 $padcut 语句相似,只是所有操作都从右边开始进行

举例:

0000FF
$padcut(%artist%,30,'.')

$padcut_right(%album%,40,'.')

$padcut(%title%,50)

$padcut 也可以用 $repeat+$cut 代替,只不过复杂了一些

举例:
0000FF
// = $padcut(%artist%,30,'.')
//这里 $greater 语句 的作用类似与 $ifgreater 语句
%artist%
$if($greater($len2(%artist%),30),
$cut(%artist%,30),
$repeat('.',$sub(30,$len2(%artist%)))
)

$padcut(%album%,40,'.')

$padcut(%title%,50)


另外还有
$pad$pad_right 语句

一般形式 $pad(a,b,c) 或者 $pad_right(a,b,c),a 为字符串,b 为数字,c一个字符
作用是当字符串 a 宽度 > b 时,a (不截断),当 < b 时,将 a 用字符 c 补齐到 b 个字符宽度, c 可以没有,用 空格 代替。

下面我们把 $tab、$padcut、$select 语句结合起来

$puts(info_size,40)
$puts(title_size,60)

0000FF
$num(%_playlist_number,4)



$ifgreater(4,%tracknumber%,
$select(%tracknumber%,
// 1 歌手

$padcut(%artist%,100,─)
,
// 2 专辑

$padcut(%album%,100,─)
,
// 3 发行时间 流派
// 这里 [ 和 ] 之间的为可选项,如果存在则显示,不存在则不显示

['['%date%']' ]$if2(%genre%,other)
,)
// > 3
,
$repeat( ,100)
)
$repeat($tab(),$get(info_size))


0000FF
$ifgreater(3,%tracknumber%,
$select(%tracknumber%,
// 1
┤,
// 2 专辑
┤,)
// > 2
,│)
$tracknumber(2)

%title%
$repeat($tab(),$get(title_size))


$tab()
0000FF
%_length%

我们继续对上面的设置进行修改,不规定各部分显示占用的百分比字体为 Lucida Console

0000FF
$num(%_playlist_number,4)

┤' '

$ifgreater(4,%tracknumber%,
$select(%tracknumber%,
// 1 歌手

$padcut(%artist%,40,─)
,
// 2 专辑

$padcut(%album%,40,─)
,
// 3 发行时间 流派

['['%date%']' ]$if2(%genre%,other)
$repeat( ,$sub(40,$len2(['['%date%']' ]$if2(%genre%,other))))
,)
// > 3
,
' '$repeat( ,40)
)


0000FF
$ifgreater(3,%tracknumber%,
$select(%tracknumber%,
// 1
┤,
// 2 专辑
┤,)
// > 2
,│)
$tracknumber(2)

%title%


$tab()
0000FF
%_length%



我们看到在有的 title formatting 中歌曲名的括号的颜色和其他部分不同,这是怎么设置的呢?

下面我就说说这个问题

一般情况下歌曲名中括号的位置都是在最后,我就说说这种情况

这里用到的语句主要是: $strchr 和 $substr

//首先我们要确定 歌曲 中括号的位置
//括号主要包括 () 【】 [] ()
// $strchr 语句一般形式为 $strchr(x,y),x 为字符串,y 为字符
//他的作用是找出字符 y 在 x 中的位置,返回 数字
$puts(position,
$max($strchr(%title%,'('),$strchr(%title%,'['),$strchr(%title%,'('),$strchr(%title%,'【'))
)

//接下来就是要把前后两部分分开
// $substr 语句一般形式为 $substr(a,b,c),a 为字符串,b c 为数字
//作用是在字串 a 截取子串,从第b个字符开始到第c个字符
$puts(title_left,$substr(%title%,1,$sub($get(position),1)))
$puts(title_right,$substr(%title%,$get(position),$len2(%title%)))

//此时有一个问题如果歌曲名中没有括号那么 title_right 就是 歌曲名
$if($strcmp(0,$get(position)),
0000FF
%title%,
0000FF
$get(title_left)
00FF80
$get(title_right))


//当然我们还有更简单也更好的方法
//使用 $replace 语句
//一般形式: $replace(a,b1,c1,b2,c2,b3,c3....)
//功能: 逐一把 字符串 a 中的 bn 替换为 cn.
$replace(%_title%,
'(',41A5BE'(',
')',')',
'[',41A5BE'[',
']',']',
'【',41A5BE'【','】','】',
'('41A5BE'(',
')',')',
)
和 $strchr 语句类似的 语句有 $strrchr 和 $strstr

$strrchr

一般形式 $strrchr(a,b),a 为字符串,b 为字符
作用在字串 a 里找到最后一个 b 字符的位置

$strstr

一般形式 $strrchr(a,b),a 为字符串,b 为字符串
作用在字串 a 里找到第一个 b 字串的位置

//我们也可以把他把 $substr 换成 $left 和 $right
//$left 语句 一般形式为 $left(a,b),a 为字符串,b为数字
//作用是将 a 的左边 b 个字符截取出来
//$right 语句 一般形式为 $right(a,b) 作用和 $left 相反,是截取 a 右边 b 个字符
$puts(position,
$max($strchr(%title%,'('),$strchr(%title%,'['),$strchr(%title%,'('),$strchr(%title%,'【')))

//这里是修改后的
$puts(title_left,$left(%title%,$sub($get(position),1)))
$puts(title_right,$right(%title%,$sub($len2(%title%' '),$get(position))))

$if($strcmp(0,$get(position)),
0000FF
%title%,
0000FF
$get(title_left)
00FF80
$get(title_right))

进度条在状态栏里很常见的,下面我就来说说他

有两个语句是关于进度条的 $progress 和 $progress2

举例:
// 数字 20 表示,进度条的总宽度
// 在前者中字符 # 表示已播放的百分比位置
// 后这中已播放的用 # 显示出来,未播放的用 = 显示
// 我们也可以给 # = 加上颜色
$progress(%_time_elapsed_seconds%,%_time_total_seconds%,20,'#','=')

$progress2(%_time_elapsed_seconds%,%_time_total_seconds%,20,'#','=')


有时我们会看到颜色渐变的进度条,他没有用到上面的两个语句

举例:
// 推荐字体为 @BatangChe、@DotumChe、@GulimChe、@GungsuhChe
// 确定出进度条的宽度
$puts(width,50)

// 确定组成进度条的字符
$puts(item,█)

// 确定渐变条的颜色
$puts(c_1,CC9A66)
$puts(c_2,005FFB)

// 求出已播放的百分比
$puts(played,
$div($mul(%_time_elapsed_seconds%,100),%_time_total_seconds%))

// 计算出已播放的部分显示的宽度
$puts(played_width,
$div($mul($get(width),$get(played)),100))

// 计算出未播放的部分显示宽度
$puts(not_played_width,
$sub($get(width),$get(played_width)))

// 开始显示已播放的部分
$transition($repeat($get(item),$get(played_width)),$get(c_1),$get(c_2))

// 开始显示未播放的部分
$transition($repeat($get(item),$get(not_played_width)),$get(c_2),$get(c_1))

在有的 title formatting 中专辑最后一首歌在显示时会和其他歌曲显示有所不同,这里就涉及到如何判断那首歌是专辑最后一首的问题。
又因为 title formattomg 的所有操作都是从当前行的歌曲标签得到的信息来进行的
这就意味着要找最后一首歌就必须从他自己入手

//现在一般采用的方法是给这首歌加入 lasttrack 的标签,值 随意
//还有一种方法是把 tracknumber 标签设置成 tracknumber/专辑总歌曲数 的形式,这里用批量标签很方便完成设置
//开始判断是否为专辑最后一首
$puts(tracknumber_left,
$left(%tracknumber%,$sub($strchr(%tracknumber%,'/'),1)))
$puts(tracknumber_right,
$right(%tracknumber%,
$sub($len2(%tracknumber%),$strchr(%tracknumber%,'/'))))

// 以后可以根据是否 $stricmp($get(is_last),1) 来判断是否为专辑作后一首
$if($or($stricmp($num($get(tracknumber_left),2),
$num($get(tracknumber_right),2)),%lasttrack%),
$puts(is_last,1))

$puts(artist,
$if($or(%various%,%album artist%),
$if2(%album artist%,Various Artist),
$if3(%artist%,%performer%)
)
)


如果歌曲时长大于一小时,比如 1:13:33 想把他显示成 73:33 可以

方法一、
//先求出分
// %_length_seconds% 是按秒显示的时长
$div(%_length_seconds%,60):
//再求出秒
$mod(%_length_seconds%,60)

方法二、
//先判断歌曲时长是否大于 1 小时
$ifgreater($len2(%_length%),6,
//是的话取出右起第 5 个字符(即分十位上的数值),再取出小时位的数×6,加在第 5 个字符上,再接上右边的 4 个字符
$add($left($right(%_length%,5),1),$mul($num(%_length%,2),6))$right(%_length%,4),
//否直接显示时长
%_length%)

主窗口标题
[%artist% - ]$if(%title%,['['%album%[ #[%disc%/]$num(%tracknumber%,2)]'] ']%title%,%_filename_ext%)

状态栏
$codec()' '
[%__bitrate%kbps ]['('%__bitrate_dynamic%kbps')' ][%__samplerate%Hz]' '

$channels()
[ %__extrainfo%]'
' $if(%_time_total%,[%_time_elapsed%]' / '[%_time_total%],[%_time_elapsed%])

托盘
$if2(%title%,%_filename_ext%)

播放列表
$num(%_playlist_number%,$len(%_playlist_total%)).' '
[$get(artist) - ]
[$get(album) - ]
[$get(title)]
[$char(9)$if(%_isplaying%)歌曲时长:%_length%]





最后编辑foobar2000 最后编辑于 2007-09-19 20:16:04

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

很不错,语句翻译的非常好,比友坛的版主要重点很多。
重点,^_^,当然就是我喜欢的,想要了解的。
这帖保持整洁!
哈哈,还有重点是我学会了一个新语句,明天可能会贴出来~~

加一些语句


引用:
panel ui中的语句

$glass(left,right,top,bottom)

例如→$glass(%_width%,0,%_height%,0)  这句即为全局透明,可使整个界面透明(小心用,非vista的系统会死软)

$panel(ID,Name,x,y,width,height,options)  这句应该很熟悉的,调出插件的面板就需要这语句

例如→$panel(PlaylistMinimal,Single Column Playlist,0,0,%_width%,$eval(%_height%-54),)


最后编辑aling 最后编辑于 2007-09-02 11:32:49

TOP

 

回复: fb2k自定义入门与提高---Title Formatting[标题格式使用详解]



引用:
原帖由 aling 于 2007-8-28 21:31:09 发表
很不错,语句翻译的非常好,比友坛的版主要重点很多。
重点,^_^,当然就是我喜欢的,想要了解的。
这帖保持整洁!
哈哈,还有重点是我学会了一个新语句,明天可能会贴出来~~


同意重点这么个说法,不过我很多地方还不理解,头看大了,希望我们的ALING斑竹什么时候弄个入门教程给大家学习下:) :) :)

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

好长的文章,楼主辛苦,看也辛苦。;P
作为版主,楼主还是再辛苦整理一下这个帖子,图文并茂才有人看,看了才有人回复,那样我是看不懂了。
顺便请教我的Playlist如何修改可以让%artist%和%alumb%左对齐?


//*****************配置项****************
//颜色,正在播放时
$puts(c_playing,00FFFF|FFFFFF)
//颜色,歌曲标题
$puts(c_title,FF8000|FFFFFF)
//颜色,艺术家
$puts(c_artist,84FF84|FFFFFF)
//颜色,专辑
$puts(c_album,00BD00|FFFFFF)
//颜色,文件编码信息
$puts(c_codec,0080FF|FFFFFF)
//颜色,文件编码信息(扩展信息)
$puts(c_codec_ex,FF00FF|FFFFFF)
//颜色,歌曲长度
$puts(c_len,2299CC|FFFFFF)
//颜色,比特率显示
$puts(c_bitrate,8000FF|FFFFFF)
//颜色,比特率字符显示(kbps)
$puts(c_bitrate_str,AE00AE|FFFFFF)
//标题最大长度
$puts(len_title,40)
//艺术家最大长度
$puts(len_artist,30)
//******************结束配置***************
//?(音乐音符,Win9x 不显示这一项)
$puts(music_note,
$if(%_isplaying%,00FF00|FFFFFF,008000|FFFFFF)
$if($strcmp(?,?),,?)
)
//曲目序号
$puts(track_num,
$num(%_playlist_number%,$len(%_playlist_total%)).
)
//歌曲标题
$puts(title,
$if(%_isplaying%,$get(c_playing),$get(c_title))
//如果标题存在
$if(%title%,
$if($stricmp($left(%_path_raw%,7),'cdda://'),
CD 音轨 %tracknumber%,
%title%),
//如果标题不存在
$if($stricmp($left(%_path_raw%,7),'http://'),%_path_raw%,
%_filename_ext%))
)
$puts(title,$padcut($get(title),$get(len_title)))
//艺术家
$puts(artist,
$if(%artist%,
$if(%_isplaying%,$get(c_playing),$get(c_artist))%artist%,
$if(%_isplaying%,$get(c_playing),C0C0C0|FFFFFF)未知艺术家)
)
$puts(artist,$padcut($get(artist),$get(len_artist)))
//专辑
$puts(album,
$if(%_isplaying%,$get(c_playing),$get(c_album))[%album%]
)
//编码
$puts(codec,
$puts(ext,$upper($if2($ext(%__referenced_file%)文件,$ext(%_path%)文件)))
$puts(codec,$if(%__codec%,$caps2(%__codec%),$get(ext)))
$if($greater($len(%__codec%),14),$puts(codec,$left(%__codec%,14)...))
$if($stricmp(%__codec%,musepack),$puts(codec,'MPC'))
$if($stricmp(%__codec%,vorbis),$puts(codec,'Ogg'))
$if($stricmp($left(%_path_raw%,7),'cdda://'),$puts(codec,音乐 CD),)
$if($stricmp($cut(%__codec%,6),Monkey),$puts(codec,APE))
$if($stricmp($left(%__codec%,19),'Windows Media Audio'),$puts(codec,$replace(%__codec%,'Windows Media Audio',WMA)))
$if($stricmp($left(%__codec%,26),'Windows Media Speech Codec'),$puts(codec,$replace(%__codec%,'Windows Media Speech Codec',WMSC)))
$get(c_codec)'['$get(codec)
$get(c_codec_ex)[' '%__mpc_profile%]
$get(c_codec_ex)[' '%__extrainfo%]
$get(c_codec)']'
)
//长度
$puts(length,
$get(c_len)
[$pad_right(%_length%,5,0)]
)
// 比特率
$puts(bitrate,$get(c_bitrate)
$if2(%__bitrate_dynamic%,
$if(%__bitrate%,%__bitrate%)$get(c_bitrate_str)kbps)
)
//*******************实体部分*******************
$get(music_note)
$get(track_num)
$get(title)
$get(artist)
$get(album)
$tab(1)
//$get(bitrate)
$get(codec)
' '$get(length)



 附件: 您所在的用户组无法下载或查看附件
最后编辑lqs_lfzz 最后编辑于 2007-08-31 12:23:48

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

太多了,看的头晕啊。
foobar2000的忠实使用者

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

//*******************实体部分*******************
$get(music_note)
$get(track_num)
$get(title)

$tab(1)

$get(artist)

$tab(1)

$get(album)
$tab(1)
//$get(bitrate)
$get(codec)
' '$get(length)

可以试着加入 $tab(1) 效果会好一点:)

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

好好学习一下,有点多,呵呵

TOP

 

回复: fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

此文原是backspace发布在美丽元素的一帖子。至于最后的有“张扬的心”的代码,



引用:

主窗口标题
[%artist% - ]$if(%title%,['['%album%[ #[%disc%/]$num(%tracknumber%,2)]'] ']%title%,%_filename_ext%) '[ * 张扬的心 * QQ:17256338 ]'

状态栏
$codec()' '
[%__bitrate%kbps ]['('%__bitrate_dynamic%kbps')' ][%__samplerate%Hz]' '

$channels()
[ %__extrainfo%]' ¤ 张扬的心 QQ:17256338 ¤
' $if(%_time_total%,[%_time_elapsed%]' / '[%_time_total%],[%_time_elapsed%])

托盘
$if2(%title%,%_filename_ext%) ¤ 张扬的心 ¤

播放列表
$num(%_playlist_number%,$len(%_playlist_total%)).' '
[$get(artist) - ]
[$get(album) - ]
[$get(title)]
[$char(9)$if(%_isplaying%,'¤ 张扬的心 QQ:17256338 ¤ ')歌曲时长:%_length%]


我在backspace的原文中并没有见到过。

TOP

 

回复: fb2k自定义入门与提高---Title Formatting[标题格式使用详解]



引用:
原帖由 janlue 于 2007-9-19 17:03:39 发表
此文原是backspace发布在美丽元素的一帖子。至于最后的有“张扬的心”的代码,
我在backspace的原文中并没有见到过。


谢谢JANLUE给出了原文作者,那么后面粘的“张扬的心”很可能是上次转贴者自行加上去的,在此应该更正。“张扬的心”这种做法并不可取,也希望各位在转贴时要注意。

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

太复杂,能不能弄点现成的“套装”,让我等直接复制-粘贴即可?

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

外行 忽略~

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

经过学习..发觉自己增进了不少

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

晕了,弄了半天没弄明白应该在哪里设置。

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

这篇文章很好!玩好播放器必备!支持个先!

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

看得有点晕。。。。回去好好消化下~~

TOP

 

回复:fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

哎呀妈呀,这帖子老专业了,看的头晕

TOP

 

回复: fb2k自定义入门与提高---Title Formatting[标题格式使用详解]

请问 我想显示文件名 该如何做 能否 简单点 非常感谢

TOP