CRI ADX  Last Updated: 2024-07-17 10:48 p
关于运行时库的初始化/结束处理
本节将介绍CRI Atom运行时库的初始化处理和结束处理。

关于初始化函数的类型

CRI Atom运行时库在初始化时确保运行运行时库所需的资源。
因此,要使用CRI Atom运行时库的功能,必须首先执行运行时库的初始化。
运行时库的初始化函数大致分为以下两种类型。
  • 与所使用的功能相对应的初始化函数
  • 为每个机型准备专用初始化函数
用户需要在应用程序中执行以上两种类型之一的初始化函数。

各初始化函数的特点如下。

关于与功能相对应的初始化函数

根据功能,Atom运行时库的初始化处理包括以下三个初始化函数。
初始化函数 说明
criAtomEx_Initialize 函数 初始化运行时库的基本功能。
可以使用除ASR和HCA-MX外的所有功能。
criAtomExAsr_Initialize 函数 “ASR”初始化。
如果不使用ASR则不需要此函数。
criAtomExHcaMx_Initialize 函数 “HCA-MX”初始化。
如果不使用HCA-MX则不需要此函数。



不使用ASR和HCA-MX的情况下,如果仅执行criAtomEx_Initialize 函数,则不会链接不需要的模块。

关于各机型的专用初始化函数

Atom运行时库提供适合各机型初始化处理的"机型专用初始化函数"
PC版的机型专用的初始化/结束函数如下。
执行机型专用的初始化函数时,将在内部执行以下三个函数。
通过使用机型专用的初始化函数,包括ASRHCA-MX在内的所有功能将被初始化,因此可以简化初始化步骤。
[备注]
教程和示例程序使用的是机型专用的初始化函数。

如何初始化运行时库

初始化运行时库时,可以详细指定运行时库的动作规格。
以下将详细介绍使用 criAtomEx_Initialize 函数时的初始化方法。
作为参数,初始化函数必须指定运行时库初始化的配置结构体(::criAtomEx_Initialize 函数使用::CriAtomExConfig )和工作区内存。

关于运行时库初始化的配置结构体

运行时库初始化的配置结构体(::CriAtomExConfig )是用于指定运行时库的动作规格的结构体。
可以在配置结构体中指定的主要参数如下。

  • 线程模型( thread_model )
  • Server处理的执行频率( server_frequency )
  • 最大虚拟Voice数( max_virtual_voices )
  • CRI File System库的初始化参数( fs_config )
(1) 关于线程模型(thread_model)
CRI Atom运行时库根据此结构体指定的规格构建线程框架。
关于线程框架的详细信息,请参照“ 关于线程 ”。
(2) 关于Server处理的执行频率(server_frequency)
CRI Atom运行时库在一个函数中集中执行运行时库内部的大部分处理,例如管理文件读取、解码音频数据、输出音频、更新状态等。
CRI Middleware将这个集中执行运行时库内部处理的函数称为“Server处理”
为无缝播放音频,CRI Atom运行时库定期在线程上执行Server处理。
这时,CRI Atom运行时库以server_frequency指定的频率执行Server处理。
如果提高Server处理的执行频率,将导致每单位Server处理的处理量(解码量等)减少。
结果,虽然降低了每单位服务器的处理负荷(负荷分散),但增加了执行Server处理的费用。
(如果在便携游戏机等CPU资源较少的环境中过度提高Server处理的执行频率,则有可能不能忽略执行Server处理的开销。)
如果降低Server处理的执行频率,将导致每单位Server处理的处理量增加。
虽然执行Server处理的开销降低了,但增加了每单位Server处理的负荷,可能会发生丢帧等问题。
[备注]
通常为server_frequency指定与应用程序的帧速率相同的值。

(3) 关于最大虚拟Voice数(max_virtual_voices)
指定在应用程序中同时使用的“虚拟Voice”的数量。
虚拟Voice是提供控制Voice的接口的虚拟Voice对象。
(与Voice不同,虚拟Voice本身没有发声资源。)

