ab.com コミュニティ

ActiveBasicを通したコミュニケーション
前回の訪問日時: 2019年4月23日(火) 22:52 現在時刻 - 2019年4月23日(火) 22:52

All times are UTC+09:00




 [ 3 件の記事 ] 
作成者 メッセージ
 記事の件名: IEとMCIループ再生
投稿記事Posted: 2005年12月08日(木) 01:51 
 かなりお久しぶりです、Sunshineです。
 MCIのループ再生ついて質問なのですが、再生途中にIEなどのアプリケーションが1回でも立ち上がってしまうと1回しかループされません。どうやら、MainWnd_MciNotifyイベントが1回しか呼び出されなくなってしまうようです。もちろん、IEなどのアプリケーションが立ち上がらなかった場合はループ再生を続けることができます。
 どう直せばいいでしょうか。

 以下はそのソースです。構造体を用いています。環境上、タイムラグが起きないように、MIDI再生のデバイスはMPEGVideoを使って再生しています。

構造体
コード:
Class BACKGROUNDMUSIC
	Private
		mop As MCI_OPEN_PARMS
		mpp As MCI_PLAY_PARMS
		msp As MCI_SET_PARMS
		dwCallback As DWord
		bErr As DWord
	Public
		Sub ~BACKGROUNDMUSIC()
			Stop()
		End Sub
		Sub GetError(pszText As BytePtr, cchText As Long)
			mciGetErrorString(bErr, pszText, cchText)
		End Sub
		Sub Stop()
			'デバイスの停止
			bErr = mciSendCommand(mop.wDeviceID,MCI_STOP,MCI_WAIT,dwCallback)

			'デバイスのクローズ
			mciSendCommand(mop.wDeviceID,MCI_CLOSE,MCI_WAIT,dwCallback)
			mop.wDeviceID=0
		End Sub
		Sub Play(hCallBackWnd As HWND, filename As BytePtr, from As DWord)
			mpp.dwFrom = from
			If mop.wDeviceID Then Stop()

			mop.lpstrElementName = filename
			mop.dwCallback = hCallBackWnd
			mop.lpstrDeviceType = "MPEGVideo"
			bErr=mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT or MCI_OPEN_TYPE,mop)

			msp.dwTimeFormat = MCI_FORMAT_MILLISECONDS
			mciSendCommand(mop.wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, msp)

			mpp.dwCallback = hCallBackWnd
			bErr=mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY,mpp)
		End Sub
		Sub Notify(flags As Long, DevID As Long)
			If flags = MCI_NOTIFY_SUCCESSFUL Then
				bErr=mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY or MCI_FROM,mpp)
			End If
		End Sub
End Class
ウィンドウ処理
コード:
'-----------------------------------------------------------------------------
'  イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd

' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。

Dim BGM As BACKGROUNDMUSIC

'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数

Function MainWndProc(hWnd As DWord, dwMsg As DWord, wParam As DWord, lParam As DWord) As DWord
	' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。

	' イベントプロシージャの呼び出しを行います。
	MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function


'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。

Sub MainWnd_Destroy()
	BGM.Stop()

	BGMTest_DestroyObjects()
	PostQuitMessage(0)
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
	BGM.Play(hMainWnd, "チューリップ.mid", 0)
End Sub

Sub MainWnd_MciNotify(flags As Long, DevID As DWord)
	BGM.Notify(flags, DevID)
End Sub


ページトップ
   
 
 記事の件名:
投稿記事Posted: 2005年12月08日(木) 16:51 
mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY or MCI_FROM,mpp)
の代わりに、
コード:
	Dim mpp As MCI_PLAY_PARMS,msp as MCI_SEEK_PARMS

	mciSendCommand(mop.wDeviceID,MCI_SEEK,MCI_SEEK_TO_START or MCI_WAIT,msp)
	mciSendCommand(mop.wDeviceID,MCI_PLAY,MCI_NOTIFY ,mpp)
とすればうまくいくようです。


ページトップ
   
 
 記事の件名:
投稿記事Posted: 2005年12月10日(土) 00:53 
 返信がおくれてすみません。
 うまくいきました。ありがとうございます。


ページトップ
   
 
 [ 3 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: AhrefsBot, Bing [Bot], CCBot, SemrushBot & ゲスト[0人]


トピック投稿: 不可
返信投稿: 不可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke