Vista以降で動作するレベルメーター(修正版)
Vista以降で動作するレベルメーター(修正版)
#module #define CLSID_IMMDeviceEnumerator "{BCDE0395-E52F-467C-8E3D-C4579291692E}" #define IID_IMMDeviceEnumerator "{A95664D2-9614-4F35-A746-DE8DB63617E6}" #define IID_IMMDevice "{D666063F-1587-4E43-81F1-B948E807363F}" #define IID_IAudioEndpointVolume "{5CDF2C82-841E-4546-9722-0CF74078229A}" #define IID_IPerChannelDbLevel "{C2F8E001-F205-4BC9-99BC-C13B1E048CCB}" #define IID_IAudioMeterInformation "{C02216F6-8C67-4B5B-9D00-D008E73E0064}" #define ERender 0x00000000 #define Console 0x00000000 #usecom IMMDeviceEnumerator IID_IMMDeviceEnumerator CLSID_IMMDeviceEnumerator #comfunc Enumerator_GetDefaultAudioEndpoint 4 int,int,var #usecom IMMDevice IID_IMMDevice CLSID_IMMDeviceEnumerator #comfunc Device_Activate 3 var,int,int,var #usecom IAudioEndpointVolume IID_IAudioEndpointVolume CLSID_IMMDeviceEnumerator #comfunc Volume_SetMasterVolumeLevelScalar 7 float,var #comfunc Volume_GetMasterVolumeLevelScalar 9 var #comfunc Volume_SetMute 14 int,int #comfunc Volume_GetMute 15 var #usecom IPerChannelDbLevel IID_IPerChannelDbLevel CLSID_IMMDeviceEnumerator #comfunc DbLevel_GetChannelCount 3 var #comfunc DbLevel_GetLevelRange 4 int,var,var,var #comfunc DbLevel_GetLevel 5 int,var #comfunc DbLevel_SetLevel 6 int,float,int #comfunc DbLevel_SetLevelUniform 7 float,int #comfunc DbLevel_SetLevelAllChannels 8 float,int,int #usecom IAudioMeterInformation IID_IAudioMeterInformation CLSID_IMMDeviceEnumerator #comfunc MeterInformation_GetPeakValue 3 var #comfunc MeterInformation_GetMeteringChannelCount 4 var #comfunc MeterInformation_GetChannelsPeakValues 5 int,var #comfunc MeterInformation_QueryHardwareSupport 6 var #defcfunc todouble int p1 temp = 0.0 lpoke temp, 4, (p1 & 0x80000000) | (((p1 & 0x7fffffff) >> 3) + ((p1 & 0x7fffffff) ! 0) * 0x38000000) lpoke temp, 0, p1 << 29 return temp #deffunc _OpenDevice newcom pMMDeviceEnumerator,IMMDeviceEnumerator if varuse(pMMDeviceEnumerator) = 0 : _CloseDevice : return -1 newcom pMMDevice,IMMDevice,-1,0 newcom pAudioEndpointVolume,IAudioEndpointVolume,-1,0 newcom pAudioMeterInformation,IAudioMeterInformation,-1,0 Enumerator_GetDefaultAudioEndpoint pMMDeviceEnumerator,ERender,Console,pMMDevice if varuse(pMMDevice) = 0 : _CloseDevice : return -2 guid = 0x5CDF2C82 , 0x4546841E , 0xF70C2297 , 0x9A227840 Device_Activate pMMDevice,guid,1,0,pAudioEndpointVolume if varuse(pAudioEndpointVolume) = 0 : _CloseDevice : return -3 guid = 0xC02216F6, 0x4B5B8C67, 0x08D0009D, 0x64003EE7 Device_Activate pMMDevice,guid,1,0,pAudioMeterInformation if varuse(pAudioMeterInformation) = 0 : _CloseDevice : return -4 return 0 #deffunc _CloseDevice if vartype(pAudioMeterInformation) = 6{ if varuse(pAudioMeterInformation) != 0{ delcom pAudioMeterInformation } } if vartype(pAudioEndpointVolume) = 6{ if varuse(pAudioEndpointVolume) != 0{ delcom pAudioEndpointVolume } } if vartype(pMMDevice) = 6{ if varuse(pMMDevice) != 0{ delcom pMMDevice } } if vartype(pMMDeviceEnumerator) = 6{ if varuse(pMMDeviceEnumerator) != 0{ delcom pMMDeviceEnumerator } } return #deffunc SetMasterVolumeVista int vol _OpenDevice if stat<0 : return stat uuid = 0,0,0,0 Volume_SetMasterVolumeLevelScalar pAudioEndpointVolume,1.0f*(double(vol)/100.0f),uuid _CloseDevice return #defcfunc GetMasterVolumeVista _OpenDevice if stat<0 : return stat vol = 0 Volume_GetMasterVolumeLevelScalar pAudioEndpointVolume,vol _CloseDevice return int(todouble(vol)*100.0f) #deffunc SetMuteVista int flag _OpenDevice if stat<0 : return stat Volume_SetMute pAudioEndpointVolume,flag,0 _CloseDevice return #defcfunc GetMuteVista _OpenDevice if stat<0 : return stat res = 0 Volume_GetMute pAudioEndpointVolume,res _CloseDevice return res #defcfunc GetPeakValueVista _OpenDevice if stat<0 : return stat res = 0 MeterInformation_GetPeakValue pAudioMeterInformation, res _CloseDevice return todouble(res) #defcfunc GetChannelsPeakValuesVista int ch _OpenDevice if stat<0 : return stat res = 0 MeterInformation_GetChannelsPeakValues pAudioMeterInformation, ch, res _CloseDevice return todouble(res) #defcfunc GetMeteringChannelCountVista _OpenDevice if stat<0 : return stat res = 0 MeterInformation_GetMeteringChannelCount pAudioMeterInformation, res _CloseDevice return res #global width 120,400 repeat peak = GetPeakValueVista() title "" + peak color : boxf /* if peak<0.7{ color ,255 }else:if peak<0.9{ color 255,255 }else{ color 255 } boxf 0, 400-peak*100*4, 120, 400 */ if peak>0.9{ color 255 boxf 0, 400-limitf(peak,0.9,1.0)*100*4, 120, 400 } if peak>0.7{ color 255,255 boxf 0, 400-limitf(peak,0.7,0.9)*100*4, 120, 400 } if peak>0{ color ,255 boxf 0, 400-limitf(peak,0,0.7)*100*4, 120, 400 } color 255,255,255 pos 0,0 mes ""+strf("%02.2f",peak*100)+"%" redraw 1 wait 1 redraw 0 loop stop