コード: 全て選択
'-----呼び出し側-----
Dim Play As Sound '音楽再生用オブジェクト
Sub MainWnd_PlayButton_Click()
Dim idThread As DWord 'スレッドID
'新規スレッドで再生関数を呼び出す
hThread=CreateThread(ByVal 0,0, AddressOf(Play.PlayCommand),0,0,VarPtr(idThread))
End Sub
Sub MainWnd_StopButton_Click()
Play.StopCommand() '停止
End Sub
'------クラス側-----
Class Sound '音楽再生用クラス
Public
Sub PlayCommand()
Dim DevID As Long
Dim bErr As Long
Dim mpp As MCI_PLAY_PARMS
Dim buffer[MAX_PATH-1] As Byte
Dim dwCallback As DWord
Dim itemStr As BytePtr
Dim iniItem As BytePtr
itemStr=calloc(255)
iniItem=calloc(255)
'再生中の場合は停止させる
If mop.wDeviceID Then StopCommand()
'メディア ファイルのパスを設定します。
mop.lpstrElementName=buffer
GetTreeCaretText(hAny,itemStr,255) '選択されているアイテム名の取得
If lstrcmp(ini,"0")<>0 Then 'iniファイルがデフォルト以外
lstrcpy(iniItem,ini) 'iniファイルの内容をコピー
lstrcpy(mop.lpstrElementName,lstrcat(iniItem,itemStr)) '連結
Else 'デフォルトのとき
mop.lpstrElementName=ItemDir(itemStr) '連結
End If
'メッセージ通知のためのウィンドウを指定
mop.dwCallback=hMainWnd As DWord
'MCIデバイスをオープン
bErr=mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT,mop)
If bErr Then
'デバイスを閉じる
mciSendCommand(DevID,MCI_CLOSE,MCI_WAIT,dwCallback)
MessageBox(hMainWnd,"デバイスのオープンに失敗","エラー",MB_OK)
Exit Sub
End If
'再生
mpp.dwCallback=hMainWnd As DWord
bErr=mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY,mpp)
If bErr Then
'デバイスを閉じる
mciSendCommand(DevID,MCI_CLOSE,MCI_WAIT,dwCallback)
MessageBox(hMainWnd,"デバイスの再生に失敗","エラー",MB_OK)
Exit Sub
End If
'停止ボタンを有効化する。
EnableWindow(GetDlgItem(hMainWnd,StopButton),1)
free(itemStr)
free(iniItem)
End Sub
Sub StopCommand()
Dim DevID As Long
Dim bErr As Long
Dim dwCallback As DWord
'停止
bErr=mciSendCommand(mop.wDeviceID,MCI_STOP,MCI_WAIT,dwCallback)
If bErr Then
'デバイスを閉じる
mciSendCommand(mop.wDeviceID,MCI_CLOSE,MCI_WAIT,dwCallback)
MessageBox(hMainWnd,"デバイスの停止に失敗","エラー",MB_OK)
'停止ボタンを無効にする
EnableWindow(GetDlgItem(hMainWnd,StopButton),0)
Exit Sub
End If
'デバイスを閉じる
mciSendCommand(mop.wDeviceID,MCI_CLOSE,MCI_WAIT,dwCallback)
mop.wDeviceID=0
'停止ボタンを無効にする
EnableWindow(GetDlgItem(hMainWnd,StopButton),0)
CloseHandle(hThread) 'スレッドハンドルを閉じる
End Sub
End Class