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 //_________________________________________________________________