--[[ wav,ogg再生サンプル L1を押すとwavとoggを切り替えます ○×△□ボタンで対応するデータを再生 上下左右で対応するoggを停止 ]] function Initialize() SetWorldSize(1024, 1024) SetViewSize(480, 272) SetViewPos(0, 0) SetDrawSize(480, 272) SetDrawPos(0, 0) -- 描画システムの初期化 GraphicInitialize( 1, -- SCREEN_MODE_REALSIZE (0) -- PCとPSPの区別をつけず、座標とサイズをそのまま適用 -- SCREEN_MODE_FIT_PSP (1) -- PSPを基準にしてPCでは座標系を倍のサイズとして処理をする -- SCREEN_MODE_FIT_PC (2) -- PCを基準にしてPSPでは座標系を半分のサイズとして処理をする 0, -- テクスチャデータの扱いかた -- TEXTURE_MODE_REALSIZE (0) -- テクスチャをPSPでもそのまま読み込む -- TEXTURE_MODE_SHRINK (1) -- テクスチャをPSPでは半分のサイズにして読み込む 11, -- 64サイズのテクスチャ使用枚数 0, -- 128サイズのテクスチャ使用枚数 0, -- 256サイズのテクスチャ使用枚数 0, -- 512サイズのテクスチャ使用枚数 0, -- 1024サイズのテクスチャ使用枚数 1, -- フォントの使用種類数 0) -- アニメデータの使用数 font = LoadFontSprite("test") -- 描画先 DRAW_TO_WORLD = 0 DRAW_TO_VIEW = 1 DRAW_TO_SCREEN = 2 -- ボタンの状態 BUTTON_STATUS_NO = (-1) -- 押していない BUTTON_STATUS_PUSH = (0) -- 押した瞬間 BUTTON_STATUS_HOLD = (1) -- 押している BUTTON_STATUS_PULL = (2) -- 離した瞬間 -- ボタン番号 BUTTON_NUMBER_NONE =0 BUTTON_NUMBER_L1 =1 BUTTON_NUMBER_L2 =2 BUTTON_NUMBER_R1 =3 BUTTON_NUMBER_R2 =4 BUTTON_NUMBER_SELECT =5 BUTTON_NUMBER_START =6 BUTTON_NUMBER_TRIANGLE =7 BUTTON_NUMBER_SQUARE =8 BUTTON_NUMBER_CROSS =9 BUTTON_NUMBER_CIRCLE =10 BUTTON_NUMBER_UP =11 BUTTON_NUMBER_DOWN =12 BUTTON_NUMBER_RIGHT =13 BUTTON_NUMBER_LEFT =14 BUTTON_NUMBER_MAX =15 -- 初期化 ogg1, ogg2, ogg3, ogg4, wav1, wav2, wav3, wav4 = 0,0,0,0, 0,0,0,0 -- ファイルの読み込み -- LoadOggはmusicフォルダにあるoggを読み込み -- LoadWavはsoundフォルダにあるwavを読み込みます -- 第二引数のomMemoryはtrueを与えるとファイルをメモリ上へ読み出して使用します -- PSPのときだけ有効です、Winではseleneの仕様に準じるので引数は無視されます。ストリームで読み込む気がします -- falseを与えると逐次ファイルから情報を読み出します -- メモリ上にあるほうがファイルアクセスが無いのでフラッシュメモリに優しいけれども遅延の心配があります -- PSPはメモリが少ないのでファイルサイズに注意してください -- falseを選んで同時に開けるファイル数は8ぐらいです -- 音データを開放するには -- DeleteSound(ogg1) -- のように開放したいデータの番号を与えます -- -- oggファイル、wavファイルは各自で用意してください -- -- ogg1-4,wav1-4はそれぞれ管理番号が入る onMemory = false ogg1 = LoadOgg("ogg1.ogg", onMemory) ogg2 = LoadOgg("ogg2.ogg", onMemory) ogg3 = LoadOgg("ogg3.ogg", onMemory) ogg4 = LoadOgg("ogg4.ogg", onMemory) onMemory = true wav1 = LoadCheckWav("wav1.wav", onMemory) wav2 = LoadCheckWav("wav2.wav", onMemory) wav3 = LoadCheckWav("wav3.wav", onMemory) wav4 = LoadCheckWav("wav4.wav", onMemory) -- wav再生モードとogg再生モードを表すフラグ wavorogg = 0 return end --[[ LoadOggは読み込みに失敗すると0が帰ってくるが LoadWavはエラー内容によって値が違うので エラー時は全部まとめて0にしてしまう プログラム中で0にしておく理由がなければ必要のない関数なので記述しなくてかまいません ]] function LoadCheckWav(file, onMemory) -- wavの読み込み local ret = LoadWav(file, onMemory) if (ret <= 0) then -- 読み込みに失敗したら0以下の数値が返ってくる -- 理由はともかく0にしておく return 0 end return ret end --[[ 毎フレームこの関数がシステムから呼び出される ]] function MainLoop() -- 現在のキー入力を取得する PadRefresh() PadUpdate(0) -- キーの状態を取得する Input = {GetPadStatus()} operate(Input[BUTTON_NUMBER_CIRCLE], wav1, ogg1) operate(Input[BUTTON_NUMBER_CROSS], wav2, ogg2) operate(Input[BUTTON_NUMBER_SQUARE], wav3, ogg3) operate(Input[BUTTON_NUMBER_TRIANGLE], wav4, ogg4) StopOgg(Input[BUTTON_NUMBER_RIGHT], ogg1) StopOgg(Input[BUTTON_NUMBER_DOWN], ogg2) StopOgg(Input[BUTTON_NUMBER_LEFT], ogg3) StopOgg(Input[BUTTON_NUMBER_UP], ogg4) -- wavとoggを切り替える if (Input[BUTTON_NUMBER_L1] == 0) then wavorogg = 1 - wavorogg -- 1と0の切り替え処理「1-0=1 1-1=0」なのです end -- wav/oggの表示 if (wavorogg == 0) then DrawFsTextLeft(font, 0, 0, 0, "WAV", 0, DRAW_TO_SCREEN) else DrawFsTextLeft(font, 0, 0, 0, "OGG", 0, DRAW_TO_SCREEN) end -- Win/PSPのどちらで実行しているか -- GetMachineType -- if (GetMachineType() == "Windows") then DrawFsTextLeft(font, 100, 0, 0, "Win", 0, DRAW_TO_SCREEN) else DrawFsTextLeft(font, 100, 0, 0, "PSP", 0, DRAW_TO_SCREEN) end if (SoundIsPlaying(ogg1)==1) then DrawFsTextLeft(font, 0, 60, 0, "play", 0, DRAW_TO_SCREEN) else DrawFsTextLeft(font, 0, 60, 0, "pause", 0, DRAW_TO_SCREEN) end return end --[[ ファイル再生、停止、一時停止の操作 ]] function operate(button, wavID, oggID) if (button == BUTTON_STATUS_PUSH) then if (wavorogg == 0) then -- wavの再生 -- SoundPlay(no, loop, priority) -- 引数 -- no -- 管理番号 -- loop -- 1:ループ再生 -- 0:ループせず終了 -- priority -- 演奏優先度 -- PSPの同時再生は4音までなので、5音目からはこの優先度が低いものが消されていく -- Winでは読み捨てます -- SoundPlay(wavID, 0, 0) else -- oggの再生 -- 対象データが再生中か調べる -- playing = SoundIsPlaying(no) -- 引数 -- no -- 対象データ -- 戻り値 -- 0:対象データは停止中 -- 1:対象となるデータが再生中(一時停止中も再生中とみなされるので1が返ってくる) -- if (SoundIsPlaying(oggID)==1) then -- 再生と一時中断を切り替える -- SoundPause(no) -- 引数 -- no -- 対象データの番号 SoundPause(oggID) else -- 未再生なので再生開始 SoundPlay(oggID, 1, 0) end end end return end --[[ 再生停止処理 ]] function StopOgg(button, oggID) if (button == BUTTON_STATUS_PUSH) then -- 再生を停止させる -- SoundStop(no) -- 引数 -- no -- 対象データの番号 -- SoundStop(oggID) end return end