更新履歴
2017/04/25 Ver.1.0.0.1 リリース版
2018/05/14 Ver.1.2.5.1 C-FA 1.25.1対応

1. 概要

1.1 C-FAについて

C-FAは、アクセルが開発したサウンドコーデック・ミドルウェアです。C-FAはマルチプラットフォームでの再生に対応しており、Windows、Mac、Android、iOSでのデコードが可能です。汎用音声コーデックの音質を目指し、さらに、より低負荷での再生を実現するために開発されました。また、シークポイントの設定やなめらかなループ再生、高精度の位置情報取得に対応しています。

1.2 C-FA SDKについて

C-FA SDKは、C-FAを使用したアプリケーションを開発するための開発ツールとライブラリのソフトウェアスイートです。C-FA SDKには以下が含まれます。

項目 概要 フォルダ名 ファイル名

オーサリング用ツール

音声ファイルから.cfaファイルを生成するためのエンコードツールと、.cfaファイルから.wavファイルを生成するためのデコードツールが含まれます。Windows版とMac版が含まれます。

tools/mac
tools/x86

cfaenc_c

cfadec_c

プレイヤツール

.cfaファイルを再生するためのプレイヤアプリケーションです。Windows版とMac版が含まれます。

tools/mac
tools/x86

amplay

デコードライブラリ

各プラットフォームで.cfaファイルをデコードするためのライブラリが含まれます。

library

*.a

*.so

*.dll

*.dylib

JNI プラグイン

Android SDKでcfaファイルをデコードするためのプラグインが含まれます。

jni

*.java

*.so

Unityプラグイン

Unityで.cfaファイルをデコードするためのプラグインが含まれます。

unity

*.a

*.so

*.dll

*.bundle

*.cs

依存ライブラリ

Windowsで必要なOpenALのインストーラが含まれます。

thirdparty

oalinst.exe

サンプルプログラム

.cfaファイルからデコードと再生を行うサンプルが含まれます。

sample

*.cpp

*.java

1.3 対応プラットフォーム

OS バージョン デコードライブラリ名

Windows

Windows7 以降

cfadec.dll

cfaplay.dll

Mac

Mac OS X 10.7以降

cfadec.dylib

cfaplay.dylib

cfadecplay.bundle

Android

Android OS 4.0以降

libcfadec-VER.a(*)

libcfaplay-VER.a(*)

libcfadecplay.so(*)

iOS

iOS 6.0以降

cfadec-VER.a(*)

cfaplay-VER.a(*)

1.4 依存ライブラリ

C-FAのPlayerAPIでは、Windows、Mac、iOSでOpenALを、AndroidでOpenSLを使用しています。WindowsでPlayerAPIを使用する場合、OpenALをインストールする必要があります。thirdpartyフォルダのoainst.exeを実行してインストールして下さい。Mac、iOS、Androidでは標準でライブラリがインストールされています。

2. オーサリング

2.1 エンコード設定

エンコーダで設定できる項目を以下に示します。

オプション 機能

--input , -i

入力ファイルを指定します。

WAVEファイル(.wav)を指定して下さい。

--output , -o

出力ファイルを指定します。

拡張子はcfa(.cfa)に指定して下さい。

--quality , -q

音質を1~21で指定します。

大きいほど高音質です。デフォルト値は5です。

--seekpoint , -s

シークポイントをサンプル単位で指定します。

シークポイントを設定した位置へのシークは高速になります。

--autoloop , -a

指定するとPlayer APIで自動的にループするようになります。

--encryptionkey , -k

暗号鍵とnonceをつなげた16進数文字列で指定します。

指定しない場合は暗号化されません。

--loopbeginsample

ループ区間開始サンプルを指定します。

指定した位置はデコードライブラリで取得することができます。

--loopendsample

ループ区間終了サンプルを指定します。

指定した位置はデコードライブラリで取得することができます。

--generatekey, -g

16進数文字列の暗号鍵を生成します。エンコードは行われません。

--samplingrate, -r

出力サンプリング周波数[Hz]を指定します。

指定が無い場合は入力ファイルのサンプリング周波数と同じ値に設定されます。

