Dim DX As New DxVBLib.DirectX7() Dim SD As DxVBLib.DirectSound Dim buffer As DxVBLib.DirectSoundBuffer Dim waveformatex As Object Dim sdbuffer As DxVBLib.DSBUFFERDESC Dim wvformat As DxVBLib.WAVEFORMATEX 中略 Private Sub frmDirectX3_load(ByVal eventsender As System.Object, ByVal eventarge As System.EventArgs) Handles MyBase.Load
directx7を使ったwavファイル再生プログラムが本にあったので、きちんと作って再生できました。
1秒程度の再生するファイルがたくさんあり、再生時間がまちまち(といっても100msオーダーでの話ですが)なので、
短いものにwait処理をかけて、再生時間をほほ一定にしたいのです。
wavファイルの再生時間を返してくれるような、または計算すれば再生時間が分かるようなものは
ないのでしょうか。ただし、waitを再生前に入れたいので、再生する前に情報は取得したいのです。
Dim DX As New DxVBLib.DirectX7()
Dim SD As DxVBLib.DirectSound
Dim buffer As DxVBLib.DirectSoundBuffer
Dim waveformatex As Object
Dim sdbuffer As DxVBLib.DSBUFFERDESC
Dim wvformat As DxVBLib.WAVEFORMATEX
中略
Private Sub frmDirectX3_load(ByVal eventsender As System.Object, ByVal eventarge As
System.EventArgs) Handles MyBase.Load
SD = DX.DirectSoundCreate("")
Call SD.setcooperativelevel(Me.Handle.ToInt32,
DxVBLib.CONST_DSSCLFLAGS.DSSCL_PRIORITY)
sdbuffer.lFlags = DxVBLib.CONST_DSBCAPSFLAGS.DSBCAPS_STATIC
Dim wave As String
wave = "waveformatex"
wvformat.nSize = wave.Length
wvformat.nChannels = 1
wvformat.lSamplesPerSec = 44100
wvformat.nBitsPerSample = 16
wvformat.nBlockAlign = wvformat.nBitsPerSample / 8 * wvformat.nChannels
wvformat.lAvgBytesPerSec = wvformat.lSamplesPerSec * wvformat.nBlockAlign
中略
'音声をバッファに貯める
buffer = SD.CreateSoundBufferFromFile("wavdata01.wav", sdbuffer, wvformat)
'ここに可変のwaitを入れたいのです。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
'再生
Call buffer.Play(0)
'再生終了するまで次の処理には行かない。
Do While buffer.GetStatus = DxVBLib.CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING
Application.DoEvents()
Loop