メモリ使用量


使用するメモリ

CRI Atomライブラリは、ライブラリ内部での動的なメモリ確保(malloc関数等によるシステムのメモリ確保)は行いません。
CRI Atomライブラリが使用するメモリ領域とサイズは、主に初期化やハンドル作成の関数呼び出し時に指定します。
詳細については「ワークメモリについて」を参照してください。

計算方法

基本的には、各種Config構造体を設定し、各種CalculateWorkSize関数を呼び出すことで計算できます。
ファイルを読み込むものに関しては、ファイルサイズも影響します。
ワークメモリを必要とする処理とワークメモリ計算関数を以下に示します。

ワークメモリを必要とする処理とワークメモリサイズ計算関数
処理内容 処理関数 ワークメモリ計算関数
ライブラリの初期化 criAtomEx_Initialize criAtomEx_CalculateWorkSize
ストリーミングバッファ作成 criAtomExDbas_Create criAtomExDbas_CalculateWorkSize
ボイスプール作成 criAtomExVoicePool_AllocateStandardVoicePool criAtomExVoicePool_CalculateWorkSizeForStandardVoicePool
  criAtomExVoicePool_AllocateAdxVoicePool criAtomExVoicePool_CalculateWorkSizeForAdxVoicePool
  criAtomExVoicePool_AllocateHcaVoicePool criAtomExVoicePool_CalculateWorkSizeForHcaVoicePool
  criAtomExVoicePool_AllocateHcaMxVoicePool criAtomExVoicePool_CalculateWorkSizeForHcaMxVoicePool
ACFファイルの読み込み criAtomEx_RegisterAcfConfig criAtomEx_CalculateWorkSizeForRegisterAcfConfig
  criAtomEx_RegisterAcfData criAtomEx_CalculateWorkSizeForRegisterAcfData
  criAtomEx_RegisterAcfFile criAtomEx_CalculateWorkSizeForRegisterAcfFile
ACBファイルの読み込み criAtomExAcb_LoadAcbData criAtomExAcb_CalculateWorkSizeForLoadAcbData
  criAtomExAcb_LoadAcbFile criAtomExAcb_CalculateWorkSizeForLoadAcbFile
AtomExプレーヤ作成 criAtomExPlayer_Create criAtomExPlayer_CalculateWorkSize

また、 User Allocator方式を使用し、以下のような関数を登録することで、現在使用中のメモリサイズを取得することができます。

static CriUint32 usermem_allocated_size = 0;

void userMem_Initialize(void)
{
    usermem_allocated_size = 0;
}

void userMem_Finalize(void)
{
    if (usermem_allocated_size != 0) {
        /* エラー */
    }
}

CriUint32 userMem_GetAllocatedMemorySize(void)
{
    return usermem_allocated_size;
}

void *userMem_Alloc(void *obj, CriUint32 size)
{
    void* mem = malloc(size + sizeof(CriUint32));
    void* ptr = CRI_NULL;

    if (mem != CRI_NULL) {
        usermem_allocated_size += size;
        ptr = (void*)((CriUintPtr)mem + sizeof(CriUint32));
        *(CriUint32*)mem = size;
    }

    return ptr;
}
void userMem_Free(void *obj, void *buf)
{
    Uint32 size;
    void* mem;

    if (buf != NULL) {
        mem = (void*)((CriUintPtr)buf - sizeof(CriUint32));
        size = *(CriUint32*)mem;
        usermem_allocated_size -= size;
        free(mem);
    }
}

main()
{
    userMem_Initialize();

    // 独自のメモリアロケーターを登録
    criAtomEx_SetUserAllocator(userMem_Alloc, userMem_Free, NULL);
    
    // ライブラリの初期化
    // ワークメモリにはNULLと0を指定する。
    // →必要なメモリは、登録したメモリ確保関数を使って確保される。
    criAtomEx_Initialize(NULL, NULL, 0);
        :
    // アプリケーションのメイン処理
        :
    // アプリケーションを終了する際に終了処理を行う
    // →初期化時に確保されたメモリは、登録したメモリ解放関数を使って解放される。
    criAtomEx_Finalize();
        :
    userMem_Finalize();
}


Next:発音遅延の原因と対策

CRI Middleware logo Copyright (c) 2006-2018 CRI Middleware Co., Ltd.