2009年3月22日日曜日
むむむ・・・
PlaySoundMem
StopSoundMem
LoadStreamSound
PlayStreamSound
StopStreamSound
これらの関数の実装が完了したら次のバージョンを出そうと思います。本家の音楽再生関数は何度かの機能追加のせいで直感的でなくなってきていると感じていたので、すこし仕様を変えました。Streamが付いているか付いていないかで動作がそれなりに異なります。
関数名にStreamが無い関数群は、LoadSoundMem関数を読んだ時点でデータが完全にメモリ上に展開されます。再生時の負荷も小さく、一つのデータを複数並列して再生することも可能です。そのかわり、メモリを食ってしまうので長くても1分程度が限界となります。
関数名にStreamが付いているグループでは再生時に必要な部分だけをメモリに展開します。メモリースティックに常にアクセスし、デコードするので処理が若干重いです。一つのデータを同時に並列して再生することもできません。そのかわり、メモリは極力節約する仕様になっているのでBGM再生などに使えると思います。
なるべくシンプルな関数群になるよう気を配っていきたいと思います。
2009年3月11日水曜日
音楽再生
音楽再生機能の再構成作業を目下作業中です。
ストリーム再生と通常再生の実装をうまいことかみ合わせるのが難しいですね・・・
そろそろ部分的にソースコードを開示していこうかと思っています。まだ汚いソースコードですが、だいぶマシになったので。
/*
* DXライブラリPortable 入力管理部 Ver1.00
* 製作者 :夢瑞憂煉
*
* 備考 :
* 占有メモリの目安はおよそ40Byteです。
*/
#include <pspctrl.h>
#include "dxlibp.h"
int InitInput(); /*初期化*/
int RenewInput(); /*更新*/
int GetInputState(); /*取得*/
int GetAnalogInput(int *XBuf,int *YBuf);/*アナログデータの取得*/
static struct SceCtrlData CtrlData; /*入力データ RenewInputで更新される*/
int InitInput()
{
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
return 0;
}
int RenewInput()
{
return sceCtrlReadBufferPositive(&CtrlData,1) < 0 ? -1 : 0;
}
int GetInputState()
{
return CtrlData.Buttons;
}
int GetAnalogInput(int *XBuf,int *YBuf)
{
*XBuf = CtrlData.Lx * 7.8125;
*YBuf = CtrlData.Ly * 7.8125;
return 0;
}
入力の受付はこれだけです。GetInputState関数を呼ぶたびに入力を再取得してしまうと処理が重くなるだけでなく、プログラマの意図しない動作を起こしやすくなるのでRenewInput関数で取得した値を保持し、それをGetXXXX関数でそのまま返すようになっています。
・・・この辺りは何のヒネリもないです。