《Foobar集成实例讲义》.docx
《《Foobar集成实例讲义》.docx》由会员分享,可在线阅读,更多相关《《Foobar集成实例讲义》.docx(54页珍藏版)》请在冰豆网上搜索。
《Foobar集成实例讲义》
《Foobar2000集成实例讲义》.txt男人的承诺就像80岁老太太的牙齿,很少有真的。
你嗜烟成性的时候,只有三种人会高兴,医生你的仇人和卖香烟的。
Foobar2000中国爱好者社区
用FUI从头弄一个自己满意的Foobar2000《Foobar2000集成实例讲义》
感谢gdzqj88等诸多朋友的一再建议性的意见
感谢梵音声处等许许多多朋友热情鼓励
感谢dreamawake等朋友的关心
感谢大家的支持
谢谢!
…………………………………………………………………………………………………………………………
前言
初级篇
第一章、我需要什么样的音频工具?
第二章、用什么来集成这个音频工具?
第三章、凡壳初步
第四章、规划
第五章、备料
第六章、起
1、建立窗体
2、加入面板
3、组织代码
第七章、调试
第八章、实地运行
第九章、改进
第十章、成品
中级篇
第十一章、浅谈Func之Bug
第十二章、浅谈Func之Animation
第十三章、浅谈Func之Pop-upmenu
第十四章、浅谈Func之Map
第十五章、浅谈Func之Hash
第十六章、浅谈Func之Efficiency
高级篇
第十七章、浅议Func之一体化设计
第十八章、浅议Func之沟通
第十九章、浅议Func之功能再生
一、我需要什么样的Foobar2000?
二、用什么来集成Foobar2000?
三、FUI初步
四、规划
五、备料
六、起
1、建立窗体
2、加入面板
3、组织代码
七、调试
八、实地运行
九、改进
十、成品:
导出或者打包
十一、附录(
规划文档实例、
插件选择(复杂的单独介绍)、
FUI“零件”
前言
第一句话,结束后才看到的:
本讲义原只想写个FUI教程而已,写明FUI的特点特色、基本用法、注意事项这样的东西。
没想到一起笔就失控。
熬过十个几夜,一鼓作气以上百个业余工作日的精力换来的是一册出乎始料的讲义。
此时,我不在乎叫教程或者叫讲义或者叫别的什么,反正当初的目的是达到了,FUI教程的内容是客观了。
抽出FUI教程的方法是,将第三章FUI初步、第五章备料、第六章起、第七章调试这四章独立出来。
这四章的内容已经可以构成完整的FUI教程,虽然还是以例析的形式。
但,
不论称教程叫讲义,其实,那都是狐假虎威的称谓,也有一点是为了方便阅读。
实质上,应当只是一个比较完整的学习笔记而已。
第二句话,回头想了想,为什么得以在Foobar2000中国社区发表?
是因为切身感觉到Smoking是位暖人心窝的知心人,是因为这里活动有好多位良师益友。
至于我的创作水平,恐怕会是半桶水偏要淌得狠。
我的用意只不过是介绍Foobar2000的一种新鲜玩法,只不过希望共同催热FUI的应用而已。
第三句话,也是这讲义的缘起。
2009-10-9感言:
无偿天天使用FUI已经半年多了,总感觉很对不起作者,很对不起Foobar2000。
本人很土生土长的中国渔民,与FUI作者kandata没有丝毫亲戚关系。
只是觉得这FUI就好像专门为本人而开发的,这k仿佛事先知晓本人的想法和意愿,一开始就把困扰我多年的难题一扫而光。
然后,是功能上的一跃再跃。
我先前的难题重点有:
标题栏一定要去掉;
一定要能全屏(不是最大化);
图片显示一定要在支持底坐透明的同时支持通配符关联;
一定要长文本支持,中文自动换行,可滚动;
类触摸操作(地图化操作,不是按钮操作);
媒体库可以借助通用数据库软件进行管理。
带着这些问题,我跨越千山万水,四处寻师访友,始终找不到问题的出口。
是FUI可怜见,才使问题全部完满解决。
好像应当开心才对,但不知怎的,一时间感觉十分茫然,不知该往什么方向上再努力。
所以,
想,写一本FUI教程。
不行,这好比BIFU(不会写,也可能念错了)撼大树。
想,整理一些满意的FUI零件,不过好像旱了。
可能不少人急于需要是一本中文说明书,可是,我完全不懂日文,翻不了。
所以,就想,写一个专题,名字先叫《用FUI从头弄一个自己满意的Foobar2000》,不敢自称为教程,但一定象教程那样高度重视、谨慎对待、认真编排、相对完整、数据翔实、有插图、言简意赅、讲话先经过一下大脑。
又想想,这个工程好像也好大哦!
硬着头皮,做一头乳猪渡一趟沧海,做一只菜鸟飞一趟网络时空。
《Foobar2000集成实例讲义》
——用FUI从头弄一个自己满意的Foobar2000
提纲(见上楼)
一、我需要什么样的Foobar2000?
Foobar2000是个优秀的音频播放、转换、管理工具,核心程序由Peter
Pawlowski开发,功能组件由五湖四海的Foobar2000爱好者自愿开发。
这种模块化的拼凑式给使用者一个自我实现的可能,让人一人一个Foobar2000,个个Foobar2000都不一样。
同时这也给程序本身的广泛使用筑起一道门坎。
这道门坎高高的,对一些人来说,它的高度已经高成一堵墙。
然而,一旦入门,就将很难不被其中的功能丰富、使用适应个人习惯、外观符合个人审美取向等等所深深吸引,甚至从此欲罢不能。
如今,错,一直以来,网络上活跃着一群热心人,他们热衷于软件DIY,从自己的需要和喜好出发改造程序,并重新整合、封装,发布,以另一种面貌流行在网络上。
Foobar2000也不例外,它也被DIY着,也被打包着,而且它天生就是被DIY被打包的优良品种。
如果刚要开始喜欢,各种打包版的Foobar2000正是入门的好途径。
在五花八门中不妨优先考虑一下著名的版本,比如0.8.3时候的蓝色网际版,比如0.9.x当今的Asion版。
当使用一段时间之后,可能发现这种通用版本不一定恰巧配合自己的口味和品味。
这时,有一种“半包”版可能可以用来解解渴。
这种半包版其实就是以一个配置文件为中心,集合了这个配置所需要的组件,共同形成一个配置包。
这个配置包不能独立运行,它需要解压到Foobar2000程序中,经过一个导入动作和一些个或繁或简的设置动作,就能使Foobar2000以崭新的面目投入工作。
半包版琳琅满目,绚烂多采,令人美不胜收。
当可以独立应用半包版,说明自己已经对Foobar2000有相当的了解。
这时,许多人难免想再深入一点,动动其中的参数选项,动动其中的代码,动动。
所以,很可能已经阅读了Foobar2000自带的帮助文档,但是这个文档对初学者几乎没有什么实际的帮助,因为它通篇尽是在解释那些“标题格式语法”。
所以,许多人可能就这样被迫地找到《Foobar2000中文全教程》,这是Jense老师的著作。
它不但十分有益于初学者,对已经入门乃至资深用户同样不无裨益。
此时,如果对那些“语法”依然非常不了解,建议详细阅读上述教程的高级篇。
theo大侠翻译过查询语法《查询表达式参考》,就在Foobar2000中文Wiki里,请一道学习一下。
有了这个基础,往下探讨才不会浪费时间。
我需要什么样的Foobar2000?
这一刻我们的正确答案是:
当手上现成的Foobar2000不象我内心里真正所要的样子。
这就是我需要的。
而如果手上现成的Foobar2000已经满意,以下内容请尽快别看。
二、用什么来集成Foobar2000?
用来集成Foobar2000的零件,与上面提到的功能组件一样,自身也是一个组件,通常以Dll文档形式参与活动,坊间称它作UI(user
interface
用户界面)。
在UI的历史上,出现过CUI、GFX、EUI、PUI、DUI……CUI的出现,使Foobar2000的定制变得十分直观、简便。
毫不过分地说,是CUI打先锋帮Foobar2000打下了大片天。
没有CUI的昨天,就没有Foobar2000的今天。
PUI的诞生,给Foobar2000带来的首先是视觉上的强力冲击,其次是对CUI的再思考。
PUI流星般地划过,但它活的灵魂并没有立即消散。
PSS和WSHM有如新生的重臣辅佐CUI这座老皇上。
现在CUI被应用,其实很大一部分仅仅借助它的支架,门面和支柱基本都让位给PSS与WSHM。
是PSS与WSHM给CUI注入新生血液,没有PSS与WSHM的鼎力扶持,CUI恐怕无力拢聚人心,更别想站住主流的位置。
然而,就象一个腐朽的王朝,千疮百孔,貌合神离,光靠几位能人志士几根中流砥柱终究挡不住就要喷薄而出土崩瓦解的历史潮流。
CUI有个死结,不是一个,是一些个。
举个例子哦,它受操作系统风格制约相当严重,标题栏去不掉,滚动条贼不好办,冷不丁就从某地方挤出一个“白眼”。
另外,插图底坐要么无法透明要么不支持通配符。
还有一些深层次的死结,有待进一步探讨。
在这人心思动的动荡时局,FUI揭杆而起。
头儿不叫陈胜吴广,他就是尚未被大导演重视重用从而还不太众所周知的神秘飞大侠kandata。
短短一个多月发布近40个版本。
这个数字是许多组件需要花几年时间才能走完的。
也许还有更加优越更加优秀的UI在暗暗酝酿在整装待发。
如果您怀疑FUI可能不够稳定、不够成熟、效率低下、功能简易。
举手回答,我以我亲身经历回答:
“不!
”不够成熟也许,但稳定是可靠的稳定、效率是普遍的高、功能是绝对的强悍。
一些从前想都不敢想的要求,FUI可以轻易地满足人们,譬如预告节目、再譬如读写文档。
假如,想好了真的选择用FUI来集成Foobar2000,以下的内容才算正题。
三、FUI初步
——概述
FUI,全称FuncUser
Interface,突出F,Func,Function也,函数、功能是也。
一句话,用函数的手段实现多种多样的已知未知功能。
是的,是已知和未知。
这也正是函数的魅力所在之一。
FUI已经突破界面的面层,透过程序操作层,深入控制层,觊觎各种用户本分非分的要求。
是的,本分和非分。
这体现在它有“再编程能力”,更体现在它是一体化地对待界面整合,一体化地考虑到对非界面元素的凝聚,还体现在它有超强的内外沟通能力。
所以,FUI是一个零件总成,本身归属于界面零件。
要它、它要集成Foobar2000,几乎没有图形撮合,全靠代码穿梭。
这些代码有些类似“标题格式”有些类似脚本语言甚至程序语言。
也许就因为这样,掌握标题格式代码的同志说它难懂,掌握脚本语言的同志也说它难搞。
要命的是,FUI自身没有准确完整的英文说明书,没有中文说明书,也没有得力的同志到Foobar2000主要阵地上摇旗呐喊,缺乏霸道的应用实例,只有四面楚歌——PUI临终前哀叹的流言飞语。
不过,既然只剩FUI肯帮忙,我们别给它失望,别给自己绝望。
打起精神,鼓足信心,张飞做豆腐。
记住,这是我们最后一次的迟疑,最后一次的有些胆怯,最后一次的不够坚定信念。
其实,按部就班,循循而进,每一步都并不难弄。
甚至有时会感觉居然这么不可思议的容易。
——Readme
要了解FUI,首先得从它自带的文本来入手。
Readme人尽皆知的说,是不应当任意跳过的。
这个原文档在我读来,与天书无异。
后来,在我要求下neonasahi优先翻译它。
从此天书变成经文。
现在终于不用猜了,13大点:
1、前言简便创建对象方法(从主菜单Func->Easycreating轻松创建)
顺便赶紧重点补充:
工作台(FuncUIConfiguration,FUI用户界面配置窗体)和工具箱(Palette,调色板)启动方法:
1)可以从Func菜单启动。
2)右击窗体选择脚本(Script)然后随便选择一项。
3)可以通过设置快捷键。
(强烈建议,也建议在FUI工程完工成品出厂前撤销这快捷键)
4)可以通过设计按钮等。
(强烈不建议)
5)工具箱还可以从工作台启动。
6)而工作台也缩身于主程序参数设置窗体的显示页(Display)中。
7)记住了其中之一吗?
起码要求有点印象。
2、FAQ,常见问题对答计有8个(关于图像旋转、按钮、面板导入、窗体加载、内嵌窗体、窗体隐藏等出现异象的解答,这些都不是Bug。
)
3、对象归类(高级如窗体、中级如控件、一般如图文、特殊如Map行为与主菜单)
4、创建中级与一般对象的注意事项(独立刷新、整页刷新)
5、窗体类型(主;父;子;内嵌)
6、窗体事件6个,其执行顺序为:
Load→(Resize,Move,Activate)→Open,重点在Load、Open、Resize
-Load
-Open
-Close
-Resize
-Move
-Activate
7、共通事件23个,重点在Init、NewTrack、Edited、Time、SelectionChange
-OnInit
-OnQuit
-OnPlaybackStarting
-OnPlaybackNewTrack
-OnPlaybackStop
-OnPlaybackSeek
-OnPlaybackPause
-OnPlaybackEdited
-OnPlaybackTime(PerSecond)
-OnPlaybackOrderChanged
-OnPlaylistActivate
-OnPlaylistCreated
-OnPlaylistRemoved
-OnPlaylistRenamed
-OnPlaylistReordered
-OnPlaylistItemSelectionChange
-OnPlaylistItemFocusChange
-OnPlaylistItemAdded
-OnPlaylistItemRemoved
-OnPlaylistItemModified
-OnPlaylistItemReordered
-OnVolumeChange
-OnTimer
8、用户脚本2个,没有重点,都是重点
#function
#end
#define
#end
9、选项设定说明:
通知栏、脚本模式、备份方式、导入导出
10、特别交代(元数据的获取被限制情况下的另外方法$pl_getmeta
更新窗口与更新对象的区别,要灵活应用
窗体中同一时间对象绘写按子窗体、面板、图文、按钮顺序进行。
设置页(前面所称的工作台)启动方法,从菜单Func->Configuration比从参数页Preferences启动更好。
虚拟画面与实际画面从dmode和level的应用来体现。
$hash函数特别说明。
这个函数非常重要。
类似$puts,但有区别。
$puts在FUI
中赋值结果属于局部变量。
不要感觉重复,要想办法让它们互相配合。
这是我特别交代的。
)
11、预定要添加的功能(在编辑框添加查找与替换功能,添加文本框等容器,增强函数性能,增加列表的排序功能。
不打算为$map添加绘矩形、不打算添加上下专辑函数。
)
12、关于Bugs(作者信心满满,更积极等待着BUG信息的到来啊。
)
13、更新日志(不急看这个)
Readme阅毕,今日即便不懂日文,也会发现我对原文语蔫不详,却添油加醋自作主张乱比划。
对,我只是以Readme为由头,强调一下,我不是在也无力也不必再翻译文档。
我想在此做个小结,FUI有意义最简单时大概这样走流程的:
程序启动加载Init代码,然后Starting,从New
Track运送数据和指令给各个指向的窗体,窗体中的代码就此活跃起来,该显示的文本显示,该亮相的图片亮相,该计数的计数,该干什么干什么起来。
用户脚本不会自动运行,它如同预置的函数,只在被调用的时候才生效。
每个窗体可以单独关闭,当主窗体关闭时Quit中的代码在退出程序前回头挣扎了一下。
所有这些,只存在想中,肉眼通常难于察觉。
——示例
跃跃欲试了吧。
好的,我们先摸摸看FUI作者的示例。
首先建议重新另外安装一个干净的Foobar2000,添加FUI组件后,启动程序。
遇程序启动过程的对话时,选择FUI界面。
请启动工作台,别说不会,上面苦口婆心了。
然后点击Option(选项),点击Import(导入)。
找到sample_001.config文档确定。
重启。
《插图FUI作者示例sample.configv0.0.1》
先别管这个示例实不实用,美不美观。
我们要集中精神,摸索摸索。
随便弄吧!
大家请随便。
越随便越好。
[插图,暂缺]
这个示例大约出生于V0.1.9时期。
有三点令我记忆犹新。
其一,那组会闪荧光的播放按钮,其实那不是按钮。
既不是通过加载图片而成,也不是由某个字体实现,它们原来是通过点阵绘出来的。
这说明FUI的方法可以开通一条暗道非常的靠近高级语言。
这个效果我有些喜欢,可是找不着地给安容,所以至今有点遗憾。
注意其操作方法不是$button,而是$map。
map,我还说不清什么意思,地图吗?
这个命令,我从G4D中见过。
$map,请多多重视,后面我们将广泛起用这个$map。
依靠它,类触摸操作的方法一下子容易了。
其二,$base,用法是以$base(x,y)与$base()夹住一般对象如图文甚至高级对象如窗体,其目的是形成一个矩形位移,这样的话,便于对齐,便于代码组团的群体迁移、便于简化其间的代码。
其三,一幅活的星空图。
这图在表达什么呢?
许多星星在随机地四处飞行。
肯定不是康德仰望的那个星罗棋布的夜空,也不会是贝多芬月光下踱进人家父女相依为命的钢琴小屋所产生的音乐故事。
从现在起,我要自觉养成摸索一个配置主要在于分析提炼人家的优点、亮点,汲取精华,为我所用。
——章小结
FUI文档重点有三个,上面一起初了解其中必须先熟悉的一个:
foo_ui_func_readme.txt,还有两个:
foo_ui_func_variables.txt,
foo_ui_func_functions.txt。
这三个文档指定放在Foobar2000根目录。
最好从工作台来阅读,这样条理性好。
而且它们根本就是工具集,是FUI组件本身不可分割的一部分,不能仅看它是文本文档而已。
从工具箱看:
Func分12个组,具体函数数目有点多,数了几次没数清。
其实本来就不该去要数。
Var分4个组,2组局部变量,2组全局变量。
别再想数了,今后有应用自然就渐渐熟悉。
变量和函数哥俩,就先不介绍了。
我在开发前将其组头译成中文或英文,好懂了,方便了。
怎么说方便了呢?
用了就知道,这个会无数次使用到的。
看看图,留点印象就够了。
有关含义与使用方法我们等到组织代码环节再行探讨。
那样才不致于枯燥感太浓。
需要注意的是,本讲义初始对应的Func版本是:
1.FuncUserInterfaceV0.2.1Bykandata
2.FuncUserInterfaceV0.2.1汉化版ByAsion
3.FuncUserInterfaceV0.2.1中文文档(上述三个)翻译:
neonasahi
《插图工作台及工具箱》
在FUI初步阶段,我们主要任务是对FUI有个初步的印象,但必须至少搞懂以下第一项:
1、怎么启动FUI工作台,怎么调出Palette辅助工具箱。
2、初步了解工作台上的页面布局,大体熟悉工具箱各个功能页的相对位置。
3、初步了解脚本代码页内的选单。
4、大概了解FUI的内部运作流程。
了解窗体事件执行顺序,了解窗体内绘写对象的优先顺序。
5、预习函数,通览,不要求马上理解。
重点关注几个函数:
$hash,$map……
6、预习变量,留个印象就行。
重点关注几个变量:
%_result%,%pl_playingname%,%pi_activeindex%……
<注:
上述示例插图版权归kandata。
这些是朋友“话仙”走后的某夜凭印象写的,但在读过neonasahi的中文说明文档后已经修补原先的一些猜测。
译名也尽量与Asion的组件汉化及neonasahi的中文说明尽量统一。
为防修订遗漏,特此注明,通常事件=常规事件=共通事件,窗体约等于窗口,工作台=Func用户界面配置窗体,工具盒=工具箱=调色板,我想,这个讲义主要针对中文版,也兼顾一点原版。
>
四、规划
——概述
代码的事情先放一边。
也别刻意强记。
轻松点,一步一步来,每个步骤功课扎实了,下一步保准没事儿。
FUI不但有体贴的代码编写设计,还是一个相当一体化的总成工具。
就算冲作者的用心,我们也应有义务在码代码前,确保用点时间用点心思规划规划。
这是做好一个界面的关键一步,何况我们面对的是一次集成。
这是第一步。
跳过这一步,常常会象跳入陷井、跨入迷宫。
你可以抬扛说陷井锻炼人迷宫有乐趣,说的也是哦。
——问自己
问问自己,自己到底需要的是什么样的Foobar2000?
这问题不是一开始回答了吗?
是的,刚才的回答是问题的一面。
现在面临的是问题的另一面,现在一定要搞清楚这个到底。
比如,只是要Foobar2000放放音乐,少量的音乐。
或者更多地用于背景音乐播放而已。
比如,要Foobar2000播放音乐,还要做点转换。
比如,需要Foobar2000播放音乐,转换音频文档,还要它管理音频文档。
流行多?
古典多?
量呢?
还比如,是装在本本上?
装在普通台式机上?
装在客厅HPC上?
还是装在服务器上?
这个需要,还有操作方面的,比如主要靠键盘?
鼠标?
遥控器?
触摸屏?
别的什么?
个人操作习惯?
这需要,还有审美方面的,比如基色?
比如形状?
比如单体分体?
比如模拟物?
比如表格化否?
还有一点,可能被忽视了。
我的主要音源是什么?
CD、DVD-A、DTS(多声道情况)、镜像、WAV、无损压缩、Mp3、流媒体、其他。
问自己这么多,到底有啥意思嘛?
当然有意思。
拿看似最不相关的音源方面来说吧,如果以听CD为主,那么打开CD的命令就要优先考虑,要放在最方便的位置,列表也要考虑CD的特点。
搜索器可能就要瞄准全部列表。
如果主要听WAV,媒体库扫瞄就要考虑对CUE的处理,元字段就要考虑CUE不能承载的补救办法。
同时音源还直接关系到输入组件的多寡。
所有这些每一点都与我们的集成工作紧密相关。
我们不能太啰嗦,讲得过详细自己不烦人也烦了。
总的来说,以需定产就是我们进行规划的根本方针。
规划需要,也要规划行动。
这是规划是否切实可行的要点。
不说道理,下面描述一个直接有用的规划。
它将用于指导后面的真格的行动。
是本专题所试图剖析的一个实例的正式开始。
——示例
现在,我们假设自己的Foobar2000要用来播放、转换、管理音频文档。
将安装在本本或者普通桌面系统上。
主要操作工具是鼠标和键盘。
希望能够直接了当。
根据这种需求,我们拟设计一个普通窗口模样的、以播放列表和媒体库筛选为主要组成的主体,在核心部件周围安插操作对象和重点显示元素。
为方便和洁净,考虑内嵌二级窗体,以显示音乐介绍、歌词、封面等扩展信息。
其中歌词与封面搭配搞一个,音乐文本信息与艺术家图片搭配搞一个。
主体与二级窗体来回切换务必做到一点即达,一点即回。
二级窗体之间也应当一点即切。
由于本本和桌面系统