Mercurial > hg > Members > koba > t_dandy
comparison sound.c @ 0:435ac1cdb64e
create task dandy directry.
author | koba <koba@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 11 Dec 2010 21:25:28 +0900 |
parents | |
children | 00c3272a801f |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:435ac1cdb64e |
---|---|
1 #include <stdio.h> | |
2 #include <SDL.h> | |
3 #include <SDL_mixer.h> //追加 | |
4 #include "sound.h" | |
5 #include "Ss.h" | |
6 | |
7 #include "error.h" | |
8 //#include "libps.h" | |
9 | |
10 //int vh_addr[10]={0x80140000,0x80141a00,0x80143000,0x80144400,0x80148200, | |
11 // 0x80149300,0x8014f300,0x80130000,0x80130000,0x80130000}; | |
12 | |
13 //_________________________________________________________ | |
14 Mix_Chunk *chunk[8]; // 音楽ファイルの読み込み変数 | |
15 int channel[8]; | |
16 //_________________________________________________________ | |
17 | |
18 static char buf0[] = "pBAV"; | |
19 | |
20 int vh_addr[10] = | |
21 { (int) buf0, (int) buf0, (int) buf0, (int) buf0, (int) buf0, | |
22 (int) buf0 }; | |
23 | |
24 int vb_addr[10] = | |
25 { 0x80140d00, 0x80142700, 0x80143d00, 0x80145100, 0x80148f00, | |
26 0x8014a100, 0x80150000, 0x80140000, 0x80140000, 0x80140000 | |
27 }; | |
28 | |
29 int vab[10]; /* SE 用 VAB */ | |
30 unsigned char *buf; | |
31 int cnt; | |
32 int seqno = -1; | |
33 | |
34 int seq[4]; /* SEQ data id */ | |
35 int sdvab; /* 常駐 SE.VAB */ | |
36 | |
37 //CdlFILE vhfile, vbfile; | |
38 | |
39 int SQ[10] = { 0x80155000, 0x8015f000, 0x80168000, 0x8016e000, 0x80175000, | |
40 0x80177000, 0xa00d0000, 0xa00e0000, 0x801e0000 | |
41 }; | |
42 | |
43 void Soundss() | |
44 { | |
45 /* | |
46 int i; | |
47 | |
48 //Set Sound Reverb @@@ リバーブの設定 | |
49 printf("音源データをCDから読み込み中"); | |
50 SsUtSetReverbType(SS_REV_TYPE_STUDIO_C); | |
51 SsUtReverbOn(); | |
52 | |
53 | |
54 // 音源データのCDからの読み込み | |
55 // 標準音源(VH属性部)の読み込み | |
56 for (i = 0; i < 10; i++) { // リトライループ | |
57 if (CdSearchFile(&vhfile, VH_NAME) != 0) | |
58 break; //正常終了ならばリトライループ中断 | |
59 else | |
60 printf("%s not found.\n", VH_NAME); | |
61 } | |
62 printf("♪"); | |
63 for (i = 0; i < 10; i++) { // リトライループ | |
64 CdReadFile(VH_NAME, (void *) SQVH_ADDR, vhfile.size); | |
65 | |
66 // リードの裏で通常の処理は実行できる。 | |
67 // ここでは、Read が終了するまで残りのセクタ数を監視 | |
68 while ((cnt = CdReadSync(1, 0)) > 0) | |
69 VSync(0); // 垂直同期割り込み待ち(時間調整用) | |
70 if (cnt == 0) | |
71 break; // 正常終了ならばリトライループ中断 | |
72 } | |
73 // 標準音源(VB波形部)の読み込み | |
74 for (i = 0; i < 10; i++) { // リトライループ | |
75 if (CdSearchFile(&vbfile, VB_NAME) != 0) | |
76 break; // 正常終了ならばリトライループ中断 | |
77 else | |
78 printf("%s not found.\n", VB_NAME); | |
79 } | |
80 printf("♪"); | |
81 for (i = 0; i < 10; i++) { // リトライループ | |
82 CdReadFile(VB_NAME, (void *) SQVB_ADDR, vbfile.size); | |
83 | |
84 // リードの裏で通常の処理は実行できる。 | |
85 // ここでは、Read が終了するまで残りのセクタ数を監視 | |
86 while ((cnt = CdReadSync(1, 0)) > 0) | |
87 VSync(0); // 垂直同期割り込み待ち(時間調整用) | |
88 | |
89 if (cnt == 0) | |
90 break; // 正常終了ならばリトライループ中断 | |
91 } | |
92 printf("♪"); | |
93 // Open & transfer VAB data @@@ *VAB データのオープン,転送 | |
94 sdvab = SsVabTransfer(SQVH_ADDR, SQVB_ADDR, -1, 1); | |
95 if (sdvab < 0) { | |
96 printf("VAB open failed(sdvab = %d)\n", sdvab); | |
97 return; | |
98 } | |
99 printf("完了。\n"); | |
100 // seq[0] = SsSeqOpen (SQ_ADDR, sdvab); | |
101 // for (i=0;i<8;i++) | |
102 // seq[i] = SsSeqOpen ((unsigned long*)SQ[i], sdvab); | |
103 */ | |
104 } | |
105 | |
106 void SoundPlay(int no) | |
107 { | |
108 // Open SEQ/SEP datas @@@ * SEQ/SEP データのオープン | |
109 // SsSetMVol (127, 127); | |
110 // SsUtSetReverbDepth( 40, 40 ); | |
111 | |
112 seq[no] = SsSeqOpen((unsigned int *) SQ[no], sdvab); | |
113 seqno = no; | |
114 //SsSeqPlay(seq[no], SSPLAY_PLAY, 0); | |
115 | |
116 } | |
117 | |
118 void SoundStop() | |
119 { | |
120 if (seqno == -1) | |
121 return; | |
122 //SsSeqStop(seq[seqno]); | |
123 //SsSeqClose(seq[seqno]); | |
124 } | |
125 | |
126 //__________________________________________________________________ | |
127 /** | |
128 * 全部これで判定するのはおかしい。 | |
129 * んだけど、時間がががががが | |
130 */ | |
131 int no_useSDLMixer = 0; | |
132 | |
133 void | |
134 InitSdlMixer(void) | |
135 { | |
136 if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY,MIX_DEFAULT_FORMAT,2,1024) < 0) { | |
137 __debug("failed to initialize SDL_mixer.\n"); | |
138 no_useSDLMixer = 1; | |
139 } | |
140 } | |
141 | |
142 | |
143 // 音楽ファイル読み込み関数 | |
144 void LoadSdlMixer() | |
145 { | |
146 if (no_useSDLMixer) { | |
147 __debug("%s is not executed because no_useSDLMixer is set\n", | |
148 __FUNCTION__); | |
149 } else { | |
150 chunk[BGM]=Mix_LoadWAV("./sound/sample.wav"); | |
151 chunk[SHOT_A]=Mix_LoadWAV("./sound/shota.wav"); | |
152 chunk[SHOT_B]=Mix_LoadWAV("./sound/shotb.wav"); | |
153 chunk[SHOT_C]=Mix_LoadWAV("./sound/shotc.wav"); | |
154 chunk[RING]=Mix_LoadWAV("./sound/ring.wav"); | |
155 chunk[NEW]=Mix_LoadWAV("./sound/powerdown.wav"); | |
156 chunk[JIKIOUT]=Mix_LoadWAV("./sound/jikiout.wav"); | |
157 chunk[BOM]=Mix_LoadWAV("./sound/bomber.wav"); | |
158 | |
159 // 読み込めないファイルがあればエラーで終了 | |
160 if(!chunk[BGM] || !chunk[SHOT_A] || !chunk[SHOT_B] || !chunk[SHOT_C] | |
161 ||!chunk[RING] || !chunk[NEW] || !chunk[JIKIOUT] || !chunk[BOM]) { | |
162 fprintf(stderr,"failed to load sound.\n"); | |
163 //return -1; | |
164 return; | |
165 } | |
166 } | |
167 } | |
168 | |
169 /* 音楽再生関数 | |
170 int fleg ... 再生回数。-1でループします。 | |
171 int ch ... 再生する音の番号*/ | |
172 void | |
173 PlaySdlMixer(int fleq, int ch) | |
174 { | |
175 if (no_useSDLMixer) { | |
176 __debug("%s is not executed because no_useSDLMixer is set\n", | |
177 __FUNCTION__); | |
178 } else { | |
179 channel[ch]=Mix_PlayChannel( ch ,chunk[ch], fleq); | |
180 } | |
181 } | |
182 | |
183 void | |
184 PauseSdlMixer(int ch) | |
185 { | |
186 if (no_useSDLMixer) { | |
187 __debug("%s is not executed because no_useSDLMixer is set\n", | |
188 __FUNCTION__); | |
189 } else { | |
190 Mix_Pause(ch); | |
191 } | |
192 } | |
193 | |
194 void | |
195 ResumeSdlMixer(int ch) | |
196 { | |
197 if (no_useSDLMixer) { | |
198 __debug("%s is not executed because no_useSDLMixer is set\n", | |
199 __FUNCTION__); | |
200 } else { | |
201 Mix_Resume(ch); | |
202 } | |
203 } | |
204 | |
205 void | |
206 TimeSdlMixer(int fleq, int ch, int time) | |
207 { | |
208 if (no_useSDLMixer) { | |
209 __debug("%s is not executed because no_useSDLMixer is set\n", | |
210 __FUNCTION__); | |
211 } else { | |
212 channel[ch]=Mix_PlayChannelTimed( ch ,chunk[ch], fleq, time); | |
213 } | |
214 } | |
215 | |
216 | |
217 // 音の解放関数 | |
218 void | |
219 FreeSdlMixer() | |
220 { | |
221 int i ; | |
222 | |
223 if (no_useSDLMixer) { | |
224 __debug("%s is not executed because no_useSDLMixer is set\n", | |
225 __FUNCTION__); | |
226 } else { | |
227 for(i =0; i < 8; ++i) { | |
228 Mix_FreeChunk(chunk[i]); | |
229 } | |
230 } | |
231 } | |
232 | |
233 void | |
234 InitVolume(void) | |
235 { | |
236 if (no_useSDLMixer) { | |
237 __debug("%s is not executed because no_useSDLMixer is set\n", | |
238 __FUNCTION__); | |
239 } else { | |
240 Mix_Volume( 0, 255); // BGM | |
241 Mix_Volume( 1, SE_VOLUME); // SHOT_A | |
242 Mix_Volume( 2, SE_VOLUME); // SHOT_B | |
243 Mix_Volume( 3, 100); // SHOT_C | |
244 Mix_Volume( 4, 40); // RING | |
245 Mix_Volume( 5, SE_VOLUME); // NEW | |
246 Mix_Volume( 6, SE_VOLUME); // JIKIOUT | |
247 Mix_Volume( 7, 100); // BOM | |
248 } | |
249 } | |
250 | |
251 //_________________________________________________________________ |