CRIWARE for C#
Blazor編02. データの読み込み

本チュートリアルでは、CRIWARE for C#を利用してCRI ADX向けの独自形式データを読み込む方法を説明します。

CRI ADXの初期化

CRI ADXをプログラムで利用するには、その前準備である「初期化」が必要です。

今回の例では、既にプロジェクト内にあるProgram.csに追記します。

// ~~前略
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
Initialize();   // 追記
await builder.Build().RunAsync();

// 追記
void Initialize()
{
    // CRIWAREのエラーをコンソールに出力
    CriBaseCSharp.ErrorCallback.Event += Console.WriteLine;
    // ADXを初期化
    CriAtomCSharp.GetDefaultConfig(out var config);
    CriAtomCSharp.Initialize(config);
}

ここで行っている初期化処理は最低限のものです。

音声を再生する場合は追加のリソース確保などが必要ですが、データのロード/解析のみであれば十分です。

ACFファイルの読み込み

Home.razorを編集してACFのロード/解析を行うようにしてみましょう。

この例ではローカルファイルを指定してブラウザにロードし、カテゴリ情報を表示します。

@page "/"
@using CriWare

<PageTitle>CRI ADX Tutorial</PageTitle>
<!-- InputFileコンポーネントを利用してローカルファイルを指定 -->
<InputFile OnChange="OnUploadAcfAsync">Select ACF File</InputFile>

<h2>ACF Name: @acfInfo.name</h2>
<h3>Categories</h3>
<!-- ループでカテゴリ情報を取得して表としてレンダリング -->
<table class="table">
    <thead><tr><th>ID</th><th>Name</th></tr></thead>
    <tbody>
        @for (ushort i = 0; i < acfInfo.numCategories; i++)
        {
            CriAtomExAcf.GetCategoryInfo(i, out var categoryInfo);
            <tr><th>@categoryInfo.id</th><th>@categoryInfo.name</th></tr>
        }
    </tbody>
</table>

@code {
    CriAtomExAcf.Info acfInfo;

    private async Task OnUploadAcfAsync(InputFileChangeEventArgs args)
    {
        // ファイルをブラウザのファイルシステムにコピー
        using var source = args.File.OpenReadStream(long.MaxValue);
        using var dest = new FileStream("uploaded.acf", FileMode.Create);
        await source.CopyToAsync(dest);
        // コピーしたACFファイルをADXライブラリにロード
        CriAtomEx.RegisterAcfFile(null, "uploaded.acf"u8);
        // ACF情報を取得
        CriAtomExAcf.GetAcfInfo(out acfInfo);
    }
}

プログラムを実行し、Choose Fileを押下してお手元のACFをロードしてください。

ACFに含まれるカテゴリ情報が表示されます。

お手元に適当なデータがない場合、CRI ADX LE for C#リポジトリのデータをご利用いただけます。

備考: 「終了」処理は?

CRIWAREでは本来、前準備である「初期化」処理に加えて、後片付けである「終了」処理をアプリ終了時に呼び出す必要があります。

しかし、Blazor WebAssemblyでアプリ終了時(タブを閉じる瞬間)に確実に処理を行わせることは難しいです。

また、Web版においてはタブを閉じることですべてのリソースをブラウザが破棄してくれるため、アプリケーション実装でリソース破棄を厳密に行う必要はありません。


このため、本チュートリアルでは「終了」処理を省略しています。

他のプラットフォームでは必要に応じて「終了」処理を行ってください。

まとめ

本チュートリアルでは、CRI ADX向けのACFファイルをロードし、その内容の一部をブラウザで表示しました。


今回表示したカテゴリ情報に限らず、CRI ADX向けの独自形式データ内には様々な情報が含まれています。

Web版ADXを利用してアプリケーションを用意すれば、各環境でのツールインストールなど無しに内容の確認が可能です。

author:久田