DS開発を簡単にするためのライブラリ。このライブラリが無いとメモリの何番地に値を格納して云々といったことをやらねばならい。このライブラリがあるおかげでずいぶんとDS開発は楽に進めることができます。ただ、日本語の資料は皆無と言ってもいいほどなのでハマってしまうとなかなか抜け出せない危険があります。
リンク
このページのPAlibのバージョンは 090801を使っています。またDevkitProは1.5.0を使っています。
画像の表示方法はspriteと3Dspriteがあります。
Spriteは表示のサイズが限られています。
8 | 16 | 32 | 64 | |
---|---|---|---|---|
8 | 8×8 | 16×8 | 32×8 | |
16 | 8×16 | 16×16 | 32×16 | |
32 | 8×32 | 16×32 | 32×32 | 64×32 |
64 | 32×64 | 64×64 |
「PAlib」->「tools」->「PAGfx」というソフトを使って、Cソースコードを吐き出します。これを使うと以下のようなファイル群を吐き出します。(このときタブはSpritesを選択してください)
all_gfx.c | オブジェクトファイルにする時につかう | ソースを直接埋め込むときには使わない |
all_gfx.h | 以下のファイルの宣言とサイズの定義 | ソースを直接埋め込むなら、ソース中でこのファイルをインクルードする。 |
<画像ファイル名>.c | 画像データの本体データが入っている。 | ソースを直接埋め込むなら、これを一緒にコンパイル・リンクする。 |
<画像ファイル名>.pal.c | パレットデータが入っている | ソースを直接埋め込むなら、これを一緒にコンパイル・リンクする。 |
まず使いたいところで#include"all_gfx.h"します。(もちろんall_gfx.h等をプロジェクトと同じフォルダに移動させておいてください)そして、コンパイル・リンクするものに<画像ファイル名>.cと<画像ファイル名>.pal.cを追加します。
PA_LoadSpritePalを使ってパレットをロードする。
PA_LoadSpritePal(0, // スクリーン番号下のディスプレイなら0,上にのディスプレイなら1を表示 0, //パレットの番号(スプライトの作成時に同じ番号を指定) (void*)sprite0_Pal); // パレットへのポインタ
*パレットへのポインタはPAGfxでスプライを作成した場合は「スプライト名_Pal」となる。
PA_CreateSprite(0, //スクリーン番号 0, //スプライト番号(すべてのスプライトに被らないように番号をつければ良い) (void*)sprite0_Sprite, // 画像本体へのポインタ OBJ_SIZE_32X32, // スプライトのサイズ 1, // 16色なら0,256色なら1 0, //パレット番号を指定 50, 50); //スクリーン上の位置をx,yで指定(左上が0,0)
これらの関数が実際どのように使われるのかということは、PAlibのサンプルを見るとよりわかりやすいだろう。(PAlibでのこれらの関数のサンプル「examples」->「Sprites」->「basic」->「CreateSprite」)
大まかに見るとやることは通常のSpriteとほとんど同じです。 3DSprite上に貼る絵のことを「テクスチャ」と呼びます。PAGfxで3DSprite用の画像を作るときはTextureを選択してください。その後の生成されるファイルは同様なので.cファイルをコンパイル・リンクし、.hをインクルードしてください。
とりあえず初期化が必要です。
PA_Init3D(); //3Dspriteの初期化 PA_Reset3DSprites(); //3Dsprite達の初期化またはリセット
次にテクスチャのロード
u16 gfx = PA_3DCreateTex((void*)mollusk_Texture, // テクスチャデータへのポインタ 64, 64, // 画像のサイズWidth, Height TEX_256COL ); // テクスチャのフォーマット
返値はテクスチャを貼りつけるときに必要なので保存しておく。
テクスチャのフォーマットの種類
TEX_A3I5 | アルファ8段階、32色 |
TEX_A5I3 | アルファ8段階、8色 |
TEX_4COL | 4色 |
TEX_16COL | 16色 |
TEX_256COL | 256色 |
TEX_16BITS | 16ビットカラー(65536) |
次にテクスチャのパレットロード
PA_Load3DSpritePal(0, // パレットの番号 (void*)mollusk_Pal); // パレットデータへのポインタテクスチャのフォーマット
実際に作る
PA_3DCreateSpriteFromTex(0, // スプライト番号(被らないように値をつければいい) gfx, // PA_3DCreateTexの返値(テクスチャの判別) 64, 64, // スプライトのサイズWidth, Height 0, // パレット番号 32, 32); // スプライトの中心X,Y
更新する
PA_3DProcess();//これをループ内で実行する
wavファイルを直接再生することはPAlibでは対応していないようなのでrawファイルというものに変換します。 rawファイルとは、wavファイルから余分な情報を取り除いたもので音の情報がそのまま配列のように格納されています。したがって、サンプリング周波数などがわからないので変換する際に揃えてやる必要があります。 ここでは以下のようにする
チャンネル: モノラル1チャンネル
.rawファイルの作成にはどのようなソフトを使っても構いません。(Switch Sound File Converterを紹介しておきます。)その後、そのまま.rawファイルをリンクする方法もありますが、どうせなら画像と同様に.cファイルにしてほかと一緒にコンパイル・リンクできるようにしてしまいたいと思い、.rawから.cのコンバータを作りました。
ダウンロード初期化
AS_Init(AS_MODE_SURROUND | AS_MODE_16CH);//モード AS_SetDefaultSettings(AS_PCM_8BIT,//フォーマット 11025,//サンプリング周波数(Hz) AS_SURROUND);//delay(遅れ)
フォーマットの種類
AS_PCM_8BIT | PCM方式の8bit |
AS_PCM_16BIT | PCM方式の16bit |
AS_ADPCM | ADPCM方式 |
モードの種類(|(or)で重複可)
AS_MODE_MP3 | MP3を使う |
AS_MODE_SURROUND | サラウンドを使う |
AS_MODE_16CH | 16chすべてを使う |
AS_MODE_8CH | 8chだけを使う |
delay(遅れた波形と元の波形を合わせて音に立体感を出す手法)
AS_NO_DELAY | 遅れなし |
AS_SURROUND | 遅れあり(16ms) |
AS_REVERB | リバーブ(66ms) |
実際に再生する(ただし、メモリ上にロードするのであまり長い音は再生できない)
AS_SoundQuickPlay(sfx); //再生する波形データ
返値はその時使用したチャンネル番号
mp3も読み込みに関してはrawのときとほぼ同じです。
同様に、.mp3から.cのコンバータを作りました。
ダウンロードソースの方も示します。まず、初期化
fatInitDefault();//FATの初期化 AS_Init(AS_MODE_MP3 | AS_MODE_SURROUND | AS_MODE_16CH);//モード AS_SetDefaultSettings(AS_PCM_8BIT,11025,AS_SURROUND);
再生
AS_MP3DirectPlay((u8*)out, (u32)out_size);//データ本体とデータのサイズを指定 AS_MP3StreamPlay("/out.mp3");//ストリーム再生(これをしないとメモリが無くなったところで止まってしまう)
停止
AS_MP3Stop();
(PAlibでのこれらの関数のサンプル「examples」->「Sound」->「ASlib」->「ASlib_General」)