1 | 'このファイルには、DirectMusicをCOMインターフェイスレベルで扱うための関数が定義されています。
|
---|
2 |
|
---|
3 |
|
---|
4 | '-------------------------------------------------
|
---|
5 | ' DirectMusicに必要なヘッダファイルをインクルード
|
---|
6 | '-------------------------------------------------
|
---|
7 | #include <directx9\dmusic.sbp>
|
---|
8 |
|
---|
9 |
|
---|
10 | Dim dx_lpDMPerformance As *IDirectMusicPerformance8 'パフォーマンス
|
---|
11 | Dim dx_lpDMLoader As *IDirectMusicLoader8 'ローダー
|
---|
12 |
|
---|
13 | 'DirectMusicを初期化する関数
|
---|
14 | Function dx_InitDMusic() As Long
|
---|
15 | Dim hr As DWord
|
---|
16 |
|
---|
17 | 'パフォーマンスの生成
|
---|
18 | hr = CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,
|
---|
19 | IID_IDirectMusicPerformance8, dx_lpDMPerformance)
|
---|
20 | If hr Then
|
---|
21 | dx_InitDMusic=0
|
---|
22 | Exit Function
|
---|
23 | End If
|
---|
24 |
|
---|
25 | 'パフォーマンスの初期化
|
---|
26 | hr = dx_lpDMPerformance->InitAudio(NULL, NULL, hMainWnd,
|
---|
27 | DMUS_APATH_SHARED_STEREOPLUSREVERB, 64, DMUS_AUDIOF_ALL, NULL)
|
---|
28 | If hr Then
|
---|
29 | dx_InitDMusic=0
|
---|
30 | Exit Function
|
---|
31 | End If
|
---|
32 |
|
---|
33 | 'ローダーの生成
|
---|
34 | hr = CoCreateInstance(CLSID_DirectMusicLoader, NULL,
|
---|
35 | CLSCTX_INPROC, IID_IDirectMusicLoader8, dx_lpDMLoader)
|
---|
36 | If hr Then
|
---|
37 | dx_InitDMusic=0
|
---|
38 | Exit Function
|
---|
39 | End If
|
---|
40 |
|
---|
41 | dx_InitDMusic=1
|
---|
42 | End Function
|
---|
43 |
|
---|
44 | ' DirectMusicを終了するための関数
|
---|
45 | Sub dx_QuitDMusic()
|
---|
46 | If dx_lpDMLoader Then dx_lpDMLoader->Release()
|
---|
47 | If dx_lpDMPerformance Then
|
---|
48 | 'すべてのサウンドを停止
|
---|
49 | dx_lpDMPerformance->Stop(NULL, NULL, 0, 0)
|
---|
50 |
|
---|
51 | 'パフォーマンスオブジェクトを閉じる
|
---|
52 | dx_lpDMPerformance->CloseDown()
|
---|
53 |
|
---|
54 | '解放
|
---|
55 | dx_lpDMPerformance->Release()
|
---|
56 | End If
|
---|
57 | End Sub
|
---|
58 |
|
---|
59 |
|
---|
60 | '------------------------
|
---|
61 | ' サウンド再生用のクラス
|
---|
62 | '------------------------
|
---|
63 |
|
---|
64 | 'エフェクト フラグ
|
---|
65 | Enum EFFECT_FLAGS
|
---|
66 | NO_EFFECT = 0 'エフェクト無し
|
---|
67 | EFFECT_STANDARD_CHORUS = 1 'コーラス
|
---|
68 | EFFECT_STANDARD_COMPRESSOR = 2 'コンプレッサー
|
---|
69 | EFFECT_STANDARD_DISTORTION = 3 'ディストーション
|
---|
70 | EFFECT_STANDARD_ECHO = 4 'エコー
|
---|
71 | EFFECT_STANDARD_FLANGER = 5 'フランジ
|
---|
72 | EFFECT_STANDARD_GARGLE = 6 'ガーグル
|
---|
73 | EFFECT_STANDARD_I3DL2REVERB = 7 'Interactive 3D Level 2 リバーブ
|
---|
74 | EFFECT_STANDARD_PARAMEQ = 8 'パラメトリック イコライザ
|
---|
75 | EFFECT_WAVES_REVERB = 9 'Waves リバーブ
|
---|
76 | End Enum
|
---|
77 |
|
---|
78 | Class CAudio
|
---|
79 | Protected
|
---|
80 | lpDMSegment As *IDirectMusicSegment8 'セグメント
|
---|
81 | lpDMAudioPath As *IDirectMusicAudioPath8 'オーディオパス
|
---|
82 | lpDSBuffer As LPDIRECTSOUNDBUFFER8 'サウンドバッファ
|
---|
83 |
|
---|
84 | dwFlags As DWord
|
---|
85 | dwLength As DWord 'サウンド長(ミリ秒)
|
---|
86 |
|
---|
87 | Function LoadAndSetting(pszFileName As *Char) As Long
|
---|
88 | Dim hr As DWord
|
---|
89 |
|
---|
90 | Release()
|
---|
91 |
|
---|
92 | 'サウンドの長さをdwLengthへ格納(ミリ秒単位)
|
---|
93 | Dim mop As MCI_OPEN_PARMS
|
---|
94 | Dim msep As MCI_SET_PARMS
|
---|
95 | Dim msp As MCI_STATUS_PARMS
|
---|
96 | mop.dwCallback=hMainWnd As DWord
|
---|
97 | mop.lpstrElementName=pszFileName
|
---|
98 | msep.dwTimeFormat=MCI_FORMAT_MILLISECONDS
|
---|
99 | mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT,mop)
|
---|
100 | mciSendCommand(mop.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,msep)
|
---|
101 | msp.dwItem=MCI_STATUS_LENGTH
|
---|
102 | mciSendCommand(mop.wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,msp)
|
---|
103 | dwLength=msp.dwReturn
|
---|
104 | mciSendCommand(mop.wDeviceID,MCI_CLOSE,MCI_WAIT,ByVal VarPtr(hr))
|
---|
105 |
|
---|
106 | 'Unicodeに変換
|
---|
107 | Dim wstrFileName[MAX_PATH-1] As WCHAR
|
---|
108 | MultiByteToWideChar(CP_ACP, 0, pszFileName, -1, wstrFileName, MAX_PATH)
|
---|
109 |
|
---|
110 | hr = dx_lpDMLoader->LoadObjectFromFile(CLSID_DirectMusicSegment,
|
---|
111 | IID_IDirectMusicSegment8, wstrFileName, VarPtr(lpDMSegment))
|
---|
112 | If hr Then
|
---|
113 | LoadAndSetting=0
|
---|
114 | Exit Function
|
---|
115 | End If
|
---|
116 |
|
---|
117 | 'バンドのダウンロード
|
---|
118 | hr = lpDMSegment->Download(dx_lpDMPerformance)
|
---|
119 | If hr Then
|
---|
120 | LoadAndSetting=0
|
---|
121 | Exit Function
|
---|
122 | End If
|
---|
123 |
|
---|
124 | LoadAndSetting=1
|
---|
125 | End Function
|
---|
126 |
|
---|
127 | Private
|
---|
128 | Sub Release()
|
---|
129 | If lpDMSegment Then
|
---|
130 | Stop()
|
---|
131 |
|
---|
132 | lpDMSegment->Unload(dx_lpDMPerformance)
|
---|
133 |
|
---|
134 | If lpDSBuffer Then lpDSBuffer->Release()
|
---|
135 | If lpDMAudioPath Then lpDMAudioPath->Release()
|
---|
136 | lpDMSegment->Release()
|
---|
137 | End If
|
---|
138 | End Sub
|
---|
139 |
|
---|
140 | Public
|
---|
141 | 'コンストラクタ
|
---|
142 | Sub CAudio()
|
---|
143 | lpDMSegment=0
|
---|
144 | lpDMAudioPath=0
|
---|
145 | lpDSBuffer=0
|
---|
146 | dwFlags=0
|
---|
147 | End Sub
|
---|
148 |
|
---|
149 | 'デストラクタ
|
---|
150 | Sub ~CAudio()
|
---|
151 | Release()
|
---|
152 | End Sub
|
---|
153 |
|
---|
154 | 'ファイルパスを指定
|
---|
155 | Function Load(pszFileName As *Char) As Long
|
---|
156 | Dim hr As DWord
|
---|
157 |
|
---|
158 | hr=LoadAndSetting(pszFileName)
|
---|
159 | If hr=FALSE Then
|
---|
160 | Load=FALSE
|
---|
161 | Exit Function
|
---|
162 | End If
|
---|
163 |
|
---|
164 | 'オーディオパスの生成
|
---|
165 | hr = dx_lpDMPerformance->CreateStandardAudioPath(DMUS_APATH_DYNAMIC_STEREO, 64, FALSE, VarPtr(lpDMAudioPath))
|
---|
166 | If hr Then
|
---|
167 | Load=0
|
---|
168 | Exit Function
|
---|
169 | End If
|
---|
170 |
|
---|
171 | 'サウンドバッファの取得
|
---|
172 | hr = lpDMAudioPath->GetObjectInPath(DMUS_PCHANNEL_ALL, DMUS_PATH_BUFFER, 0,
|
---|
173 | GUID_NULL, 0, IID_IDirectSoundBuffer8, VarPtr(lpDSBuffer))
|
---|
174 | If hr Then
|
---|
175 | Load=0
|
---|
176 | Exit Function
|
---|
177 | End If
|
---|
178 |
|
---|
179 | ' オーディオパスのアクティブ化
|
---|
180 | lpDMAudioPath->Activate(TRUE)
|
---|
181 |
|
---|
182 | Load=1
|
---|
183 | End Function
|
---|
184 |
|
---|
185 | '再生
|
---|
186 | Function Play() As Long
|
---|
187 | Dim hr As DWord
|
---|
188 |
|
---|
189 | 'セグメントの再生
|
---|
190 | hr = dx_lpDMPerformance->PlaySegmentEx(lpDMSegment,
|
---|
191 | NULL,
|
---|
192 | NULL,
|
---|
193 | dwFlags,
|
---|
194 | 0,
|
---|
195 | NULL,
|
---|
196 | NULL,
|
---|
197 | lpDMAudioPath)
|
---|
198 | If hr Then
|
---|
199 | Play=FALSE
|
---|
200 | Exit Function
|
---|
201 | End If
|
---|
202 |
|
---|
203 | Play=TRUE
|
---|
204 | End Function
|
---|
205 |
|
---|
206 | '停止
|
---|
207 | Function Stop() As Long
|
---|
208 | Dim hr As Long
|
---|
209 |
|
---|
210 | 'セグメントの停止
|
---|
211 | hr=dx_lpDMPerformance->StopEx(lpDMSegment, 0, 0)
|
---|
212 |
|
---|
213 | If hr=S_OK Then Stop=TRUE Else Stop=FALSE
|
---|
214 | End Function
|
---|
215 |
|
---|
216 | '長さを取得
|
---|
217 | Function GetLength() As DWord
|
---|
218 | GetLength=dwLength
|
---|
219 | End Function
|
---|
220 |
|
---|
221 | 'プライマリセグメントにセット
|
---|
222 | Sub SetPrimary()
|
---|
223 | dwFlags=0
|
---|
224 | End Sub
|
---|
225 |
|
---|
226 | 'セカンダリセグメントにセット
|
---|
227 | Sub SetSecondary()
|
---|
228 | dwFlags=DMUS_SEGF_SECONDARY
|
---|
229 | End Sub
|
---|
230 |
|
---|
231 | Function SetEffect(EffectFlag As EFFECT_FLAGS) As Long
|
---|
232 | Dim hr As DWord
|
---|
233 |
|
---|
234 | If EffectFlag=NO_EFFECT Then
|
---|
235 | lpDSBuffer->SetFX(0, NULL, NULL)
|
---|
236 |
|
---|
237 | SetEffect=1
|
---|
238 | Exit Function
|
---|
239 | End If
|
---|
240 |
|
---|
241 | 'エフェクトの設定
|
---|
242 | Dim effect As DSEFFECTDESC
|
---|
243 | effect.dwSize = SizeOf(DSEFFECTDESC)
|
---|
244 | effect.dwFlags = 0
|
---|
245 | Select Case EffectFlag
|
---|
246 | Case EFFECT_STANDARD_CHORUS
|
---|
247 | effect.guidDSFXClass = GUID_DSFX_STANDARD_CHORUS
|
---|
248 | Case EFFECT_STANDARD_COMPRESSOR
|
---|
249 | effect.guidDSFXClass = GUID_DSFX_STANDARD_COMPRESSOR
|
---|
250 | Case EFFECT_STANDARD_DISTORTION
|
---|
251 | effect.guidDSFXClass = GUID_DSFX_STANDARD_DISTORTION
|
---|
252 | Case EFFECT_STANDARD_ECHO
|
---|
253 | effect.guidDSFXClass = GUID_DSFX_STANDARD_ECHO
|
---|
254 | Case EFFECT_STANDARD_FLANGER
|
---|
255 | effect.guidDSFXClass = GUID_DSFX_STANDARD_FLANGER
|
---|
256 | Case EFFECT_STANDARD_GARGLE
|
---|
257 | effect.guidDSFXClass = GUID_DSFX_STANDARD_GARGLE
|
---|
258 | Case EFFECT_STANDARD_I3DL2REVERB
|
---|
259 | effect.guidDSFXClass = GUID_DSFX_STANDARD_I3DL2REVERB
|
---|
260 | Case EFFECT_STANDARD_PARAMEQ
|
---|
261 | effect.guidDSFXClass = GUID_DSFX_STANDARD_PARAMEQ
|
---|
262 | Case EFFECT_WAVES_REVERB
|
---|
263 | effect.guidDSFXClass = GUID_DSFX_WAVES_REVERB
|
---|
264 | End Select
|
---|
265 | effect.dwReserved1 = 0
|
---|
266 | effect.dwReserved2 = 0
|
---|
267 | lpDSBuffer->SetFX(1, VarPtr(effect), NULL)
|
---|
268 |
|
---|
269 | SetEffect=1
|
---|
270 | End Function
|
---|
271 |
|
---|
272 | 'リピート回数を設定
|
---|
273 | Function SetRepeats(dwRepeats As DWord) As Long
|
---|
274 | If lpDMSegment->SetRepeats(dwRepeats)=S_OK Then
|
---|
275 | SetRepeats=TRUE
|
---|
276 | Else
|
---|
277 | SetRepeats=FALSE
|
---|
278 | End If
|
---|
279 | End Function
|
---|
280 |
|
---|
281 | 'シーク
|
---|
282 | Sub Seek(dwSeekTime As DWord) As Long
|
---|
283 | End Sub
|
---|
284 |
|
---|
285 | 'プレイ中であるかどうかを調べる
|
---|
286 | Function IsPlaying() As Long
|
---|
287 | If dx_lpDMPerformance->IsPlaying(lpDMSegment,NULL)=S_OK Then
|
---|
288 | IsPlaying=TRUE
|
---|
289 | Else
|
---|
290 | IsPlaying=FALSE
|
---|
291 | End If
|
---|
292 | End Function
|
---|
293 |
|
---|
294 | End Class
|
---|
295 |
|
---|
296 | '3D空間内音源
|
---|
297 | Class CAudio3D
|
---|
298 | Inherits CAudio
|
---|
299 |
|
---|
300 | lpDS3DBuffer As LPDIRECTSOUND3DBUFFER8 '3D空間内の音源
|
---|
301 |
|
---|
302 | Public
|
---|
303 | Sub CAudio3D()
|
---|
304 | CAudio()
|
---|
305 |
|
---|
306 | lpDS3DBuffer=0
|
---|
307 | End Sub
|
---|
308 | Sub ~CAudio3D()
|
---|
309 | If lpDS3DBuffer Then lpDS3DBuffer->Release()
|
---|
310 | End Sub
|
---|
311 |
|
---|
312 | 'ファイルパスを指定
|
---|
313 | Function Load(pszFileName As BytePtr) As Long
|
---|
314 | Dim hr As DWord
|
---|
315 |
|
---|
316 | hr=LoadAndSetting(pszFileName)
|
---|
317 | If hr=FALSE Then
|
---|
318 | Load=FALSE
|
---|
319 | Exit Function
|
---|
320 | End If
|
---|
321 |
|
---|
322 | 'オーディオパスの生成
|
---|
323 | hr = dx_lpDMPerformance->CreateStandardAudioPath(DMUS_APATH_DYNAMIC_3D, 64, FALSE, VarPtr(lpDMAudioPath))
|
---|
324 | If hr Then
|
---|
325 | Load=0
|
---|
326 | Exit Function
|
---|
327 | End If
|
---|
328 |
|
---|
329 | '3Dサウンドバッファの取得
|
---|
330 | hr = lpDMAudioPath->GetObjectInPath(DMUS_PCHANNEL_ALL, DMUS_PATH_BUFFER, 0,
|
---|
331 | GUID_NULL, 0, IID_IDirectSound3DBuffer8, VarPtr(lpDS3DBuffer))
|
---|
332 | If hr Then
|
---|
333 | Load=0
|
---|
334 | Exit Function
|
---|
335 | End If
|
---|
336 |
|
---|
337 | 'サウンドバッファの取得
|
---|
338 | hr = lpDMAudioPath->GetObjectInPath(DMUS_PCHANNEL_ALL, DMUS_PATH_BUFFER, 0,
|
---|
339 | GUID_NULL, 0, IID_IDirectSoundBuffer8, VarPtr(lpDSBuffer))
|
---|
340 | If hr Then
|
---|
341 | Load=0
|
---|
342 | Exit Function
|
---|
343 | End If
|
---|
344 |
|
---|
345 | ' オーディオパスのアクティブ化
|
---|
346 | lpDMAudioPath->Activate(TRUE)
|
---|
347 |
|
---|
348 | Load=1
|
---|
349 | End Function
|
---|
350 |
|
---|
351 | Function SetEffect(EffectFlag As EFFECT_FLAGS) As Long
|
---|
352 | 'CAudio3Dではエフェクトをサポートしない
|
---|
353 | SetEffect=0
|
---|
354 | End Function
|
---|
355 |
|
---|
356 | Function GetFrequency(lpdwFrequency As *DWord) As Long
|
---|
357 | Dim hr As Long
|
---|
358 | hr=lpDSBuffer->GetFrequency(lpdwFrequency)
|
---|
359 | If hr=S_OK Then
|
---|
360 | GetFrequency=TRUE
|
---|
361 | Else
|
---|
362 | GetFrequency=FALSE
|
---|
363 | End If
|
---|
364 | End Function
|
---|
365 |
|
---|
366 | Function SetFrequency(dwFrequency As DWord) As Long
|
---|
367 | Dim hr As Long
|
---|
368 | hr=lpDSBuffer->SetFrequency(dwFrequency)
|
---|
369 | If hr=S_OK Then
|
---|
370 | SetFrequency=TRUE
|
---|
371 | Else
|
---|
372 | SetFrequency=FALSE
|
---|
373 | End If
|
---|
374 | End Function
|
---|
375 |
|
---|
376 |
|
---|
377 | '--------------------------
|
---|
378 | ' 音源に関するメソッド
|
---|
379 | '--------------------------
|
---|
380 |
|
---|
381 | '最短距離の設定(この距離を超えると減衰が始まる)
|
---|
382 | Function SetMinDistance(distance As Single) As Long
|
---|
383 | Dim hr As Long
|
---|
384 | hr=lpDS3DBuffer->SetMinDistance(distance, DS3D_DEFERRED)
|
---|
385 | If hr=S_OK Then
|
---|
386 | SetMinDistance=TRUE
|
---|
387 | Else
|
---|
388 | SetMinDistance=FALSE
|
---|
389 | End If
|
---|
390 | End Function
|
---|
391 |
|
---|
392 | '最長距離の設定(聞こえる音量が0になり、減衰の計算がストップする距離)
|
---|
393 | Function SetMaxDistance(distance As Single) As Long
|
---|
394 | Dim hr As Long
|
---|
395 | hr=lpDS3DBuffer->SetMaxDistance(distance, DS3D_DEFERRED)
|
---|
396 | If hr=S_OK Then
|
---|
397 | SetMaxDistance=TRUE
|
---|
398 | Else
|
---|
399 | SetMaxDistance=FALSE
|
---|
400 | End If
|
---|
401 | End Function
|
---|
402 |
|
---|
403 | '音源の位置の設定
|
---|
404 | Function SetPosition(x As Single, y As Single, z As Single) As Long
|
---|
405 | Dim hr As Long
|
---|
406 | hr=lpDS3DBuffer->SetPosition(x,y,z,DS3D_DEFERRED)
|
---|
407 | If hr=S_OK Then
|
---|
408 | SetPosition=TRUE
|
---|
409 | Else
|
---|
410 | SetPosition=FALSE
|
---|
411 | End If
|
---|
412 | End Function
|
---|
413 |
|
---|
414 | '音源の速度の設定
|
---|
415 | Function SetVelocity(x As Single, y As Single, z As Single) As Long
|
---|
416 | Dim hr As Long
|
---|
417 | hr=lpDS3DBuffer->SetVelocity(x,y,z,DS3D_DEFERRED)
|
---|
418 | If hr=S_OK Then
|
---|
419 | SetVelocity=TRUE
|
---|
420 | Else
|
---|
421 | SetVelocity=FALSE
|
---|
422 | End If
|
---|
423 | End Function
|
---|
424 |
|
---|
425 | '音源のコーン角度の設定
|
---|
426 | Function SetConeAngles(dwInsideAngle As DWord, dwOutsideAngle As DWord) As Long
|
---|
427 | Dim hr As Long
|
---|
428 | hr=lpDS3DBuffer->SetConeAngles(dwInsideAngle,dwOutsideAngle,DS3D_DEFERRED)
|
---|
429 | If hr=S_OK Then
|
---|
430 | SetConeAngles=TRUE
|
---|
431 | Else
|
---|
432 | SetConeAngles=FALSE
|
---|
433 | End If
|
---|
434 | End Function
|
---|
435 |
|
---|
436 | '音源のコーン方向の設定
|
---|
437 | Function SetConeOrientation(x As Single, y As Single, z As Single) As Long
|
---|
438 | Dim hr As Long
|
---|
439 | hr=lpDS3DBuffer->SetConeOrientation(x,y,z,DS3D_DEFERRED)
|
---|
440 | If hr=S_OK Then
|
---|
441 | SetConeOrientation=TRUE
|
---|
442 | Else
|
---|
443 | SetConeOrientation=FALSE
|
---|
444 | End If
|
---|
445 | End Function
|
---|
446 |
|
---|
447 | '音源の外部角度の外側ボリュームの設定(1/100 dB 単位で指定)
|
---|
448 | Function SetConeOutsideVolume(ConeOutsideVolume As Long)
|
---|
449 | Dim hr As Long
|
---|
450 | hr=lpDS3DBuffer->SetConeOutsideVolume(ConeOutsideVolume,DS3D_DEFERRED)
|
---|
451 | If hr=S_OK Then
|
---|
452 | SetConeOutsideVolume=TRUE
|
---|
453 | Else
|
---|
454 | SetConeOutsideVolume=FALSE
|
---|
455 | End If
|
---|
456 | End Function
|
---|
457 | End Class
|
---|
458 |
|
---|
459 | 'リスナー
|
---|
460 | Class CListener
|
---|
461 | lpDS3DListener As LPDIRECTSOUND3DLISTENER8
|
---|
462 | Public
|
---|
463 | Sub CListener()
|
---|
464 | Dim hr As Long
|
---|
465 | Dim lpDMAudioPath As *IDirectMusicAudioPath8 'オーディオパス
|
---|
466 |
|
---|
467 | 'オーディオパスの生成
|
---|
468 | hr = dx_lpDMPerformance->CreateStandardAudioPath(DMUS_APATH_DYNAMIC_3D, 64, FALSE, VarPtr(lpDMAudioPath))
|
---|
469 | If hr Then
|
---|
470 | lpDMAudioPath=0
|
---|
471 | Exit Sub
|
---|
472 | End If
|
---|
473 |
|
---|
474 | 'リスナーの取得
|
---|
475 | hr = lpDMAudioPath->GetObjectInPath(0, DMUS_PATH_PRIMARY_BUFFER, 0,
|
---|
476 | GUID_NULL, 0, IID_IDirectSound3DListener8, VarPtr(lpDS3DListener))
|
---|
477 | If hr Then
|
---|
478 | lpDS3DListener=0
|
---|
479 | Exit Sub
|
---|
480 | End If
|
---|
481 |
|
---|
482 | 'オーディオパスを破棄
|
---|
483 | lpDMAudioPath->Release()
|
---|
484 | End Sub
|
---|
485 | Sub ~CListener()
|
---|
486 | If lpDS3DListener Then lpDS3DListener->Release()
|
---|
487 | End Sub
|
---|
488 |
|
---|
489 | 'リスナーの位置の設定
|
---|
490 | Function SetPosition(x As Single, y As Single, z As Single) As Long
|
---|
491 | Dim hr As Long
|
---|
492 | hr=lpDS3DListener->SetPosition(x,y,z,DS3D_DEFERRED)
|
---|
493 | If hr=S_OK Then
|
---|
494 | SetPosition=TRUE
|
---|
495 | Else
|
---|
496 | SetPosition=FALSE
|
---|
497 | End If
|
---|
498 | End Function
|
---|
499 |
|
---|
500 | 'リスナーの速度の設定
|
---|
501 | Function SetVelocity(x As Single, y As Single, z As Single) As Long
|
---|
502 | Dim hr As Long
|
---|
503 | hr=lpDS3DListener->SetVelocity(x,y,z,DS3D_DEFERRED)
|
---|
504 | If hr=S_OK Then
|
---|
505 | SetVelocity=TRUE
|
---|
506 | Else
|
---|
507 | SetVelocity=FALSE
|
---|
508 | End If
|
---|
509 | End Function
|
---|
510 |
|
---|
511 | 'リスナーの方向の設定
|
---|
512 | Function SetOrientation(FrontX As Single, FrontY As Single, FrontZ As Single, TopX As Single, TopY As Single, TopZ As Single) As Long
|
---|
513 | Dim hr As Long
|
---|
514 | hr=lpDS3DListener->SetOrientation(
|
---|
515 | FrontX,FrontY,FrontZ,
|
---|
516 | TopX,TopY,TopZ,
|
---|
517 | DS3D_DEFERRED)
|
---|
518 | If hr=S_OK Then
|
---|
519 | SetOrientation=TRUE
|
---|
520 | Else
|
---|
521 | SetOrientation=FALSE
|
---|
522 | End If
|
---|
523 | End Function
|
---|
524 |
|
---|
525 | 'リスナー及び音源の状況を更新する
|
---|
526 | Function CommitSettings() As BOOL
|
---|
527 | Dim hr As Long
|
---|
528 | hr=lpDS3DListener->CommitDeferredSettings()
|
---|
529 | If hr=S_OK Then
|
---|
530 | CommitSettings=TRUE
|
---|
531 | Else
|
---|
532 | CommitSettings=FALSE
|
---|
533 | End If
|
---|
534 | End Function
|
---|
535 | End Class
|
---|