WaveIn および WaveOut コントロールは、もともと Visual Basic Version 6.0 で使用するように設計されています。Visual Basic .NET でも使用可能ですが、使用する際にいくつか注意点があります。
データ型の違い
Visual Basic Version 6.0 と Visual Basic .NET では、同じデータ型名であってもビット幅が異なっているものがあります。本サイトのプログラマーズ リファレンスでは、Visual Basic Version 6.0 のデータ型で表記しています。Visual Basic .NET で使用する際には、下記テーブルを参考に、データ型を読み替えてください。
VB6 データ型 | VB.NET データ型 | データ幅 |
---|---|---|
Integer | Short (Int16) | 16 ビット |
Long | Integer (Int32) | 32 ビット |
WaveIn.GetData メソッドの互換性
Visual Basic .NET では、WaveIn.GetData メソッドは正しく機能せず、常に 0 データ (無音) を返します。これを回避するには、以下の代替コードでプログラミングしてください。
- WaveIn_OnDone イベント プロシージャ内で、WaveIn.GetBufferAddress メソッドを呼び出し、内部バッファーのアドレスを取得します。
- 1 で取得したアドレスおよびデータ格納用配列を wifGetDataAny 関数に渡し、録音されたデータを配列にコピーします。
VB
' DLL プロシージャの宣言
Private Declare Auto Function wifGetData Lib "WaveIF.ocx" Alias "wifGetDataAny" (ByVal pDest() As Byte, ByVal pSrc As Integer, ByVal nLen As Integer) As Integer
VB
' WaveIn_OnDone イベント ハンドラ
Private Sub WaveIn_OnDone(ByVal eventSender As System.Object, ByVal eventArgs As AxWaveInterfaceLib._DWaveInEvents_OnDoneEvent) Handles WaveIn.OnDone
' データが録音されていれば、
If (eventArgs.bytesRecorded > 0) Then
' バッファーのアドレスを格納する変数。
Dim pSrc As Integer
' バッファーのアドレスを取得します。
pSrc = WaveIn.GetBufferAddress(eventArgs.bufferIndex)
' 録音されたデータを配列にコピーします。
wifGetData(Buffer, pSrc, eventArgs.bytesRecorded)
' 録音されたデータの処理
'...
End If
End Sub