09/01/02 17:24:57 dpIHoV0B0
■ サウンドデバイスの一覧を改行区切りで得る関数
waveOut/waveIn , midiOut/midiIn に対応
複数の入出力デバイスがなければ全く意味がない。
SoundDevice_GetDeviceList(media="wave", isOut=true, requireId=false) {
static cbxoc:=256,delim:="`n"
uDeviceID:=0
func := InStr(media, "wave") ? "wave" : InStr(media, "midi") ? "midi" : ""
if (!func)
return
func .= isOut ? "Out" : "In"
VarSetCapacity(xoc, cbxoc, 0x00) ; Xoc (WAVEOUTCAPS / MIDIOUTCAPS)
Loop {
result := DllCall("winmm.dll\" func "GetDevCapsA", UInt,uDeviceID, Int,&xoc, UInt,cbxoc, Int)
if (result == 2) ; MMSYSERR_BADDEVICEID
break
if (result == 0) { ; MMSYSERR_NOERROR
devName:=""
list .= StructGetString(xoc, 8) ; WAVEOUTCAPS と MIDIOUTCAPSのデバイス名称までは構造が同じ
. (requireId ? ("`t" uDeviceID) : "")
. delim
}
uDeviceID++
}
StringTrimRight, list, list, % StrLen(delim)
return list
}