#include <cri_xpt.h>
#include <cri_atom_ex.h>
#include <cri_atom_wasapi.h>
#include "AtomCueSheet.h"
#define ACF_FILE SampleProject.acf
#define ACB_FILE AtomCueSheet.acb
static void tutorial_error_callback_func(
const CriChar8 *errid, CriUint32 p1, CriUint32 p2, CriUint32 *parray);
Sint32 main(Sint32 argc, Char8 *argv[])
{
tutorial_initialize();
for(;;) {
tutorial_sleep(10);
break;
}
}
tutorial_finalize();
return 0;
}
void criAtomExPlayer_Destroy(CriAtomExPlayerHn player)
Destroy an AtomEx player
CriAtomExAcbObj * CriAtomExAcbHn
ACB handle
Definition: cri_le_atom_ex.h:3033
CriAtomExAcbHn criAtomExAcb_LoadAcbFile(CriFsBinderHn acb_binder, const CriChar8 *acb_path, CriFsBinderHn awb_binder, const CriChar8 *awb_path, void *work, CriSint32 work_size)
Load an ACB file
void criAtomExAcb_Release(CriAtomExAcbHn acb_hn)
Release an ACB handle
void criAtomEx_UnregisterAcf(void)
Unregister an ACF file
void criAtomEx_ExecuteMain(void)
Execute the server processing
CriBool criAtomEx_RegisterAcfFile(CriFsBinderHn binder, const CriChar8 *path, void *work, CriSint32 work_size)
Register an ACF file
#define criAtomEx_SetUserAllocator(p_malloc_func, p_free_func, p_obj)
Register a custom memory allocator
Definition: cri_le_atom_ex.h:309
CriAtomExPlayerStatus criAtomExPlayer_GetStatus(CriAtomExPlayerHn player)
Get the player status
CriAtomExPlaybackId criAtomExPlayer_Start(CriAtomExPlayerHn player)
Start the playback
CriAtomExPlayerObj * CriAtomExPlayerHn
Player handle
Definition: cri_le_atom_ex.h:3622
CriAtomExPlayerHn criAtomExPlayer_Create(const CriAtomExPlayerConfig *config, void *work, CriSint32 work_size)
Create an AtomEx player
void criAtomExPlayer_SetCueId(CriAtomExPlayerHn player, CriAtomExAcbHn acb_hn, CriAtomExCueId id)
Set the sound data to play (specifying a Cue ID)
enum CriAtomExPlayerStatusTag CriAtomExPlayerStatus
Player status
@ CRIATOMEXPLAYER_STATUS_PLAYEND
Definition: cri_le_atom_ex.h:3670
CriAtomExVoicePoolHn criAtomExVoicePool_AllocateStandardVoicePool(const CriAtomExStandardVoicePoolConfig *config, void *work, CriSint32 work_size)
Create a standard Voice Pool
struct CriAtomExVoicePoolTag * CriAtomExVoicePoolHn
Voice Pool handle
Definition: cri_le_atom_ex.h:3220
void criAtomExVoicePool_Free(CriAtomExVoicePoolHn pool)
Destroy a Voice Pool
void criAtomEx_Initialize_WASAPI(const CriAtomExConfig_WASAPI *config, void *work, CriSint32 work_size)
Library initialization
void criAtomEx_Finalize_WASAPI(void)
Finalize the library
void criErr_SetCallback(CriErrCbFunc cbf)
Register error callback function
初始化CRI Atom程序时库。 在本教程中,简化了为
criAtomEx_Initialize_WASAPI 函数指定的参数。
criAtomEx_Initialize_WASAPI 函数的第一个参数是初始化参数,如果指定为NULL,则使用预设设置执行初始化。
criAtomEx_Initialize_WASAPI 函数的第二、第三个参数是指定初始化所需的工作区的参数。 使用
criAtomEx_SetUserAllocator 函数设置内存分配函数, 如果为工作区的指针指定NULL,为工作区大小指定0,则在
criAtomEx_Initialize_WASAPI 函数内部动态分配工作区。
使用
criAtomEx_RegisterAcfFile 函数,在运行时读取ACF文件。 该文件是环境设置文件。 接下来,使用
criAtomExAcb_LoadAcbFile 函数读取ACB文件并创建句柄。 在Cue播放时为Player指定ACB句柄。
criAtomEx_RegisterAcfFile 函数、 criAtomExAcb_LoadAcbFile 函数是同步函数。 执行
criAtomExAcb_LoadAcbFile 函数后,ACB文件加载完成, 如果函数成功,则返回有效的ACB句柄( ::CriAtomExAcbHn )。
本教程省略了错误处理,但
criAtomEx_RegisterAcfFile 函数、
criAtomExAcb_LoadAcbFile 函数可能会因为“找不到文件”等原因而失败, 建议检查返回值。
本教程中将省略第一参数是创建参数。省略时,会使用预设值创建Player。 创建Player后,将获得Player句柄( ::CriAtomExPlayerHn )。 通过该Player句柄执行对Player的各种操作。
本教程中未指定工作内存。 如果未在
criAtomExPlayer_Create 函数中指定工作内存(指定NULL和Size 0), 则会在函数内部动态分配内存。
用
criAtomExPlayer_SetCueId 函数指定要播放的Cue,用
criAtomExPlayer_Start 函数开始播放。 在
criAtomExPlayer_SetCueId 函数的第二个参数中指定已加载的ACB句柄。 在第三个参数中用ID(整数值)指定ACB中的Cue。
Player会根据指定的ACB句柄和Cue ID播放ACB中的Cue数据。 本教程中指定的CRI_ATOMCUESHEET_BOMB2由AtomCueSheet.h定义。
使用
criAtomExPlayer_GetStatus 函数获取Player的状态, 如果到达结束状态( ::CRIATOMEXPLAYER_STATUS_PLAYEND )则退出播放循环。 在播放循环中,每V调用作为CRI Atom的Server处理函数的
criAtomEx_ExecuteMain 函数。 如果没有每V调用,则无法及时读取音频数据,导致声音中断。
此外,由于需要通过CRI Atom的Server处理更新Player的状态,注意不要忘记调用
criAtomEx_ExecuteMain 函数。
在应用程序结束时,将通过对应的函数丢弃各句柄。 然后在相应的句柄丢弃函数中,释放创建句柄时动态分配的工作区。 最后使用
criAtomEx_Finalize_WASAPI 函数执行程序库结束处理。