Rev 5264 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5264 | Rev 5274 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | ;------------------------------------------------------------------------------ |
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 |
2 | test_wav_file: |
16 | ; _StopBuffer@4 îñòàíîâèòü áóôåð, |
- | |
17 | ;------------------------------------------------------------------------------ |
- | |
18 | initialize_sound_system: |
- | |
19 | mov [sound_flag],1 |
3 | 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 |
4 | stdcall _test_wav@4,dword [wav_for_test] ;letter_1a |
34 | test eax,eax |
5 | test eax,eax |
35 | jz snd_test_wav_fail |
6 | jz snd_test_wav_fail |
Line 36... | Line 7... | ||
36 | 7 | ||
- | 8 | ; or eax,PCM_OUT |
|
37 | or eax,PCM_OUT |
9 | or eax,PCM_RING |
Line 38... | Line 10... | ||
38 | mov [snd_format],eax |
10 | mov [snd_format],eax |
Line 39... | Line 11... | ||
39 | 11 | ||
Line 40... | Line 12... | ||
40 | ; DEBUGF 1, "Test wav successful %x\n",eax |
12 | ; DEBUGF 1, "Test wav successful %x\n",eax |
41 | 13 | ||
42 | call find_data_offset |
14 | call find_data_offset |
Line 43... | Line 15... | ||
43 | 15 | ||
- | 16 | mov al,[sound_flag] |
|
44 | mov al,[sound_flag] |
17 | test al,al |
- | 18 | jnz .exit |
|
- | 19 | ||
- | 20 | mov [sound_flag],2 ; close thread |
|
45 | test al,al |
21 | ;-------------------------------------- |
- | 22 | .exit: |
|
Line -... | Line 23... | ||
- | 23 | ret |
|
- | 24 | ;------------------------------------------------------------------------------ |
|
- | 25 | check_init_sound_busy: |
|
- | 26 | cmp [init_sound_busy_flag],1 |
|
- | 27 | jne @f |
|
46 | jz .exit |
28 | |
- | 29 | mcall 5,1 |
|
- | 30 | mcall 68,1 |
|
- | 31 | jmp check_init_sound_busy |
|
- | 32 | ;-------------------------------------- |
|
- | 33 | @@: |
|
- | 34 | mov [init_sound_busy_flag],1 |
|
- | 35 | ret |
|
- | 36 | ;------------------------------------------------------------------------------ |
|
- | 37 | initialize_sound_system: |
|
Line 47... | Line 38... | ||
47 | 38 | cmp [sound_flag],1 |
|
48 | stdcall _CreateBuffer@12,[snd_format],0,hBuff1 |
- | |
49 | cmp eax,-1 |
- | |
Line -... | Line 39... | ||
- | 39 | jne sound_exit |
|
- | 40 | ||
- | 41 | stdcall _InitSound@4,version |
|
- | 42 | test eax,eax |
|
- | 43 | jnz snd_init_fail |
|
50 | je snd_create_buffer_fail |
44 | |
51 | 45 | ; DEBUGF 1, "Sound init successful %x\n",eax |
|
- | 46 | ||
- | 47 | mov eax,[version] |
|
- | 48 | and eax,0xffff |
|
- | 49 | cmp eax,SOUND_VERSION |
|
- | 50 | jne snd_version_fail |
|
- | 51 | ||
- | 52 | ; DEBUGF 1, "Sound version successful %x\n",eax |
|
- | 53 | ;-------------------------------------- |
|
- | 54 | stdcall _CreateBuffer@12,[snd_format],0,[hBuff_pointer] |
|
- | 55 | test eax,eax |
|
- | 56 | jnz snd_create_buffer_fail |
|
- | 57 | ||
- | 58 | ; DEBUGF 1, "Create Buffer successful %x\n",eax |
|
- | 59 | mov eax,[hBuff_pointer] |
|
- | 60 | mov ebx,[hBuff_buffer_size_pointer] |
|
52 | ; DEBUGF 1, "Create Buffer 1 successful %x\n",eax |
61 | stdcall _GetBufferSize@8,[eax],ebx ;hBuff1_buffer_size |
- | 62 | ||
- | 63 | test eax,eax |
|
- | 64 | jnz snd_get_buffer_size_fail |
|
53 | 65 | ||
54 | stdcall _CreateBuffer@12,[snd_format],0,hBuff2 |
66 | mov ebx,[hBuff_buffer_size_pointer] |
- | 67 | mov eax,[ebx] |
|
- | 68 | ; DEBUGF 1, "Get Buffer size successful size: %x\n",eax |
|
- | 69 | shr eax,1 |
|
55 | cmp eax,-1 |
70 | mov [ebx],eax |
56 | je snd_create_buffer_fail |
71 | |
57 | 72 | mov [init_sound_busy_flag],0 |
|
58 | ; DEBUGF 1, "Create Buffer 1 successful %x\n",eax |
73 | ret |
59 | ;-------------------------------------- |
74 | ;------------------------------------------------------------------------------ |
60 | .exit: |
75 | sound_exit: |
Line 61... | Line 76... | ||
61 | ret |
76 | mcall -1 |
62 | ;------------------------------------------------------------------------------ |
77 | ;------------------------------------------------------------------------------ |
63 | find_data_offset: |
78 | find_data_offset: |
Line 64... | Line 79... | ||
64 | mov esi,[wav_for_test] ;letter_1a |
79 | mov esi,[wav_for_test] |
65 | ;-------------------------------------- |
80 | ;-------------------------------------- |
66 | @@: |
81 | @@: |
67 | cmp [esi],dword 'data' |
82 | cmp [esi],dword 'data' |
68 | je @f |
83 | je @f |
69 | 84 | ||
70 | inc esi |
85 | inc esi |
71 | cmp esi,[wav_for_test_end] ;letter_1a + letter_2b |
86 | cmp esi,[wav_for_test_end] |
72 | jne @b |
87 | jne @b |
73 | 88 | ||
74 | ; DEBUGF 1, "find data offset fail\n" |
- | |
75 | mov [sound_flag],0 |
- | |
76 | ret |
89 | ; DEBUGF 1, "find data offset fail\n" |
77 | ;-------------------------------------- |
- | |
78 | @@: |
- | |
79 | sub esi,[wav_for_test] ;letter_1a |
90 | mov [sound_flag],0 |
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 |
91 | ret |
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 |
92 | ;-------------------------------------- |
113 | ; DEBUGF 1, "return EAX: %x\n",eax |
93 | @@: |
114 | cmp eax,-1 |
94 | sub esi,[wav_for_test] |
115 | popa |
95 | add esi,4 |
116 | je snd_wave_out_fail |
96 | mov [data_offset],esi |
117 | - | ||
118 | ret |
97 | ret |
119 | ;-------------------------------------- |
98 | ;------------------------------------------------------------------------------ |
120 | .exit: |
99 | snd_test_wav_fail: |
121 | popa |
- | |
122 | ret |
- | |
123 | ;------------------------------------------------------------------------------ |
- | |
124 | snd_init_fail: |
- | |
125 | ; DEBUGF 1, "Sound init fail %x\n",eax |
- | |
126 | mov [sound_flag],0 |
100 | ; DEBUGF 1, "Test wav fail %x\n",eax |
127 | ret |
- | |
128 | ;------------------------------------------------------------------------------ |
101 | mov [sound_flag],0 |
129 | snd_version_fail: |
102 | ret |
130 | ; DEBUGF 1, "Sound version fail %x\n",eax |
103 | ;------------------------------------------------------------------------------ |
- | 104 | snd_init_fail: |
|
- | 105 | ; DEBUGF 1, "Sound init fail %x\n",eax |
|
- | 106 | jmp disable_sound |
|
- | 107 | ;------------------------------------------------------------------------------ |
|
131 | mov [sound_flag],0 |
108 | snd_version_fail: |
- | 109 | ; DEBUGF 1, "Sound version fail %x\n",eax |
|
- | 110 | jmp disable_sound |
|
- | 111 | ;------------------------------------------------------------------------------ |
|
- | 112 | snd_create_buffer_fail: |
|
- | 113 | ; DEBUGF 1, "Create Buffer fail %x\n",eax |
|
- | 114 | jmp disable_sound |
|
- | 115 | ;------------------------------------------------------------------------------ |
|
132 | ret |
116 | snd_get_buffer_size_fail: |
133 | ;------------------------------------------------------------------------------ |
117 | ; DEBUGF 1, "Get Buffer size fail %x\n",eax |
134 | snd_test_wav_fail: |
118 | jmp disable_sound |
135 | ; DEBUGF 1, "Test wav fail %x\n",eax |
- | |
136 | mov [sound_flag],0 |
119 | ;------------------------------------------------------------------------------ |
137 | ret |
120 | snd_play_buffer_fail: |
138 | ;------------------------------------------------------------------------------ |
121 | ; DEBUGF 1, "Play Buffer fail\n" |
139 | snd_create_buffer_fail: |
122 | jmp disable_sound |
- | 123 | ;------------------------------------------------------------------------------ |
|
- | 124 | snd_set_buffer_fail: |
|
- | 125 | ; DEBUGF 1, "Set Buffer fail\n" |
|
- | 126 | jmp disable_sound |
|
- | 127 | ;------------------------------------------------------------------------------ |
|
- | 128 | disable_sound: |
|
- | 129 | mov [sound_flag],0 |
|
- | 130 | jmp sound_exit |
|
- | 131 | ;------------------------------------------------------------------------------ |
|
- | 132 | snd_background_music_thread_start: |
|
140 | ; DEBUGF 1, "Create Buffer fail %x\n",eax |
133 | call check_init_sound_busy |
141 | mov [sound_flag],0 |
134 | ; DEBUGF 1, "snd_background_music_thread_start\n" |
142 | ret |
135 | mov [hBuff_pointer], dword hBuff1 |
143 | ;------------------------------------------------------------------------------ |
136 | mov [hBuff_buffer_size_pointer], dword hBuff1_buffer_size |
144 | snd_wave_out_fail: |
137 | call initialize_sound_system |
145 | ; DEBUGF 1, "Wave Out fail\n" |
138 | ;-------------------------------------- |
146 | mov [sound_flag],0 |
139 | .1: |
147 | ret |
140 | cmp [music_flag],2 |
- | 141 | je sound_exit |
|
- | 142 | ||
- | 143 | cmp [music_flag],1 |
|
- | 144 | je .start |
|
- | 145 | .2: |
|
- | 146 | mcall 5,1 |
|
- | 147 | mcall 68,1 |
|
- | 148 | jmp .1 |
|
- | 149 | ;-------------------------------------- |
|
- | 150 | .start: |
|
- | 151 | cmp [init_sound_busy_flag],1 |
|
148 | ;------------------------------------------------------------------------------ |
152 | je .2 |
149 | snd_background_music_thread_start: |
- | |
150 | cmp [music_flag],1 |
- | |
151 | je .start |
- | |
152 | 153 | ||
153 | mcall 5,50 |
154 | ; DEBUGF 1, "background_music Play Buffer start\n",eax |
154 | mcall 68,1 |
155 | stdcall _PlayBuffer@8, [hBuff1], 0 |
155 | jmp snd_background_music_thread_start |
156 | test eax,eax |
156 | ;-------------------------------------- |
157 | jnz snd_play_buffer_fail |
Line 171... | Line 172... | ||
171 | mov ebx,eax |
172 | mov ebx,eax |
172 | add ebx,1024 |
173 | add ebx,1024 |
173 | mov [wav_for_test_end],ebx |
174 | mov [wav_for_test_end],ebx |
174 | call find_data_offset |
175 | call find_data_offset |
175 | cmp [sound_flag],0 |
176 | cmp [sound_flag],0 |
176 | jz snd_background_music_thread_start ;.exit |
177 | jz .1 |
177 | ;-------------------------------------- |
178 | ;-------------------------------------- |
178 | @@: |
179 | @@: |
179 | add eax,[data_offset] |
180 | add eax,[data_offset] |
180 | mov ebx,[eax] |
181 | mov ebx,[eax] |
181 | add eax,4 |
182 | add eax,4 |
182 | mov ebp,eax |
183 | mov ebp,eax |
183 | add ebx,eax |
184 | add ebx,eax |
184 | ; DEBUGF 1, "start EAX: %x\n",eax |
185 | ; DEBUGF 1, "start EAX: %x\n",eax |
185 | ;-------------------------------------- |
186 | ;-------------------------------------- |
186 | .loop: |
187 | .loop: |
187 | cmp [music_flag],0 |
188 | cmp [music_flag],1 |
- | 189 | je @f |
|
- | 190 | ||
- | 191 | stdcall _StopBuffer@4, [hBuff1] |
|
- | 192 | ; DEBUGF 1, "Stop Buffer EAX: %x\n",eax |
|
- | 193 | jmp .1 |
|
- | 194 | ;-------------------------------------- |
|
- | 195 | @@: |
|
- | 196 | ; get event data from the driver |
|
- | 197 | ; DEBUGF 1, "Get driver_notify_struct \n" |
|
- | 198 | push ebx |
|
188 | je snd_background_music_thread_start |
199 | mcall 68,14,hBuff1_driver_notify_struct |
- | 200 | pop ebx |
|
- | 201 | ; DEBUGF 1, "Check to code \n" |
|
- | 202 | ; check to code |
|
- | 203 | cmp [hBuff1_driver_notify_struct], dword 0xFF000001 |
|
- | 204 | jne @b |
|
- | 205 | ; DEBUGF 1, "Check to stream \n" |
|
- | 206 | ; check to stream |
|
- | 207 | mov eax,[hBuff1_driver_notify_struct+8] |
|
- | 208 | cmp eax,[hBuff1] |
|
- | 209 | jne @b |
|
- | 210 | ; DEBUGF 1, "Get buffer_offset \n" |
|
- | 211 | ; get buffer_offset |
|
- | 212 | mov eax,[hBuff1_driver_notify_struct+12] |
|
- | 213 | mov [hBuff1_buffer_offset],eax |
|
189 | ; DEBUGF 1, "src EBP: %x size EBX: %x\n",ebp,ebx |
214 | ; DEBUGF 1, "src EBP: %x size EBX: %x\n",ebp,ebx |
190 | ; stdcall _WaveOut@12,[hBuff],eax,ebx |
- | |
191 | stdcall _WaveOut@12,[hBuff1],ebp,8192 |
215 | stdcall _SetBuffer@16, [hBuff1], ebp, [hBuff1_buffer_offset], [hBuff1_buffer_size] |
192 | ; DEBUGF 1, "return EAX: %x\n",eax |
- | |
193 | cmp eax,-1 |
216 | test eax,eax |
194 | ; popa |
- | |
195 | je snd_wave_out_fail |
217 | jnz snd_set_buffer_fail |
Line -... | Line 218... | ||
- | 218 | ||
- | 219 | ; DEBUGF 1, "Set Buffer successful EAX: %x\n",eax |
|
196 | 220 | add ebp,[hBuff1_buffer_size] |
|
197 | add ebp,8192*2 |
221 | add ebp,[hBuff1_buffer_size] |
198 | cmp ebx,ebp |
222 | cmp ebx,ebp |
Line 199... | Line 223... | ||
199 | jbe .start |
223 | jbe .start_1 |
200 | 224 | ||
201 | sub ebp,8192 |
- | |
202 | jmp .loop |
- | |
203 | ;-------------------------------------- |
- | |
204 | ;.exit: |
- | |
205 | ; popa |
- | |
206 | ; jmp snd_background_music_thread_start |
225 | sub ebp,[hBuff1_buffer_size] |
207 | ; mcall -1 |
226 | jmp .loop |
208 | ;------------------------------------------------------------------------------ |
227 | ;------------------------------------------------------------------------------ |
209 | snd_kick_action: |
228 | snd_kick_action: |
Line 210... | Line 229... | ||
210 | cmp [sounds_flag],1 |
229 | cmp [sounds_flag],1 |
211 | jne @f |
230 | jne @f |
Line 212... | Line 231... | ||
212 | 231 | ||
213 | cmp [snd_kick_flag],1 |
232 | cmp [snd_kick_flag],1 |
214 | je @f |
233 | je @f |
215 | 234 | ||
216 | mcall 51,1,snd_kick_action_thread_start,snd_kick_action_thread_stack |
235 | mov [snd_kick_flag],1 |
217 | ;-------------------------------------- |
236 | ;-------------------------------------- |
- | 237 | @@: |
|
- | 238 | ret |
|
- | 239 | ;------------------------------------------------------------------------------ |
|
- | 240 | snd_kick_action_thread_start: |
|
- | 241 | call check_init_sound_busy |
|
- | 242 | ; DEBUGF 1, "snd_kick_action_thread_start\n" |
|
- | 243 | mov [hBuff_pointer], dword hBuff2 |
|
- | 244 | mov [hBuff_buffer_size_pointer], dword hBuff2_buffer_size |
|
- | 245 | call initialize_sound_system |
|
- | 246 | ;-------------------------------------- |
|
- | 247 | .1: |
|
- | 248 | cmp [sounds_flag],2 |
|
- | 249 | je sound_exit |
|
218 | @@: |
250 | |
- | 251 | cmp [sounds_flag],0 |
|
- | 252 | je @f |
|
- | 253 | ||
- | 254 | cmp [snd_kick_flag],1 |
|
- | 255 | je .start |
|
- | 256 | ;-------------------------------------- |
|
- | 257 | @@: |
|
- | 258 | mcall 5,1 |
|
- | 259 | mcall 68,1 |
|
- | 260 | jmp .1 |
|
- | 261 | ;-------------------------------------- |
|
- | 262 | .start: |
|
- | 263 | ; DEBUGF 1, "kick_action Play Buffer start\n" |
|
- | 264 | stdcall _PlayBuffer@8, [hBuff2], 0 |
|
- | 265 | test eax,eax |
|
219 | ret |
266 | jnz snd_play_buffer_fail |
- | 267 | ||
- | 268 | ; DEBUGF 1, "kick_action Play Buffer successful EAX: %x\n",eax |
|
- | 269 | ||
- | 270 | mov eax,[sounds_sample] ;[stone_kick_sound] |
|
- | 271 | ; check for correct data_offset |
|
- | 272 | push eax |
|
- | 273 | add eax,[data_offset] |
|
- | 274 | sub eax,4 |
|
- | 275 | cmp [eax],dword 'data' |
|
- | 276 | pop eax |
|
- | 277 | je @f |
|
- | 278 | ||
- | 279 | mov [wav_for_test],eax |
|
- | 280 | mov ebx,eax |
|
- | 281 | add ebx,1024 |
|
- | 282 | mov [wav_for_test_end],ebx |
|
- | 283 | call find_data_offset |
|
- | 284 | cmp [sound_flag],0 |
|
- | 285 | jz .1 |
|
- | 286 | ;-------------------------------------- |
|
- | 287 | @@: |
|
- | 288 | add eax,[data_offset] |
|
- | 289 | mov ebx,[eax] |
|
- | 290 | add eax,4 |
|
- | 291 | mov ebp,eax |
|
- | 292 | add ebx,eax |
|
- | 293 | ; DEBUGF 1, "start EAX: %x\n",eax |
|
- | 294 | ;-------------------------------------- |
|
- | 295 | .loop: |
|
- | 296 | cmp [sounds_flag],1 |
|
- | 297 | je @f |
|
- | 298 | ||
- | 299 | stdcall _StopBuffer@4, [hBuff2] |
|
- | 300 | ; DEBUGF 1, "Stop Buffer EAX: %x\n",eax |
|
- | 301 | jmp .1 |
|
- | 302 | ;-------------------------------------- |
|
- | 303 | @@: |
|
- | 304 | ; get event data from the driver |
|
- | 305 | ; DEBUGF 1, "Get driver_notify_struct \n" |
|
- | 306 | push ebx |
|
- | 307 | mcall 68,14,hBuff2_driver_notify_struct |
|
- | 308 | pop ebx |
|
- | 309 | ; DEBUGF 1, "Check to code \n" |
|
- | 310 | ; check to code |
|
- | 311 | cmp [hBuff2_driver_notify_struct], dword 0xFF000001 |
|
220 | ;------------------------------------------------------------------------------ |
312 | jne @b |
- | 313 | ; DEBUGF 1, "Check to stream \n" |
|
- | 314 | ; check to stream |
|
- | 315 | mov eax,[hBuff2_driver_notify_struct+8] |
|
- | 316 | cmp eax,[hBuff2] |
|
- | 317 | jne @b |
|
- | 318 | ; DEBUGF 1, "Get buffer_offset \n" |
|
- | 319 | ; get buffer_offset |
|
221 | snd_kick_action_thread_start: |
320 | mov eax,[hBuff2_driver_notify_struct+12] |
- | 321 | mov [hBuff2_buffer_offset],eax |
|
- | 322 | ; DEBUGF 1, "src EBP: %x size EBX: %x\n",ebp,ebx |
|
- | 323 | stdcall _SetBuffer@16, [hBuff2], ebp, [hBuff2_buffer_offset], [hBuff2_buffer_size] |
|
- | 324 | test eax,eax |
|
- | 325 | jnz snd_set_buffer_fail |
|
- | 326 | ||
- | 327 | ; DEBUGF 1, "Set Buffer successful EAX: %x\n",eax |
|
- | 328 | add ebp,[hBuff2_buffer_size] |
|
- | 329 | add ebp,[hBuff2_buffer_size] |
|
- | 330 | cmp ebx,ebp |
|
- | 331 | jbe .exit |
|
- | 332 | ||
- | 333 | sub ebp,[hBuff2_buffer_size] |
|
222 | mov [snd_kick_flag],1 |
334 | jmp .loop |
223 | mov eax,[stone_kick_sound] |
335 | ;-------------------------------------- |
224 | mov ebp,[hBuff2] |
336 | .exit: |
225 | call wave_out |
337 | stdcall _StopBuffer@4, [hBuff2] |