HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1218
魚犬標準のミキサーの音量調整4解決


魚犬

リンク

2017/12/18(Mon) 19:29:20|NO.82061

Windows7標準のミキサーの特定のソフトの音量調整を、
HSPで制御することは可能でしょうか?
http://soundengine.jp/wordpress/tips/tutorial/2653/



この記事に返信する


Hiro

リンク

2017/12/24(Sun) 22:55:20|NO.82081

Core Audioで可能かと思います。
Core Audio APIs
https://msdn.microsoft.com/en-us/library/windows/desktop/dd370802

以下、取得のみのサンプルです。
#include "ole32.as"
// tofloat todouble by sprocket氏 #module #defcfunc tofloat double p1 temp = p1 return lpeek(temp) >> 29 & 7 | (p1 < 0) << 31 |lpeek(temp, 4) - (p1 ! 0) * 0x38000000 << 3 #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 #global #ifndef IMMDeviceEnumerator #define global IID_IMMDeviceEnumerator "{A95664D2-9614-4F35-A746-DE8DB63617E6}" #define global CLSID_MMDeviceEnumerator "{BCDE0395-E52F-467C-8E3D-C4579291692E}" #usecom global IMMDeviceEnumerator IID_IMMDeviceEnumerator CLSID_MMDeviceEnumerator #comfunc global IMMDeviceEnumerator_EnumAudioEndpoints 3 int,int,var #comfunc global IMMDeviceEnumerator_GetDefaultAudioEndpoint 4 int,int,var #comfunc global IMMDeviceEnumerator_GetDevice 5 wstr,var #comfunc global IMMDeviceEnumerator_RegisterEndpointNotificationCallback 6 int #comfunc global IMMDeviceEnumerator_UnregisterEndpointNotificationCallback 7 int #endif // IMMDeviceEnumerator #ifndef IMMDeviceCollection #define global IID_IMMDeviceCollection "{0BD7A1BE-7A1A-44DB-8397-CC5392387B5E}" #usecom global IMMDeviceCollection IID_IMMDeviceCollection "{}" #comfunc global IMMDeviceCollection_GetCount 3 var #comfunc global IMMDeviceCollection_Item 4 int,var #endif // IMMDeviceCollection #ifndef IMMDevice #define global IID_IMMDevice "{D666063F-1587-4E43-81F1-B948E807363F}" #usecom global IMMDevice IID_IMMDevice "{}" #comfunc global IMMDevice_Activate 3 var,int,int,var #comfunc global IMMDevice_OpenPropertyStore 4 int,var; #comfunc global IMMDevice_GetId 5 wstr #comfunc global IMMDevice_GetState 6 var #endif // IMMDevice #ifndef IAudioEndpointVolume #define global IID_IAudioEndpointVolume "{5CDF2C82-841E-4546-9722-0CF74078229A}" #usecom global IAudioEndpointVolume IID_IAudioEndpointVolume "{}" #comfunc global IAudioEndpointVolume_RegisterControlChangeNotify 3 int #comfunc global IAudioEndpointVolume_UnregisterControlChangeNotify 4 int #comfunc global IAudioEndpointVolume_GetChannelCount 5 var #comfunc global IAudioEndpointVolume_SetMasterVolumeLevel 6 int,int #comfunc global IAudioEndpointVolume_SetMasterVolumeLevelScalar 7 int,int #comfunc global IAudioEndpointVolume_GetMasterVolumeLevel 8 var #comfunc global IAudioEndpointVolume_GetMasterVolumeLevelScalar 9 var #comfunc global IAudioEndpointVolume_SetChannelVolumeLevel 10 int,int,int #comfunc global IAudioEndpointVolume_SetChannelVolumeLevelScalar 11 int,int,int #comfunc global IAudioEndpointVolume_GetChannelVolumeLevel 12 int,var #comfunc global IAudioEndpointVolume_GetChannelVolumeLevelScalar 13 int,var #comfunc global IAudioEndpointVolume_SetMute 14 int,int #comfunc global IAudioEndpointVolume_GetMute 15 var #comfunc global IAudioEndpointVolume_GetVolumeStepInfo 16 var,var #comfunc global IAudioEndpointVolume_VolumeStepUp 17 var #comfunc global IAudioEndpointVolume_VolumeStepDown 18 var #comfunc global IAudioEndpointVolume_QueryHardwareSupport 19 var #comfunc global IAudioEndpointVolume_GetVolumeRange 20 var,var,var #endif // IAudioEndpointVolume #ifndef IAudioSessionManager2 #define global IID_IAudioSessionManager2 "{77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F}" #usecom global IAudioSessionManager2 IID_IAudioSessionManager2 "{}" #comfunc global IAudioSessionManager2_GetSessionEnumerator 5 var #comfunc global IAudioSessionManager2_RegisterSessionNotification 6 int #comfunc global IAudioSessionManager2_UnregisterSessionNotification 7 int #comfunc global IAudioSessionManager2_RegisterDuckNotification 8 wstr,int #comfunc global IAudioSessionManager2_UnregisterDuckNotification 9 int #endif // IAudioSessionManager2 #ifndef IAudioSessionEnumerator #define global IID_IAudioSessionEnumerator "{E2F5BB11-0570-40CA-ACDD-3AA01277DEE8}" #usecom global IAudioSessionEnumerator IID_IAudioSessionEnumerator "{}" #comfunc global IAudioSessionEnumerator_GetCount 3 var #comfunc global IAudioSessionEnumerator_GetSession 4 int,var #endif // IAudioSessionEnumerator #ifndef IAudioSessionControl #define global IID_IAudioSessionControl "{F4B1A599-7266-4319-A8CA-E70ACB11E8CD}" #usecom global IAudioSessionControl IID_IAudioSessionControl "{}" #comfunc global IAudioSessionControl_GetState 3 var #comfunc global IAudioSessionControl_GetDisplayName 4 var #comfunc global IAudioSessionControl_SetDisplayName 5 wstr,int #comfunc global IAudioSessionControl_GetIconPath 6 var #comfunc global IAudioSessionControl_SetIconPath 7 wstr,int #comfunc global IAudioSessionControl_GetGroupingParam 8 var #comfunc global IAudioSessionControl_SetGroupingParam 9 var,int #comfunc global IAudioSessionControl_RegisterAudioSessionNotification 10 int #comfunc global IAudioSessionControl_UnregisterAudioSessionNotification 11 int #endif // IAudioSessionControl #ifndef IAudioSessionControl2 #define global IID_IAudioSessionControl2 "{bfb7ff88-7239-4fc9-8fa2-07c950be9c6d}" #usecom global IAudioSessionControl2 IID_IAudioSessionControl2 "{}" #comfunc global IAudioSessionControl2_Release 2 #comfunc global IAudioSessionControl2_GetState 3 var #comfunc global IAudioSessionControl2_GetDisplayName 4 var #comfunc global IAudioSessionControl2_SetDisplayName 5 wstr,int #comfunc global IAudioSessionControl2_GetIconPath 6 var #comfunc global IAudioSessionControl2_SetIconPath 7 wstr,int #comfunc global IAudioSessionControl2_GetGroupingParam 8 var #comfunc global IAudioSessionControl2_SetGroupingParam 9 var,int #comfunc global IAudioSessionControl2_RegisterAudioSessionNotification 10 int #comfunc global IAudioSessionControl2_UnregisterAudioSessionNotification 11 int #comfunc global IAudioSessionControl2_GetSessionIdentifier 12 var #comfunc global IAudioSessionControl2_GetSessionInstanceIdentifier 13 var #comfunc global IAudioSessionControl2_GetProcessId 14 var #comfunc global IAudioSessionControl2_IsSystemSoundsSession 15 #comfunc global IAudioSessionControl2_SetDuckingPreference 16 int #endif // IAudioSessionControl2 #ifndef ISimpleAudioVolume #define global IID_ISimpleAudioVolume "{87CE5498-68D6-44E5-9215-6DA47EF883D8}" #usecom global ISimpleAudioVolume IID_ISimpleAudioVolume "{}" #comfunc global ISimpleAudioVolume_SetMasterVolume 3 int,int #comfunc global ISimpleAudioVolume_GetMasterVolume 4 var #comfunc global ISimpleAudioVolume_SetMute 5 int,int #comfunc global ISimpleAudioVolume_GetMute 6 var #endif // ISimpleAudioVolume sdim bufMB, 1024 newcom devEnum, IMMDeviceEnumerator IMMDeviceEnumerator_GetDefaultAudioEndpoint devEnum, 0, 0, p if ( stat ){ end } newcom dev, IMMDevice, -1, p iid = 0x5cdf2c82, 0x4546841e, 0xf70c2297, 0x9a227840 IMMDevice_Activate dev, iid, 1, 0, p if ( stat ){ end } newcom aev, IAudioEndpointVolume, -1, p IAudioEndpointVolume_GetMute aev, p1 IAudioEndpointVolume_GetMasterVolumeLevelScalar aev, p2 p3 = int(todouble(p2) * 100) bufMB += strf("IAudioEndpointVolume Mute: %d Vol: %d\n\n", p1, p3) iid = 0x77aa99a0, 0x484f1bd6, 0x652cc78b, 0x6f9b9a4c IMMDevice_Activate dev, iid, 1, 0, p if ( stat ){ end } newcom sm, IAudioSessionManager2, -1, p IAudioSessionManager2_GetSessionEnumerator sm, p if ( stat ){ end } newcom sEnum, IAudioSessionEnumerator, -1, p IAudioSessionEnumerator_GetCount sEnum, p bufMB += strf("IAudioSessionEnumerator_GetCount: %d\n\n", p) bufMB += strf("ProcessID State Mute Vol Name\n") repeat p IAudioSessionEnumerator_GetSession sEnum, cnt, p newcom sc, IAudioSessionControl2, -1, p IAudioSessionControl2_GetProcessId sc, p1 IAudioSessionControl2_GetState sc, p2 IAudioSessionControl2_GetDisplayName sc, p dupptr dp, p, 1024, 2 querycom sav, sc, ISimpleAudioVolume ISimpleAudioVolume_GetMute sav, p3 ISimpleAudioVolume_GetMasterVolume sav, p4 p5 = int(todouble(p4) * 100) bufMB += strf("%9d %4d %4d %4d %s\n", p1, p2, p3, p5, cnvwtos(dp)) CoTaskMemFree p delcom sc loop title "Test Core Audio" objmode 2 mesbox bufMB, ginfo_winx, ginfo_winy, 4 delcom sEnum delcom sm delcom aev delcom dev delcom devEnum stop



魚犬

リンク

2017/12/25(Mon) 18:22:44|NO.82085

>>Hiroさん
サンプルありがとうございます。
ミキサーのボリュームの取得できました。

ISimpleAudioVolume_SetMasterVolumeを使ってボリュームのセットを試してみましたが、
エラーが出て出来ませんでした。
https://msdn.microsoft.com/en-us/library/windows/desktop/dd316537(v=vs.85).aspx

ISimpleAudioVolume_SetMasterVolume 0.5,p4
APIはさっぱりわからないのですが、
もう少し試行錯誤してみます。



Hiro

リンク

2017/12/25(Mon) 21:20:41|NO.82087

第一引数はfloatなので、HSPのdoubleから変換する必要があります。

ISimpleAudioVolume_SetMasterVolume sav, tofloat(0.5), 0




魚犬

リンク

2017/12/28(Thu) 17:58:31|NO.82101

>>Hiro様
失礼しました。ご指定の方法でできました。
マイナーな質問なのにサンプルまで作って頂きありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.