Skip to content

Commit be0c7c4

Browse files
committed
Allow switching volume levels
1 parent 1c560e4 commit be0c7c4

5 files changed

Lines changed: 101 additions & 44 deletions

File tree

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# AudioSwitcher
22

3-
Quickly switch active audio devices for example from webcam & speakers to headset and back
3+
Quickly switch active audio devices for example from webcam & speakers to headset and back. \
4+
Change output volume levels depending on active audio device.
45

56
![Screenshot](screenshot.png)
67

@@ -10,6 +11,8 @@ The correct device-IDs have to be configured in audioswitcher.ini.
1011
For the device-IDs start SoundVolumeView in the subdirectory SoundVolumeView, sort entries after column "Type" and go to the entries with "Type" = device,
1112
click on the right mouse button, select "Properties" and then use the entry for "Command-Line Friendly ID".
1213

14+
Volume levels, texts, font and fontsizes can also be configured in audioswitcher.ini.
15+
1316
## Download
1417
Windows: ![audioswitcher.zip](https://github.com/alexgit2k/audioswitcher/releases/latest/download/audioswitcher.zip)
1518

audioswitcher-window.pbf

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,21 @@
99

1010
Global WindowMain
1111

12-
Global ButtonDevices1, ButtonDevices2
13-
14-
15-
Procedure OpenWindowMain(x = 0, y = 0, width = 250, height = 150)
16-
WindowMain = OpenWindow(#PB_Any, x, y, width, height, "AudioSwitcher", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
17-
;ButtonDevices1 = ButtonImageGadget(#PB_Any, 10, 10, 230, 60, 0, #PB_Button_Toggle)
18-
;ButtonDevices2 = ButtonImageGadget(#PB_Any, 10, 80, 230, 60, 0, #PB_Button_Toggle)
19-
ButtonDevices1 = BevelButton::New(10, 10, 230, 60, 0, "Webcam", font, #PB_Button_Toggle)
20-
ButtonDevices2 = BevelButton::New(10, 80, 230, 60, 0, "Headset", font, #PB_Button_Toggle)
12+
Global ButtonDevices1, ButtonDevices2, HeadLineDevices, ButtonVolumes1, ButtonVolumes2, HeadlineVolumes
13+
14+
15+
Procedure OpenWindowMain(x = 0, y = 0, width = 400, height = 180)
16+
WindowMain = OpenWindow(#PB_Any, x, y, width, height, "AudioSwitcher", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_Invisible)
17+
;ButtonDevices1 = ButtonImageGadget(#PB_Any, 10, 40, 230, 60, 0, #PB_Button_Toggle)
18+
;ButtonDevices2 = ButtonImageGadget(#PB_Any, 10, 110, 230, 60, 0, #PB_Button_Toggle)
19+
ButtonDevices1 = BevelButton::New(10, 40, 230, 60, 0, "Webcam", font, #PB_Button_Toggle)
20+
ButtonDevices2 = BevelButton::New(10, 110, 230, 60, 0, "Headset", font, #PB_Button_Toggle)
21+
HeadlineDevices = TextGadget(#PB_Any, 10, 10, 230, 25, "Devices", #PB_Text_Center)
22+
;ButtonVolumes1 = ButtonImageGadget(#PB_Any, 250, 40, 140, 60, 0, #PB_Button_Toggle)
23+
;ButtonVolumes2 = ButtonImageGadget(#PB_Any, 250, 110, 140, 60, 0, #PB_Button_Toggle)
24+
ButtonVolumes1 = BevelButton::New(250, 40, 140, 60, 0, "15", font, #PB_Button_Toggle)
25+
ButtonVolumes2 = BevelButton::New(250, 110, 140, 60, 0, "5", font, #PB_Button_Toggle)
26+
HeadlineVolumes = TextGadget(#PB_Any, 250, 10, 140, 25, "Volumes", #PB_Text_Center)
2127
EndProcedure
2228

2329
Procedure WindowMain_Events(event)

audioswitcher.ini

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
[base]
22
font = Segoe UI
33
fontSize = 19
4-
last = devices1
4+
fontSizeHeadline = 12
5+
lastDevice = devices1
6+
lastVolume = volumes1
7+
devicesHeadline = Devices
8+
volumesHeadline = Volumes
59

610
[devices1]
711
devices1Text = Webcam
812
devices1Speaker = Logitech Speaker\Device\Speaker\Render
913
devices1Mic = Logitech Webcam\Device\Microphone\Capture
14+
devices1volumes1Text = Normal
15+
devices1volumes1Value = 20
16+
devices1volumes2Text = Low
17+
devices1volumes2Value = 10
1018

1119
[devices2]
1220
devices2Text = Headset
1321
devices2Speaker = Realtek High Definition Audio\Device\Headset\Render
1422
devices2Mic = Realtek High Definition Audio\Device\Headset Microphone\Capture
23+
devices2volumes1Text = Normal1
24+
devices2volumes1Value = 30
25+
devices2volumes2Text = Low1
26+
devices2volumes2Value = 15

audioswitcher.pb

Lines changed: 69 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Global NewMap Config$()
66

77
; Procedures
88
Declare ReadPreference(Map PrefMap$())
9-
Declare SoundDevice(Device$, Type = -1, Wait = #False)
10-
Declare WritePreference(Device$)
9+
Declare SoundDevice(Command$, Device$, Param$ = "", Wait = #False)
10+
Declare WritePreference(Key$, Device$)
1111

1212
; Config
1313
ReadPreference(Config$())
@@ -16,88 +16,124 @@ ReadPreference(Config$())
1616
XIncludeFile "bevelbutton.pb"
1717
XIncludeFile "audioswitcher-window.pbf"
1818

19-
; Font
19+
; Fonts
2020
gadgetFont = LoadFont(#PB_Any, Config$("font"), Val(Config$("fontSize")), #PB_Font_HighQuality)
2121
font = FontID(gadgetFont)
22+
gadgetFont = LoadFont(#PB_Any, Config$("font"), Val(Config$("fontSizeHeadline")), #PB_Font_HighQuality)
23+
fontHeadline = FontID(gadgetFont)
2224

2325
; Window
2426
OpenWindowMain()
27+
; Set text
28+
SetGadgetFont(HeadlineDevices, fontHeadline)
29+
SetGadgetText(HeadlineDevices, Config$("devicesHeadline"))
2530
BevelButton::SetText(ButtonDevices1, Config$("devices1Text"), font)
2631
BevelButton::SetText(ButtonDevices2, Config$("devices2Text"), font)
32+
SetGadgetFont(HeadlineVolumes, fontHeadline)
33+
SetGadgetText(HeadlineVolumes, Config$("volumesHeadline"))
34+
BevelButton::SetText(ButtonVolumes1, Config$(Config$("lastDevice") + "volumes1Text"), font)
35+
BevelButton::SetText(ButtonVolumes2, Config$(Config$("lastDevice") + "volumes2Text"), font)
2736

2837
; Set current state
29-
Select Config$("last")
38+
Select Config$("lastDevice")
3039
Case "devices1"
3140
BevelButton::Enable(ButtonDevices1)
3241
BevelButton::Disable(ButtonDevices2)
3342
Case "devices2"
3443
BevelButton::Enable(ButtonDevices2)
3544
BevelButton::Disable(ButtonDevices1)
3645
EndSelect
46+
Select Config$("lastVolume")
47+
Case "volumes1"
48+
BevelButton::Enable(ButtonVolumes1)
49+
BevelButton::Disable(ButtonVolumes2)
50+
Case "volumes2"
51+
BevelButton::Enable(ButtonVolumes2)
52+
BevelButton::Disable(ButtonVolumes1)
53+
EndSelect
3754

3855
; ----------------------------------------------------------------------------------------------------------------------------------
3956

4057
; Loop
58+
HideWindow(WindowMain, #False)
4159
Repeat
4260
Event = WaitWindowEvent()
4361

4462
Select Event
4563
Case #PB_Event_Gadget
64+
65+
; Toogle Buttons
66+
LockWindowUpdate_(WindowID(WindowMain))
4667
Select EventGadget()
4768
Case BevelButton::GetGadgetID(ButtonDevices1)
48-
49-
; Toggle Buttons
69+
Config$("lastDevice") = "devices1"
5070
BevelButton::Enable(ButtonDevices1)
5171
BevelButton::Disable(ButtonDevices2)
52-
53-
; Switch Audio
54-
SoundDevice(Config$("devices1Mic"))
55-
SoundDevice(Config$("devices1Speaker"))
56-
SoundDevice(Config$("devices1Mic"), 2)
57-
SoundDevice(Config$("devices1Speaker"), 2, True)
58-
59-
Config$("last") = "devices1"
72+
; Set Volume-Buttons
73+
BevelButton::SetText(ButtonVolumes1, Config$(Config$("lastDevice") + "volumes1Text"))
74+
BevelButton::SetText(ButtonVolumes2, Config$(Config$("lastDevice") + "volumes2Text"))
6075
Case BevelButton::GetGadgetID(ButtonDevices2)
61-
62-
; Toggle Buttons
76+
Config$("lastDevice") = "devices2"
6377
BevelButton::Enable(ButtonDevices2)
6478
BevelButton::Disable(ButtonDevices1)
65-
79+
; Set Volume-Buttons
80+
BevelButton::SetText(ButtonVolumes1, Config$(Config$("lastDevice") + "volumes1Text"))
81+
BevelButton::SetText(ButtonVolumes2, Config$(Config$("lastDevice") + "volumes2Text"))
82+
Case BevelButton::GetGadgetID(ButtonVolumes1)
83+
Config$("lastVolume") = "volumes1"
84+
BevelButton::Enable(ButtonVolumes1)
85+
BevelButton::Disable(ButtonVolumes2)
86+
Case BevelButton::GetGadgetID(ButtonVolumes2)
87+
Config$("lastVolume") = "volumes2"
88+
BevelButton::Enable(ButtonVolumes2)
89+
BevelButton::Disable(ButtonVolumes1)
90+
EndSelect
91+
LockWindowUpdate_(0)
92+
UpdateWindow_(WindowID(WindowMain))
93+
94+
; Set Device/Volume
95+
Select EventGadget()
96+
Case BevelButton::GetGadgetID(ButtonDevices1), BevelButton::GetGadgetID(ButtonDevices2)
6697
; Switch Audio
67-
SoundDevice(Config$("devices2Mic"))
68-
SoundDevice(Config$("devices2Speaker"))
69-
SoundDevice(Config$("devices2Mic"), 2)
70-
SoundDevice(Config$("devices2Speaker"), 2, True)
71-
72-
Config$("last") = "devices2"
98+
SoundDevice("SetDefault", Config$(Config$("lastDevice") + "Mic"))
99+
SoundDevice("SetDefault", Config$(Config$("lastDevice") + "Speaker"))
100+
SoundDevice("SetDefault", Config$(Config$("lastDevice") + "Mic"), "2")
101+
SoundDevice("SetDefault", Config$(Config$("lastDevice") + "Speaker"), "2")
102+
103+
; Set Volume & wait
104+
SoundDevice("SetVolume", Config$(Config$("lastDevice") + "Speaker"), Config$(Config$("lastDevice") + Config$("lastVolume") + "Value"), True)
105+
Case BevelButton::GetGadgetID(ButtonVolumes1), BevelButton::GetGadgetID(ButtonVolumes2)
106+
; Set Volume
107+
SoundDevice("SetVolume", Config$(Config$("lastDevice") + "Speaker"), Config$(Config$("lastDevice") + Config$("lastVolume") + "Value"), True)
73108
EndSelect
109+
74110
EndSelect
75111
Until Event = #PB_Event_CloseWindow
112+
HideWindow(WindowMain, #True)
76113

77114
; Write last state
78-
WritePreference(Config$("last"))
115+
WritePreference("lastDevice", Config$("lastDevice"))
116+
WritePreference("lastVolume", Config$("lastVolume"))
79117

80118
; Free Memory
81119
BevelButton::Delete(ButtonDevices2)
82120
BevelButton::Delete(ButtonDevices1)
121+
BevelButton::Delete(ButtonVolumes2)
122+
BevelButton::Delete(ButtonVolumes1)
83123

84124
End
85125

86126
; ----------------------------------------------------------------------------------------------------------------------------------
87127

88-
Procedure SoundDevice(Device$, Type = -1, Wait = #False)
89-
param$ = "/SetDefault " + Chr(34) + Device$ + Chr(34)
90-
; Add type if available
91-
If Type <> -1
92-
param$ = param$ + " " + Str(Type)
93-
EndIf
128+
Procedure SoundDevice(Command$, Device$, Param$ = "", Wait = #False)
129+
allParams$ = "/" + Command$ + " " + Chr(34) + Device$ + Chr(34) + " " + Param$
94130
; Flags
95131
Flags = 0
96132
If Wait = True
97133
Flags = #PB_Program_Wait
98134
EndIf
99135
; Run SoundVolumeView
100-
RunProgram("SoundVolumeView/SoundVolumeView", param$, "", Flags)
136+
RunProgram("SoundVolumeView/SoundVolumeView", allParams$, "", Flags)
101137
EndProcedure
102138

103139
Procedure ReadPreference(Map PrefMap$())
@@ -122,7 +158,7 @@ Procedure ReadPreference(Map PrefMap$())
122158
ClosePreferences()
123159
EndProcedure
124160

125-
Procedure WritePreference(Device$)
161+
Procedure WritePreference(Key$, Device$)
126162
; Open Preferences
127163
FileIni.s = GetFilePart(ProgramFilename(),#PB_FileSystem_NoExtension) + ".ini"
128164
If (OpenPreferences(FileIni) = 0)
@@ -132,7 +168,7 @@ Procedure WritePreference(Device$)
132168

133169
; Write
134170
PreferenceGroup("base")
135-
WritePreferenceString("last", Device$)
171+
WritePreferenceString(Key$, Device$)
136172

137173
; Close
138174
ClosePreferences()

screenshot.png

548 Bytes
Loading

0 commit comments

Comments
 (0)