指示AtomExPlayer播放音频数据时,Atom运行时库将确保虚拟Voice并向虚拟Voice发出发声请求。
虚拟Voice根据发声请求从Voice池确保必须的Voice,尝试发声。
这时,如果能够确保Voice则执行发声处理,如果不能确保Voice则不执行发声处理。
(注意不一定发出虚拟Voice数量的声音。)

与硬件Voice不同,只要运行时库中的内存允许,就可以创建虚拟Voice。
因此,即使在可发声的声音数量受到硬件限制的环境中,也可以临时控制超出发声上限数量的声音。
应用程序中使用的Voice数量在创建Voice池时确定,虚拟Voice数量则在运行时库初始化时指定。
增加虚拟Voice数量会增加可同时控制的声音数量,但需要更多的内存。
注意
必须为虚拟Voice数设置超出Voice总数(所有Voice池确保的Voice的合计值)的值。
如果Voice池确保的Voice总数超出虚拟Voice数,则Voice池将创建失败。

请注意:虚拟Voice不仅用于管理实际发声的Voice,还会被用于管理发声请求。
(执行criAtomExPlayer_Start函数后直至服务器处理开始为止,仍会保存应发声的音频数据信息。)

如果虚拟Voice不足,将返回错误回调,发声失败。
(因为请求本身没被执行就结束,所以不会执行Voice优先级等的评估,发声必然失败。) 为避免虚拟Voice数不足,应用程序初始化时应为max_virtual_voices设置比实际Voice数足够大的值。
(虚拟Voice数的大致标准是“最大同时发声数+每1V的发声请求数”。)
(4) 关于CRI File System库的初始化参数(fs_config)
CRI Atom运行时库使用CRI File System库来读取文件。
因此,如果执行::criAtomEx_Initialize 函数,则在函数内部执行CRI File System库的初始化。
如果为fs_config指定NULL,则CRI Atom运行时库将使用预设设置初始化CRI File System库。
如果要使用非预设设置初始化CRI File System库,则必须为fs_config设置CriFsConfig结构体,执行CRI Atom运行时库的初始化。
[备注]
除上述以外,运行时库初始化时可指定的参数还有数个。
关于尚可设置参数的详细信息,请参照“ CriAtomExConfigTag ”项。
执行::criAtomEx_Initialize 函数时,如果CRI File System库已经初始化,则不会在::criAtomEx_Initialize 函数内部执行CRI File System库的初始化。
关于CRI File System库的初始化,请参照CRI File System“FileMajik PRO”手册。

关于省略配置结构体

初始化时的指定配置结构体是可以省略的。
具体来说,可以为::criAtomEx_Initialize 函数的参数指定以下的NULL。
main()
{
/* 执行初始化而不指定配置结构体 */
criAtomEx_Initialize(NULL, NULL, 0);
}
CriBool criAtomEx_Initialize(const CriAtomExConfig *config, void *work, CriSint32 work_size)
Initialize the library

如果省略配置结构体,CRI Atom库将使用以下设置执行库的初始化。
  • 将框架设置为多线程模型
  • 将Server处理频率设置为60Hz
  • 将最大虚拟Voice数设置为16
  • 使用预设来初始化CRI File System库
使用与上述相同的设置初始化运行时库时,可以省略配置结构体的指定。

关于工作区内存的指定

除上述参数外,初始化运行时库时,还必须一并指定运行时库所需的工作区内存。
关于如何指定工作区内存,请参照“ 关于工作区内存 ”。

如何结束运行时库

结束应用程序时,必须执行运行时库的结束处理。
使用::criAtomEx_Initialize 函数初始化运行时库时,使用::criAtomEx_Finalize 函数执行运行时库的结束处理。
通过执行运行时库的结束处理,可以释放初始化时设置的工作区内存或将其用于其他用途。