サウンドの再生(U)          <TOP>


WAVファイルをドラッグ&ドロップし再生します。

PlaySound WAVファイルを再生

GetShortPathName ファイルの短い型式のパス名を取得

 

ファイルをドラッグ&ドロップしてEditBoxに入れ再生します。

Edit1は、複数行入力:あり、垂直オートスクロール:あり、シェルドロップ:あり、に設定しておきます。

 

'================================================================
'= WAVファイルの再生
'=    (PlaySound2.bas)
'================================================================
#include "Windows.bi"

' WAVファイルを再生する
Declare Function Api_PlaySound& Lib "winmm" Alias "PlaySoundA" (ByVal lpszName$, ByVal hModule&, ByVal dwFlags&)

' ファイルの短い形式のパス名を取得
Declare Function Api_GetShortPathName& Lib "Kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath$, ByVal lpszShortPath$, ByVal lBuffer&)

#define SND_Alias &H10000               'pszSoundはシステムイベントのエイリアス
#define SND_Alias_ID &H110000           'pszSoundは定義済みサウンド識別子
#define SND_APPLICATION &H80            'アプリケーション特有の関連づけで再生
#define SND_ASYNC &H1                   '非同期再生。再生が始まるとすぐに制御を返す
#define SND_FILENAME &H20000            'pszSoundはファイル名
#define SND_LOOP &H8                    '繰り返し再生
#define SND_MEMORY &H4                  'サウンドイベントのファイルはメモリにロード
#define SND_NODEFAULT &H2               '指定のサウンドが見つからない時、警告音などを出さずに終了
#define SND_NOSTOP &H10                 'すでに他のサウンドが再生されている時、指定のサウンドを再生しない
#define SND_NOWait &H2000               'ドライバがビジーの時はすぐに制御を返す
#define SND_PURGE &H40                  'サウンドの再生を停止
#define SND_RESOURCE &H40004            'pszSoundはリソース識別子を表わす
#define SND_SYNC &H0                    '同期再生。再生が終了するまで制御を返さない

Var Shared Edit1 As Object
Var Shared Button1 As Object
Var Shared Button2 As Object

Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14

Var Shared PathName As String
Var Shared Sound As String

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

    PathName = Edit1.GetWindowText
    Sound = Space$(260)

    Ret = Api_GetShortPathName(PathName, Sound, Len(Sound))

    If Len(Sound) > 0 Then
        Ret = Api_PlaySound(Sound, 0, SND_ASYNC Or SND_NODEFAULT Or SND_FILENAME)

        If Ret <> 0 Then
            SetWindowText "Soundは再生中!"
        Else
            SetWindowText "Soundは再生できません!"
        End If
    End If
End Sub

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

    Ret = Api_PlaySound(ByVal 0, 0, 0)

    SetWindowText "停止しました!"
End Sub

'================================================================
'= シェルドロップされたファイル名を取得
'================================================================
Declare Sub Edit1_DropFiles edecl (ByVal DF As Long)
Sub Edit1_DropFiles(ByVal DF As Long)
    Var CN As Long

    CN = GetDropFileCount(DF)
    PathName = GetDropFileName(DF, 0)
    Edit1.SetWindowText PathName
End Sub

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