nuausndplayerplay.c
2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*======================================================================*/
/* NuSYS */
/* nuausndplayerplay.c */
/* */
/* Copyright (C) 1997, NINTENDO Co,Ltd. */
/* */
/*======================================================================*/
/* $Id: nuausndplayerplay.c,v 1.1.1.1 2002/10/30 02:07:09 blythe Exp $*/
/*======================================================================*/
#include <nusys.h>
#include <nualsgi.h>
/*----------------------------------------------------------------------*/
/* nuAuSndPlayerPlay -サウンドの再生 */
/* IN: sndNo 再生するサウンドの番号 */
/* RET: 対象サウンドのID */
/* -1 = 再生出来なかった */
/*----------------------------------------------------------------------*/
ALSndId nuAuSndPlayerPlay(u32 sndNo)
{
ALBank* bank_ptr;
ALInstrument* inst;
u32 cnt;
bank_ptr = nuAuSndBank_ptr->bankArray[0];
inst = bank_ptr->instArray[0];
#ifdef NU_DEBUG
/* サウンド数のチェック */
if(inst->soundCount <= sndNo){
osSyncPrintf("nuAuSndPlayerPlay: sndNo %d is too big.\n", sndNo);
return -1;
}
#endif /* NU_DEBUG */
/* nuAuSndId テーブルを検索し、使っていない項目を探す */
for(cnt = 0; cnt < nuAuSndPlayer.maxSounds; cnt++){
if(nuAuSndId[cnt] == -1)
break;
else
{
/* 使っていないサウンドなら抹消し、その番号を使う */
alSndpSetSound(&nuAuSndPlayer,nuAuSndId[cnt]);
if(alSndpGetState(&nuAuSndPlayer) == AL_STOPPED)
{
alSndpDeallocate(&nuAuSndPlayer,nuAuSndId[cnt]);
nuAuSndId[cnt] = -1; /* この行もほんとは要らない */
break;
}
}
}
/* テーブルに空きが無かったらエラーを返す */
if(cnt == nuAuSndPlayer.maxSounds)
return(-1);
/* 再生するサウンドを登録する */
nuAuSndId[cnt] = alSndpAllocate(&nuAuSndPlayer,inst->soundArray[sndNo]);
/* 登録出来た場合のみ再生する。
(この場合、登録は必ずできるはずだが念のためチェック)
再生出来なかった場合 エラー を返す */
if(nuAuSndId[cnt] != -1)
{
alSndpSetSound(&nuAuSndPlayer,nuAuSndId[cnt]);
alSndpPlay(&nuAuSndPlayer);
}
return nuAuSndId[cnt];
}