2.2 エンコードの例

cfaenc_cを使用してcfaファイルを生成する例です。

コマンド例 解説

cfaenc_c -q 5 –i in.wav –o out.cfa

クオリティ値5 でin.wavをout.cfaに変換します。

cfaenc_c –s 10000 –i in.wav -o out.cfa

サンプル位置10000にシークポイントを設定して変換します。

2.3 デコード設定

デコーダで設定できる項目を以下に示します。

オプション 機能

--input , -i

入力ファイルを指定します。

CFAファイルを指定して下さい。

--output , -o

出力ファイルを指定します。

拡張子はwavにして下さい。

2.4 デコードの例

cfadec_cを使用してwavファイルを生成する例です。

コマンド例 解説

cfadec_c –i in.cfa –o out.wav

in.cfaをout.wavに変換します。

2.5 プレイヤーでの再生

.cfaファイルをamplayに関連付けることで再生可能です。

2.6 ビットレート

クオリティ値に対応する概算ビットレートは以下となります。なお、クオリティに対するビットレートは素材の特性により変動します。また、ビットレートは44.1kHzの素材をエンコードした場合の値です。

クオリティ値 サンプルビット数 モノラル(kbps) ステレオ(kbps) 補足
1 1.0 43 86
2 1.25 53 107
3 1.50 64 129
4 1.75 75 150
5 2.00 86 172 C-FA デフォルト値
6 2.25 96 193
7 2.50 107 215
8 2.75 118 236
9 3.00 129 258
10 3.25 139 279
11 3.50 150 301
12 3.75 161 322
13 4.00 172 344
14 4.25 183 366
15 4.50 193 387
16 4.75 204 409
17 5.00 215 430
18 5.25 226 452
19 5.50 236 473
20 5.75 247 495
21 6.00 258 516

2.7 サンプリングレート

C-FAが対応しているサンプリングレートとQ=5の場合の概算ビットレートは以下となります。

サンプリングレート(Hz) モノラル(kbps) ステレオ(kbps)
22050 43 86
32000 62 124
44100 86 172
48000 93 187

3. ライブラリのリンク

3.1 インタフェース定義のinclude

headerフォルダにあるcfadec.hおよびcfaplay.hをincludeします。

3.2 ライブラリのWindowsプロジェクトへのインポート

windowsフォルダにあるcfadec.libおよびcfaplay.libをアプリケーションにリンクします。windows/x86-x64フォルダにあるcfadec.dllをアプリケーションと同じフォルダに置きます。

3.3 ライブラリのMacプロジェクトへのインポート

macフォルダにあるcfadec.dylibをアプリケーションにリンクします。cfadec.dylibをパスの通った場所に配置します。

3.4 ライブラリのiOSプロジェクトへのインポート

使用するバックエンドに応じて、以下のライブラリをXcodeにドロップします。

バックエンド ライブラリ C++ Standard Library Enable Bitcode Framework

OpenAL

ios/cfadec-VER-xc7.a

ios/cfaplay-VER-xc7.a

libc++

対応

OpenAL

尚、Player APIを使用する場合は、OpenAL をLinked Frameworks and Librariesに登録する必要があります。cfaファイルはXcodeのSupportingFilesに登録します。

3.5 ライブラリのAndroid NDKプロジェクトへのインポート

Androidフォルダにあるcfadec-VER.aおよびcfaplay-VER.aをアプリケーションにリンクします。

各ライブラリのビルド設定は以下になります。

ライブラリ APP_PLATFORM APP_STL APP_CPPFLAGS

android/libcfadec-VER-gnustl_static.a

android-9

gnustl_static

-std=c++11

android/libcfaplay-VER-gnustl_static.a

android-9

gnustl_static

-std=c++11

android/libcfadec-VER-stlport_static.a

android-9

stlport_static

-std=c++11

android/libcfaplay-VER-stlport_static.a

android-9

stlport_static

-std=c++11

Application.mkには以下のような記述を行って下さい。

APP_OPTIM := release
APP_ABI := armeabi-v7a
APP_PLATFORM := android-10
APP_STL := gnustl_static

