Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5253 | mario79 | 1 | ;------------------------------------------------------------------------------ |
2 | ; init.obj |
||
3 | ; _InitSound@4 Инит, |
||
4 | ; _CreateBuffer@12 создать буфер, |
||
5 | ; _DestroyBuffer@4 удалить буфер |
||
6 | ; |
||
7 | ; sndgetsize.obj |
||
8 | ; _GetBufferSize@8 взять размер буфера, |
||
9 | ; _GetBufferFree@8 WTF??? |
||
10 | ; |
||
11 | ; setbuf.obj |
||
12 | ; _SetBuffer@16 установить буфер, |
||
13 | ; _PlayBuffer@8 играть буфер, |
||
14 | ; |
||
15 | ; stopbuf.obj |
||
16 | ; _StopBuffer@4 остановить буфер, |
||
17 | ;------------------------------------------------------------------------------ |
||
18 | initialize_sound_system: |
||
19 | mov [sound_flag],1 |
||
20 | |||
21 | stdcall _InitSound@4,version |
||
22 | cmp eax,-1 |
||
23 | je snd_init_fail |
||
24 | |||
25 | ; DEBUGF 1, "Sound init successful %x\n",eax |
||
26 | mov eax,[version] |
||
27 | and eax,0xffff |
||
28 | cmp eax,SOUND_VERSION |
||
29 | jne snd_version_fail |
||
30 | |||
31 | ; DEBUGF 1, "Sound version successful %x\n",eax |
||
32 | |||
33 | stdcall _test_wav@4,dword [wav_for_test] ;letter_1a |
||
34 | test eax,eax |
||
35 | jz snd_test_wav_fail |
||
36 | |||
37 | or eax,PCM_OUT |
||
38 | mov [snd_format],eax |
||
39 | |||
40 | ; DEBUGF 1, "Test wav successful %x\n",eax |
||
41 | |||
42 | call find_data_offset |
||
43 | |||
44 | mov al,[sound_flag] |
||
45 | test al,al |
||
46 | jz .exit |
||
47 | |||
48 | stdcall _CreateBuffer@12,[snd_format],0,hBuff1 |
||
49 | cmp eax,-1 |
||
50 | je snd_create_buffer_fail |
||
51 | |||
52 | ; DEBUGF 1, "Create Buffer 1 successful %x\n",eax |
||
53 | |||
54 | stdcall _CreateBuffer@12,[snd_format],0,hBuff2 |
||
55 | cmp eax,-1 |
||
56 | je snd_create_buffer_fail |
||
57 | |||
58 | ; DEBUGF 1, "Create Buffer 1 successful %x\n",eax |
||
59 | ;-------------------------------------- |
||
60 | .exit: |
||
61 | ret |
||
62 | ;------------------------------------------------------------------------------ |
||
63 | find_data_offset: |
||
64 | mov esi,[wav_for_test] ;letter_1a |
||
65 | ;-------------------------------------- |
||
66 | @@: |
||
67 | cmp [esi],dword 'data' |
||
68 | je @f |
||
69 | |||
70 | inc esi |
||
71 | cmp esi,[wav_for_test_end] ;letter_1a + letter_2b |
||
72 | jne @b |
||
73 | |||
74 | ; DEBUGF 1, "find data offset fail\n" |
||
75 | mov [sound_flag],0 |
||
76 | ret |
||
77 | ;-------------------------------------- |
||
78 | @@: |
||
79 | sub esi,[wav_for_test] ;letter_1a |
||
80 | add esi,4 |
||
81 | mov [data_offset],esi |
||
82 | ret |
||
83 | ;------------------------------------------------------------------------------ |
||
84 | wave_out: |
||
85 | ; in: |
||
86 | ; eax - adress of wav sample |
||
87 | ; ebp - hBuff ; hardware buffer |
||
88 | pusha |
||
89 | ; DEBUGF 1, "Wave out\n" |
||
90 | ; check for correct data_offset |
||
91 | push eax |
||
92 | add eax,[data_offset] |
||
93 | sub eax,4 |
||
94 | cmp [eax],dword 'data' |
||
95 | pop eax |
||
96 | je @f |
||
97 | |||
98 | mov [wav_for_test],eax |
||
99 | mov ebx,eax |
||
100 | add ebx,1024 |
||
101 | mov [wav_for_test_end],ebx |
||
102 | call find_data_offset |
||
103 | cmp [sound_flag],0 |
||
104 | jz .exit |
||
105 | ;-------------------------------------- |
||
106 | @@: |
||
107 | add eax,[data_offset] |
||
108 | mov ebx,[eax] |
||
109 | add eax,4 |
||
110 | ; DEBUGF 1, "src EAX: %x size EBX: %x\n",eax,ebx |
||
111 | ; stdcall _WaveOut@12,[hBuff],eax,ebx |
||
112 | stdcall _WaveOut@12,ebp,eax,ebx |
||
113 | ; DEBUGF 1, "return EAX: %x\n",eax |
||
114 | cmp eax,-1 |
||
115 | popa |
||
116 | je snd_wave_out_fail |
||
117 | ;-------------------------------------- |
||
118 | .exit: |
||
119 | ret |
||
120 | ;------------------------------------------------------------------------------ |
||
121 | snd_init_fail: |
||
122 | ; DEBUGF 1, "Sound init fail %x\n",eax |
||
123 | mov [sound_flag],0 |
||
124 | ret |
||
125 | ;------------------------------------------------------------------------------ |
||
126 | snd_version_fail: |
||
127 | ; DEBUGF 1, "Sound version fail %x\n",eax |
||
128 | mov [sound_flag],0 |
||
129 | ret |
||
130 | ;------------------------------------------------------------------------------ |
||
131 | snd_test_wav_fail: |
||
132 | ; DEBUGF 1, "Test wav fail %x\n",eax |
||
133 | mov [sound_flag],0 |
||
134 | ret |
||
135 | ;------------------------------------------------------------------------------ |
||
136 | snd_create_buffer_fail: |
||
137 | ; DEBUGF 1, "Create Buffer fail %x\n",eax |
||
138 | mov [sound_flag],0 |
||
139 | ret |
||
140 | ;------------------------------------------------------------------------------ |
||
141 | snd_wave_out_fail: |
||
142 | ; DEBUGF 1, "Wave Out fail\n" |
||
143 | mov [sound_flag],0 |
||
144 | ret |
||
145 | ;------------------------------------------------------------------------------ |
||
146 | snd_background_music_thread_start: |
||
147 | mov eax,[background_music] |
||
148 | mov ebp,[hBuff1] |
||
149 | call wave_out |
||
150 | jmp snd_background_music_thread_start |
||
151 | ; mcall -1 |
||
152 | ;------------------------------------------------------------------------------ |
||
153 | snd_kick_action: |
||
154 | cmp [snd_kick_flag],1 |
||
155 | je @f |
||
156 | |||
157 | mcall 51,1,snd_kick_action_thread_start,snd_kick_action_thread_stack |
||
158 | ;-------------------------------------- |
||
159 | @@: |
||
160 | ret |
||
161 | ;------------------------------------------------------------------------------ |
||
162 | snd_kick_action_thread_start: |
||
163 | mov [snd_kick_flag],1 |
||
164 | mov eax,[stone_kick_sound] |
||
165 | mov ebp,[hBuff2] |
||
166 | call wave_out |
||
167 | mov [snd_kick_flag],0 |
||
168 | mcall -1 |
||
169 | ;------------------------------------------------------------------------------ |