上次已经编译通过了EMIPLIB-1.0.0,下面来学习怎么使用EMIPLIB。先从里面的例子开始。
先编译下最简单的例子。 example文件夹里的simplechain.cpp
新建一个VC2008工程,源文件里添加 simplechain.cpp,在项目属性里设置包含头文件目录,库文件目录,库文件名
这个例子有用到的头文件:jthread-1.2.1, jrtplib-3.7.1, emiplib-1.0.0 用到的三个库也是对应的。 暂时没有用到speex。
编译时提示找不到unistd.h,这个是linux下的系统头文件,注释掉便可以了。
输出结果:
Time: 1301639510.000000
Chain: Simple chain
Iteration: 1
MIPMessage type: 1
MIPMessage subtype: 2
Time: 1301639510.000000
Chain: Simple chain
Iteration: 2
MIPMessage type: 1
MIPMessage subtype: 2
Time: 1301639511.000000
Chain: Simple chain
Iteration: 3
MIPMessage type: 1
MIPMessage subtype: 2
Time: 1301639511.000000
Chain: Simple chain
Iteration: 4
MIPMessage type: 1
MIPMessage subtype: 2
Time: 1301639512.000000
Chain: Simple chain
Iteration: 5
MIPMessage type: 1
MIPMessage subtype: 2
Time: 1301639512.000000
Chain: Simple chain
Iteration: 6
MIPMessage type: 1
MIPMessage subtype: 2
Time: 1301639513.000000
Chain: Simple chain
Iteration: 7
MIPMessage type: 1
MIPMessage subtype: 2
Time: 1301639513.000000
Chain: Simple chain
Iteration: 8
MIPMessage type: 1
MIPMessage subtype: 2
Time: 1301639514.000000
Chain: Simple chain
Iteration: 9
MIPMessage type: 1
MIPMessage subtype: 2
Time: 1301639514.000000
Chain: Simple chain
Iteration: 10
MIPMessage type: 1
MIPMessage subtype: 2
本文的例子可以在这里下到:simplechain.rar
EMIPLIB的文档 emiplib-1.0.0文档
摘下文档里面的重点
Design philosophy 设计哲学
库的目标是设计一个可以用很多小组件通过链组合起来实现功能强大的程序;另外,库也封装了很多小组件形成特定功能的类,如voip类,给编程人员提供简单的接口。
Library core 库的核心
基层部分
组件 components 组件继承自 MIPComponent
组件链 component chains 链继承自 MIPComponentChain
消息 messages 消息继承自 MIPMessage
用法示例
loopchain.setChainStart(&sndin);
loopchain.addConnection(&sndin,&sndout);
loopchain.start();
上面例子链loopchain将两个组件sndin与sndout链接起来。当loopchain start时,创建了一个后台线程,此后台线程进行下面的工作
1.A MIPSystemMessage with subtype MIPSYSTEMMESSAGE_TYPE_WAITTIME开始创建,并被发往链loopchain的第一个组件sndin,在本例中,第一个组件是声卡,声卡接收到这个消息后,会等待直到采集一定量的声音样本数,
2.然后loopchain往链的下面传输数据,在本例中是传给sndout,声卡输出
3.当所有的消息已经被分发(distribute)后,MIPSYSTEMMESSAGE_TYPE_WAITTIME重新发到链的第一个组件声卡处,然后开始循环。当调用loopchain.stop()时,或出现一个错误时,链循环停止。
就像上面所说的,链的计时是链的第一个组件决定的
好了,文档的东西到此已经可以解释本例子的东西了,下面将例子贴出来吧
- int main(void)
- {
- // We'll initialize the timer to generate messages after 0.5 seconds.
- MIPAverageTimer timer(MIPTime(0.5));
- MIPMessageDumper msgDump;
- MyChain chain("Simple chain");
- bool returnValue;
- // The timing component and message dumper don't require further
- // initialization, so we'll just add them to the chain.
- returnValue = chain.setChainStart(&timer);
- checkError(returnValue, chain);
- returnValue = chain.addConnection(&timer, &msgDump);
- checkError(returnValue, chain);
- // Now, we can start the chain.
- returnValue = chain.start();
- checkError(returnValue, chain);
- // We'll wait five seconds before stopping the chain.
- MIPTime::wait(MIPTime(5.0));
- returnValue = chain.stop();
- checkError(returnValue, chain);
- return 0;
- }
例子中的第一个组件便是timer,MIPTime(0.5)将它设成每隔0.5秒触发一次。 MIPTime::wait(MIPTime(5.0))等待5s后就stop那个链chain,回头看看上面的输出,明白了吧。