Android.mkには以下のような記述を行って下さい。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
ARMEABI := armeabi-v7a

LOCAL_MODULE    := libcfadec-st
LOCAL_SRC_FILES := ../../static_lib_dec/obj/local/$(ARMEABI)/libcfadec.a
include $(PREBUILT_STATIC_LIBRARY)

LOCAL_MODULE    := libcfaplay-st
LOCAL_SRC_FILES := ../../static_lib_play/obj/local/$(ARMEABI)/libcfaplay.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_CFLAGS += -DANDROID -DNDEBUG
LOCAL_CPPFLAGS += -I ../../../../export -fvisibility=hidden

LOCAL_CPPFLAGS += -fexceptions
LOCAL_MODULE    := libcfadecplay

LOCAL_ARM_MODE	:= arm
LOCAL_ARM_MODE	:= thumb

LOCAL_SRC_FILES	+= jni.cpp main.cpp

LOCAL_LDLIBS            :=  -lm -lz -llog -ldl -lOpenSLES

LOCAL_STATIC_LIBRARIES  := cpufeatures libcfaplay-st libcfadec-st

include $(BUILD_SHARED_LIBRARY)

$(call import-module,cpufeatures)

libcfaplay.aの前にlibcfadec.aをリンクした場合、undefined reference to 'cfadCreate'というリンクエラーが発生する場合があります。その場合、libcfaplay.aの後にlibcfadec.aをリンクして下さい。

4. Decoder API

4.1 Decoder APIとは

Decoder APIでは、cfaファイルからPCMを取得することができます。

4.2 インタフェース定義

インタフェース仕様はcfadec.hに記載されています。

4.3 デコードサンプル

次の例では、iOSリソースのsample.cfaから音声をデコードします。

#include "cfadec.h"
NSString *path=[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"cfa"];

