AVIファイルの再生(V)          <TOP>


AVIFileOpen AVIファイルオープン
AVIFileRelease AVIファイルハンドル解放
AVIFileInfo AVIファイル情報取得
AVIFileInit AVIファイル初期化
AVIFileExit AVIファイルライブラリ解放
mciSendString 文字列をMCIに送信
mciGetErrorString MCIエラーコードを記述する文字列を取得
mciExecute MCIにアクセス

 

AVIのサイズを取得し、スクリーン座標(100,100)の位置に、指定したスピードで再生します。

 

'================================================================
'= AVIファイルの再生(V)
'=    (mciExecute.bas)
'================================================================
#include "Windows.bi"

Type AVIFILEINFO
    dwMaxBytesPerSec      As Long           'ファイルのデータレートのほぼ最大値
    dwFlags               As Long           '拡張可能なフラグ
    dwCaps                As Long           '適応フラグ
    dwStreams             As Long           'ファイル中のストリーム数
    dwSuggestedBufferSize As Long           '読み込み時に必要となる予想されるバッファサイズ(バイト)
    dwWidth               As Long           'AVIファイル中の幅(ピクセル)
    dwHeight              As Long           'AVIファイル中の高さ(ピクセル)
    dwScale               As Long           '全ファイルに適応できるタイムスケール
    dwRate                As Long           '(dwRate÷dwScale)は秒間サンプル数
    dwLength              As Long           'AVIファイルサイズ。単位は(dwRate÷dwScale)
    dwEditCount           As Long           'AVIファイルに追加、またはAVIファイルから削除されたストリームの数
    szFileType            As String * 64    'ファイルタイプ情報の記述を含む、Nullで終わる文字列
End Type

' AVIファイルオープン
Declare Function Api_AVIFileOpen& Lib "avifil32" Alias "AVIFileOpenA" (ppFile&, ByVal szFile$, ByVal Mode&, pclsidHandler As Any)

' AVIファイルハンドル解放
Declare Function Api_AVIFileRelease& Lib "avifil32" Alias "AVIFileRelease" (ByVal pFile&)

' AVIファイル情報取得
Declare Function Api_AVIFileInfo& Lib "avifil32" Alias "AVIFileInfoA" (ByVal pFile&, pfi As AVIFILEINFO, ByVal lSize&)

' AVIファイル初期化
Declare Sub Api_AVIFileInit Lib "avifil32" Alias "AVIFileInit" ()

' AVIファイルライブラリ解放
Declare Sub Api_AVIFileExit Lib "avifil32" Alias "AVIFileExit" ()

' MCIにアクセス
Declare Function Api_mciExecute& Lib "winmm" Alias "mciExecute" (ByVal lpstrCommand$)

#define OF_SHARE_DENY_WRITE &H20            '他のプロセスから書き込み可能

Var Shared sAVIFile As String
Var Shared AviInfo As AVIFILEINFO
Var Shared aviWidth As Long
Var Shared aviHeight As Long

Var Shared Text1 As Object
Var Shared Edit1 As Object

Text1.Attach GetDlgItem("Text1")
Edit1.Attach GetDlgItem("Edit1")

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var hFile As Long

    sAVIFile = WinOpEndlg("ファイルのオープン", "*.avi", "aviファイル(*.avi)", 0)
    If sAVIFile <> Chr$(&H1B) Then
        Text1.SetWindowText sAVIFile

        'AVIファイル初期化
        Api_AVIFileInit

        'AVIファイルハンドル取得
        Ret = Api_AVIFileOpen(hFile, sAVIFile, OF_SHARE_DENY_WRITE, ByVal 0)

        If Ret = 0 Then

            'AVIインフォメーション検索
            Ret = Api_AVIFileInfo(hFile, AviInfo, Len(AviInfo))

            'AVIファイルのサイズを取得
            If Ret = 0 Then
                aviWidth = AviInfo.dwWidth
                aviHeight = AviInfo.dwHeight
            End If

            'AVIファイルハンドル解放
            Ret = Api_AVIFileRelease(hFile)
        Else
            A% = MessageBox("", "AVIファイルオープンエラー", 0, 2)
        End If
        Api_AVIFileExit
    Else
        sAVIFile = ""
        Text1.SetWindowText sAVIFile
    End If
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var Spd As Integer
    Var Ret As Long

    If sAVIFILE = "" Then Exit Sub

    Spd = Val(Edit1.GetWindowText)
    If Spd < 1 Or Spd > 10 Then Spd = 5 : Edit1.SetWindowText Trim$(Str$(Spd))

    'AVIファイルを開く
    Ret = Api_mciExecute("Open " & sAVIFile & " Type AviVideo Alias tokovideo Style Popup")
    
    'ディスプレイウィンドウを(100,100)の位置に設定
    Ret = Api_mciExecute("Put tokovideo Window At 100 100 " & Trim$(Str$(aviWidth)) & " " & Trim$(Str$(aviHeight)))
    
    '再生スピードをSpd倍に
    Ret = Api_mciExecute("Set tokovideo Speed " & Trim$(Str$(Spd * 1000)))
    
    'AVIの再生
    Ret = Api_mciExecute("Play tokovideo Wait")
    
    'メモリークローズ
    Ret = Api_mciExecute("Close tokovideo")
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End