CRI ADX
Last Updated: 2024-07-17 10:48 p
日本語
English
中文
关于运行时库的初始化/结束处理
本节将介绍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版的机型专用的初始化/结束函数如下。
criAtomEx_Initialize_WASAPI
criAtomEx_Finalize_WASAPI
执行机型专用的初始化函数时,将在内部执行以下三个函数。
criAtomEx_Initialize
criAtomExAsr_Initialize
criAtomExHcaMx_Initialize
通过使用机型专用的初始化函数,包括
ASR
/
HCA-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);
:
}
criAtomEx_Initialize
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 函数执行运行时库的结束处理。
通过执行运行时库的结束处理,可以释放初始化时设置的工作区内存或将其用于其他用途。
Next:
关于线程
Copyright (c) CRI Middleware Co., Ltd. 1.9.1