struct CFADecoder *dec;
int ret=cfadCreate(&dec);
if(ret!= CFADEC_STATUS_SUCCESS) { //エラー }

ret=cfadOpenStreamFile(dec,[path cStringUsingEncoding:1]);
if(ret!= CFADEC_STATUS_SUCCESS) { //エラー }

cfadStreamInfo info;
ret=cfadGetStreamInfo(dec,&info,RM5DEC_MOVIE_INFO_VERSION);
if(ret!= CFADEC_STATUS_SUCCESS) { //エラー }

std::vector pcm(info.samples*info.channels);

int ret=cfadDecode(dec,&pcm[0],pcm.size()*sizeof(short),0,info.samples);
if(ret!= CFADEC_STATUS_SUCCESS) { //エラー }

cfadDestroy(dec);

4.4 サンプルプログラム

Decoder APIのサンプルプログラムは sample/decoder.cpp を参照して下さい。

5. Player API

5.1 Player APIとは

Player APIでは、cfaファイルから直接再生することができます。
Androidの場合はOpenSLが、それ以外ではOpenALが使用されます。

5.2 インタフェース定義

インタフェース仕様はcfaplay.hに記載されています。

5.3 再生の例

次の例では、iOSリソースのsample.cfaから音声を再生します。

#include "cfaplay.h"
ret=cfapInitialize(CFAPLAY_BUFFER_SIZE_DEFAULT);
if(ret!= CFAPLAY_STATUS_SUCCESS) { //エラー }

NSString *path=[[NSBundle mainBundle] pathForResource:@"sample" ofType:@"cfa"];

struct CFAPlayer *player;
int ret=cfapCreate(&player);
if(ret!= CFAPLAY_STATUS_SUCCESS) { //エラー }

ret=cfapOpenStreamFile(player,[path cStringUsingEncoding:1]);
if(ret!= CFAPLAY_STATUS_SUCCESS) { //エラー }

int ret=cfapPlay(player);
if(ret!= CFAPLAY_STATUS_SUCCESS) { //エラー }

cfapDestroy(player);

cfapUninitialize();

5.4 仮想トラック

仮想トラックを使用することで、物理デバイスの上限再生数を超える音声を再生することができます。仮想トラックはデフォルトの物理トラックに比べて、再生遅延が大きくなります。仮想トラックを使用するには、cfapInitializeの後にcfapInitializeVirtualTrackを呼んだ後、cfapCreateVirtualTrackでプレイヤインスタンスを作成します。以降の操作は物理トラックと共通です。

#include "cfaplay.h"
ret=cfapInitialize(CFAPLAY_BUFFER_SIZE_DEFAULT);
if(ret!= CFAPLAY_STATUS_SUCCESS) { //エラー }

ret=cfapInitializeVirtualTrack(CFAPLAY_VIRTUAL_TRACK_BUFFER_SIZE_DEFAULT);
if(ret!= CFAPLAY_STATUS_SUCCESS) { //エラー }

NSString *path=[[NSBundle mainBundle] pathForResource:@”sample” ofType:@”cfa”];

struct CFAPlayer *player;
int ret=cfapCreateVirtualTrack(&player);
if(ret!= CFAPLAY_STATUS_SUCCESS) { //エラー }

ret=cfapOpenStreamFile(player,[path cStringUsingEncoding:1]);
if(ret!= CFAPLAY_STATUS_SUCCESS) { //エラー }

int ret=cfapPlay(player);
if(ret!= CFAPLAY_STATUS_SUCCESS) { //エラー }

cfapDestroy(player);

cfapUninitialize();

5.5 ユーザ定義コールバックの使用

cfapOpenStreamExを使用することで、ユーザ定義のコールバック関数(fopen/fread/ftell/fseek/fsize/fclose)を使用することができます。コールバック関数の定義は、cfacall.hを参照して下さい。

5.6 サンプルプログラム

Player APIのサンプルプログラムは sample/player.cpp を参照して下さい。

6. JavaScript API

6.1 JavaScript APIとは

JavaScript APIを使用することで、ブラウザ上でcfaファイルを再生することができます。

6.2 インタフェース定義

インタフェース仕様はlibrary/js/cfa.d.tsに記載されています。

6.3 プロジェクトへのインポート

library/js/cfa.min.jsを読み込んで下さい。

<script src='cfa.min.js'></script>

6.4 再生の例

次の例では、test.cfaをUint8Arrayに読み込んだ後、C-FAに与えることで音声を再生します。

var player=null;
window.onload = function(){
	CFAPlay.initialize();

	var req = new XMLHttpRequest();
	req.open('get', './test.cfa', true);
	req.responseType="arraybuffer";

	req.onload = function(ev) {
		player = new CFAPlay();
		var data = new Uint8Array(req.response);
		player.open(data);
		player.play();
	};
	req.send(null);
};
window.onunload = function(){
	if(player!==null){
		player.close();
		player=null;
	}
};

6.5 Chrome66の制約

Chrome66の場合、AudioContextの生成はクリックイベントの中で実行する必要があります。クリックイベントの中でCFAPlay.initialize()を実行するか、onloadでCFAPlay.initialize()を実行後、クリックイベントの中でCFAPlay.getAudioContext().resume()を実行して下さい。

6.6 iOSの制約

iOSの場合、初回の音声再生はタップイベントの中で実行する必要があります。その場合、open APIおよびplay APIをタップイベントの中で実行して下さい。以降は、ゲームループの中で音声を再生することができます。

6.7 サンプルプログラム

JavaScript APIのサンプルプログラムは sample/jsapi.html を参照して下さい。

7. JNI Plugin

7.1 JNI Pluginの概要

JNI Pluginは、C-FAをJAVAプログラムから呼び出すためのAndroid SDK向けプラグインです。C-FAのネイティブライブラリと、インタフェース定義JAVAファイルから構成されます。

7.2 プロジェクトへのインポート

jniフォルダのlibs/*とsrc/axell/*をAndroid SDKプロジェクトにインポートして下さい。

7.3 音声ファイルのインポート

エンコードした.cfaファイルをプロジェクトのres/rawにインポートして下さい。

7.4 再生の例

APIの仕様は src/axel/cfa/CFAPlayer.java に記載しています。
次の例では、SDカードに格納したtest.cfaを再生します。

CFAPlayer.cfapInitialize(BUFFER_SIZE);
m_instance_audio=CFAPlayer.cfapCreate("/sdcard/test.cfa");
CFAPlayer.cfapPlay(m_instance_audio);
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
CFAPlayer.cfapDestroy(m_instance_audio);
CFAPlayer.cfapUninitialize();

7.5 サンプルプログラム

jni/src/user/cfaplaysample/CFAPlaySampleActivity.java にC-FAで音声を再生するサンプルプログラムが含まれています。

8. Unity Plugin

8.1 Unity Pluginの概要

Unity Pluginは、C-FAをUnityから呼び出すためのプラグインです。C-FAのネイティブライブラリと、インタフェース定義C#ファイルから構成されます。具体的に、CFADecoder.csおよびCFAPlayer.csに定義されたインタフェースから、ネイティブライブラリのC++ APIを呼び出します。
また、Unityから簡単に音を鳴らすためのCFAAudioクラスも付属します。CFAAudioクラスでは、CFAPlayerクラスを使用して、StreamingAssetsフォルダの.cfaファイルを簡単な操作で再生することができます。
Unity Pluginは、Windows、Mac、Android、iOS、WebGLに対応します。

C-FA Unity Pluginの概要

8.2 プラグインのUnityプロジェクトへのインポート

unity/Assetsフォルダを、任意のUnityプロジェクトのAssetsフォルダにコピーして下さい。再生したいcfaファイルをStreamingAssetsフォルダにコピーして下さい。

8.3 Decoder API、Player API

Unity Pluginでは、C++ APIと共通のAPIが定義されています。APIの使用方法は、C++ APIの項目を参照して下さい。

8.4 Audio API

Audio APIはUnity向けの高レベルな再生APIです。APIの一覧を以下に示します。

初期化API
API 引数 返値 説明

Initialize()

-

成功時はtrue、失敗時はfalse

デバイスを初期化します。最初のファイルの再生を開始する前に、一度だけ呼び出す必要があります。

InitializeVirtualTrack()

-

成功時はtrue、失敗時はfalse

仮想トラックを初期化します。仮想トラックを使用する前に、一度だけ呼び出す必要があります。

Uninitialize()

-

-

デバイスを解放します。全てのファイルの再生が終了してから呼び出す必要があります。

再生制御API
API 引数 返値 説明

Open(file_name,key)

file_name : string

key : string

成功時はtrue、失敗時はfalse

cfaファイルを開きます。第二引数の暗号鍵は省略可能です。

Open(buf,key)

buf : byte[]

key : string

成功時はtrue、失敗時はfalse

cfaファイルをメモリから開きます。第二引数の暗号鍵は省略可能です。

Open(fopen_args,callback,key)

fopen_args : intptr

callback : cfaCallback

key : string

成功時はtrue、失敗時はfalse

cfaファイルをコールバックから開きます。第三引数の暗号鍵は省略可能です。WebGLには非対応です。

OpenOrAdd(file_name,offset,handle)

file_name : string

offset : int

handle : ref int

成功時はtrue、失敗時はfalse

cfaファイルを開くもしくは追加します。同時に再生遅延の設定および追加したcfaファイルのハンドルを得ます。

OpenOrAdd(buf,offset,handle)

buf : byte[]

offset : int

handle : ref int

成功時はtrue、失敗時はfalse

cfaファイルを開くもしくは追加します。同時に再生遅延の設定および追加したcfaファイルのハンドルを得ます。

OpenOrAdd(fopen_args,callback,offset,handle)

fopen_args : intptr

callback : cfaCallback

offset : int

handle : ref int

成功時はtrue、失敗時はfalse

cfaファイルをコールバックから開くもしくは追加します。同時に再生遅延の設定および追加したcfaファイルのハンドルを得ます。WebGLには非対応です。

Close()

-

-

cfaインスタンスを解放します。C#のデストラクタはGCまで遅延するため、明示的に呼び出す必要があります。

VirtualTrack(enable)

enable : bool

成功時はtrue、失敗時はfalse

引数にtrueを与えることで、このインスタンスを仮想トラックに割り当てます。Openを呼び出す前に設定する必要があります。

Play()

-

成功時はtrue、失敗時はfalse

音声を再生します。再生に失敗した場合はfalseを返します。

Stop()

-

-

再生を停止します。

Fade(time,volume)

time : float

volume : float

成功時はtrue、失敗時はfalse

指定した時間で指定したボリュームに遷移します。

Fadeout(time)

time : float

成功時はtrue、失敗時はfalse

指定した時間でフェードアウト後に再生を停止します。

Transition(control_type,time,target)

control_type : int

time : float

target : float

成功時はtrue、失敗時はfalse

指定した時間で指定したパラメータへの遷移を行います。control_typeにはCFAPLAY_CONTROL_TYPE_*を与えます。targetには遷移先のパラメータを与えます。

Seek(sample)

sample : uint

成功時はtrue、失敗時はfalse

指定したサンプル番号にシークします。

再生設定API
API 引数 返値 説明

Loop(sample)

sample : uint

成功時はtrue、失敗時はfalse

ループ再生時のサンプル数を指定します。-1を指定するとループしません。デフォルト値は-1です。互換性のために存在するAPIであり、新規利用は非推奨です。

LoopStart(sample)

sample : uint

成功時はtrue、失敗時はfalse

ループ再生時の開始サンプルを指定します。-1を指定するとループしません。デフォルト値は-1です。

LoopEnd(sample)

sample : uint

成功時はtrue、失敗時はfalse

ループ再生時の終端サンプルを指定します。デフォルト値はストリームサンプル数です。

LoopCount(uint loop_count)

loop_count : uint

成功時はtrue、失敗時はfalse

ループ回数を指定します。デフォルト値は無限ループです。

Pitch(pitch)

pitch : float

成功時はtrue、失敗時はfalse

再生速度を変更します。有効範囲は0.5~2.0です。

Volume(vol)

vol : float

成功時はtrue、失敗時はfalse

音量を変更します。有効範囲は0〜1です。

StreamVolume(handle,vol)

handle : int

vol : float

成功時はtrue、失敗時はfalse

指定したハンドルの音量を変更します。有効範囲は0〜1です。

Panning(pan)

pan : float

成功時はtrue、失敗時はfalse

定位を変更します。有効範囲は-1〜1です。

LowPass(khz)

khz : float

成功時はtrue、失敗時はfalse

ローパスフィルタを設定します。有効範囲は0.02~20です。20より大きな値を設定するとフィルタリングが行われません。

HighPass(khz)

khz : float

成功時はtrue、失敗時はfalse

ハイパスフィルタを設定します。有効範囲は0.02~20です。20より大きな値を設定するとフィルタリングが行われません。

情報取得API
API 引数 返値 説明

CurrentPosition()

-

float

音声の再生位置を秒数で返します。

Playing()

-

再生中はtrue,再生していない場合はfalse

再生しているかどうかを取得します

Pausing()

-

一時停止中はtrue,一時停止していない場合はfalse

一時停止しているかどうかを取得します。

Volume()

-

float

現在のボリュームを取得します。

Info()

-

成功時はストリーム情報構造体、失敗時はnull

開いているストリームの情報をcfapStreamInfo構造体で返します。

LoopInfo()

-

成功時はループ情報、失敗時はnull

開いているストリームのループ情報をcfapLoopInfo構造体の配列で返します。

Status()

-

ステータスコード

直前に実行したAPIのステータスコードを返します。

エラー情報取得API
API 引数 返値 説明

Error()

-

エラーコード

再生中にエラーが発生した場合はCFAPLAY_STATUS_SUCCESS以外のエラーコードを返します。

ErrorDetail()

-

エラー詳細

発生したエラーの詳細を文字列で返します。

InitializeErrorDetail()

-

エラー詳細

デバイスの初期化で発生したエラーの詳細を文字列で返します。

イベントコールバックAPI
API 引数 返値 説明

AddEventCallback(callback,event_type,arg)

callback : delegate

event_type : int

arg : IntPtr

成功時はtrue、失敗時はfalse

指定した条件で呼び出されるイベントコールバックを追加します。event_typeにはCFAPLAY_EVENT_TYPE_*を与えます。WebGLには非対応です。

RemoveEventCallback(callback,event_type)

callback : delegate

event_type : int

成功時はtrue、失敗時はfalse

イベントコールバックを削除します。WebGLには非対応です。

8.5 ストリーム情報構造体

Info APIで取得できる情報の一覧です

cfaStreamInfo 構造体
メンバ 説明
stream_size ストリームサイズ(バイト単位)
channels チャンネル数
samples チャンネル単位のサンプル数
sampling_rate サンプリング周波数
frames フレーム数
quality エンコード時に設定したクオリティ値
bitdepth サンプルあたりのビット数
max_seekpoint_no 使用しているシークポインごとの番号の最大(0〜CFADEC_SEEKPOINT_MAX-1)
loop_info_no ループ情報の個数
flag フラグ
stream_type ストリームタイプ CFADEC_STREAM_TYPE_*

8.6 ループ情報構造体

LoopInfo APIで取得できる情報の一覧です

cfaStreamInfo 構造体
メンバ 説明
start_sample ループ開始サンプル
end_sample ループ終了サンプル

8.7 デコードサンプル

次の例では、StreamingAssetsフォルダに置いたbgm.cfaを再生します。

private CFAAudio audio;
public Start(){
  CFAAudio.Initialize()
  audio=new CFAAudio();
  audio.Open(Application.streamingAssetsPath+"/bgm.cfa");
  audio.Play();
}
public OnApplicationQuit(){
  audio.Stop();
  CFAAudio.Uninitialize();
}

8.8 制約事項

Unity の Audio API との競合を避けるため、Edit -> Project Settings -> Audio から AudioManager を開き、Inspector内のDisable Audio にチェックを入れて下さい。また、Camera に付加されている AudioListener のチェックを外して下さい。Unity のスレッドの解放との競合を避けるため、CFAAudio.Uninitialize は OnApplicationQuit で呼び出して下さい。

8.9 Androidにおけるバックグラウンド処理

Android の場合、アプリケーションがバックグラウンドに移った場合も再生が停止しません。そのため、以下のように、OnApplicationPause で一時停止を行う必要があります。


void OnApplicationPause (bool pauseStatus)
{
  if (pauseStatus){
    for(int i=0; i < CFA_AUDIO_MAX; i++ ){
      if(cfa[i] != null && cfa[i].Playing()){
        cfa[i].Pause();
      }
    }
  } else {
    for(int i=0; i < CFA_AUDIO_MAX; i++ ){
      if(cfa[i] != null && cfa[i].Pausing()){
        cfa[i].Play();
      }
    }
  }
}
          

8.10 リンクエラーへの対策

iOSおよびAndroidでリンクエラーが発生する場合、以下の二点を確認して下さい。

1) iOSでScripting BackendにMonoを指定している場合、_cfapOpenStreamFileでリンクエラーが発生 することがあります。その場合、Scripting BackendをIL2CPPに指定して下さい。Monoで動作させる必要がある場合はCFAPlay er.csを書き換えることで、_cfapOpenStreamFileAを直接呼び出して下さい。

2) Pluginをインポートした際、Plugins/[x86,x86_64]/cfadecおよびPlugins/[x86,x 86_64]/cfaplayをInspectorで参照すると、Any Platformに設定されている場合があります。その場合、Include PlatformsをEditor + Standaloneに設定して下さい。

8.11 WebGLへの書き出し

WebGLで書き出したアプリケーションの実行にはcfa.min.jsが必要です。WebGLへの書き出し後にhtmlファイルを書き換えることでcfa.min.jsを読み込ませるか、Player Settingsにおいて、同梱のWebGLTemplatesを使用して下さい。

8.12 サンプルプログラム

Assets/CFASample.csを任意のゲームオブジェクトにアタッチして下さい。
自動的に、Assets/StreamingAssets/*.cfaが再生されます。
サンプルプログラムではAndroidを考慮し、WWWクラス経由でcfaファイルを再生します。
Windows、Mac、iOSではFile APIを使用することも可能です。