3 * PROJECT: ReactOS Multimedia Control Panel
4 * FILE: dll/cpl/mmsys/audio.c
5 * PURPOSE: ReactOS Multimedia Control Panel
6 * PROGRAMMER: Thomas Weidenmueller <w3seek@reactos.com>
7 * Johannes Anderwald <janderwald@reactos.com>
8 * Dmitry Chapyshev <dmitry@reactos.org>
14 InitAudioDlg(HWND hwnd
)
16 WAVEOUTCAPSW waveOutputPaps
;
17 WAVEINCAPS waveInputPaps
;
18 MIDIOUTCAPS midiOutCaps
;
19 TCHAR szNoDevices
[256];
25 LoadString(hApplet
, IDS_NO_DEVICES
, szNoDevices
, _countof(szNoDevices
));
27 // Init sound playback devices list
28 hCB
= GetDlgItem(hwnd
, IDC_DEVICE_PLAY_LIST
);
30 DevsNum
= waveOutGetNumDevs();
33 Res
= SendMessage(hCB
, CB_ADDSTRING
, 0, (LPARAM
)szNoDevices
);
34 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) Res
, 0);
38 WCHAR DefaultDevice
[MAX_PATH
] = {0};
40 DWORD dwSize
= sizeof(DefaultDevice
);
41 UINT DefaultIndex
= 0;
43 if (RegOpenKeyExW(HKEY_CURRENT_USER
, L
"Software\\Microsoft\\Multimedia\\Sound Mapper", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
45 RegQueryValueExW(hKey
, L
"Playback", NULL
, NULL
, (LPBYTE
)DefaultDevice
, &dwSize
);
46 DefaultDevice
[MAX_PATH
-1] = L
'\0';
50 for (uIndex
= 0; uIndex
< DevsNum
; uIndex
++)
52 if (waveOutGetDevCapsW(uIndex
, &waveOutputPaps
, sizeof(waveOutputPaps
)))
55 Res
= SendMessageW(hCB
, CB_ADDSTRING
, 0, (LPARAM
) waveOutputPaps
.szPname
);
59 SendMessage(hCB
, CB_SETITEMDATA
, Res
, (LPARAM
) uIndex
);
60 if (!wcsicmp(waveOutputPaps
.szPname
, DefaultDevice
))
64 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) DefaultIndex
, 0);
67 // Init sound recording devices list
68 hCB
= GetDlgItem(hwnd
, IDC_DEVICE_REC_LIST
);
70 DevsNum
= waveInGetNumDevs();
73 Res
= SendMessage(hCB
, CB_ADDSTRING
, 0, (LPARAM
)szNoDevices
);
74 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) Res
, 0);
78 WCHAR DefaultDevice
[MAX_PATH
] = {0};
80 DWORD dwSize
= sizeof(DefaultDevice
);
81 UINT DefaultIndex
= 0;
83 if (RegOpenKeyExW(HKEY_CURRENT_USER
, L
"Software\\Microsoft\\Multimedia\\Sound Mapper", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
85 RegQueryValueExW(hKey
, L
"Record", NULL
, NULL
, (LPBYTE
)DefaultDevice
, &dwSize
);
86 DefaultDevice
[MAX_PATH
-1] = L
'\0';
91 for (uIndex
= 0; uIndex
< DevsNum
; uIndex
++)
93 if (waveInGetDevCaps(uIndex
, &waveInputPaps
, sizeof(waveInputPaps
)))
96 Res
= SendMessage(hCB
, CB_ADDSTRING
, 0, (LPARAM
) waveInputPaps
.szPname
);
100 SendMessage(hCB
, CB_SETITEMDATA
, Res
, (LPARAM
) uIndex
);
101 if (!wcsicmp(waveInputPaps
.szPname
, DefaultDevice
))
105 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) DefaultIndex
, 0);
108 // Init MIDI devices list
109 hCB
= GetDlgItem(hwnd
, IDC_DEVICE_MIDI_LIST
);
111 DevsNum
= midiOutGetNumDevs();
114 Res
= SendMessage(hCB
, CB_ADDSTRING
, 0, (LPARAM
)szNoDevices
);
115 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) Res
, 0);
119 for (uIndex
= 0; uIndex
< DevsNum
; uIndex
++)
121 if (midiOutGetDevCaps(uIndex
, &midiOutCaps
, sizeof(midiOutCaps
)))
124 Res
= SendMessage(hCB
, CB_ADDSTRING
, 0, (LPARAM
) midiOutCaps
.szPname
);
128 SendMessage(hCB
, CB_SETITEMDATA
, Res
, (LPARAM
) uIndex
);
129 // TODO: Getting default device
130 SendMessage(hCB
, CB_SETCURSEL
, (WPARAM
) Res
, 0);
137 GetDevNum(HWND hControl
, DWORD Id
)
142 iCurSel
= SendMessage(hControl
, CB_GETCURSEL
, 0, 0);
144 if (iCurSel
== CB_ERR
)
147 DevNum
= (UINT
) SendMessage(hControl
, CB_GETITEMDATA
, iCurSel
, 0);
148 if (DevNum
== (UINT
) CB_ERR
)
151 if (mixerGetID((HMIXEROBJ
)IntToPtr(DevNum
), &DevNum
, Id
) != MMSYSERR_NOERROR
)
157 /* Audio property page dialog callback */
159 AudioDlgProc(HWND hwndDlg
,
164 UNREFERENCED_PARAMETER(lParam
);
165 UNREFERENCED_PARAMETER(wParam
);
166 UNREFERENCED_PARAMETER(hwndDlg
);
172 UINT NumWavOut
= waveOutGetNumDevs();
174 InitAudioDlg(hwndDlg
);
178 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEVICE_PLAY_LIST
), FALSE
);
179 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEVICE_REC_LIST
), FALSE
);
180 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEVICE_MIDI_LIST
), FALSE
);
181 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFAULT_DEV_CHECKBOX
), FALSE
);
182 EnableWindow(GetDlgItem(hwndDlg
, IDC_VOLUME1_BTN
), FALSE
);
183 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADV2_BTN
), FALSE
);
184 EnableWindow(GetDlgItem(hwndDlg
, IDC_VOLUME2_BTN
), FALSE
);
185 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADV1_BTN
), FALSE
);
186 EnableWindow(GetDlgItem(hwndDlg
, IDC_VOLUME3_BTN
), FALSE
);
187 EnableWindow(GetDlgItem(hwndDlg
, IDC_ADV3_BTN
), FALSE
);
195 PROCESS_INFORMATION pi
;
196 WCHAR szPath
[MAX_PATH
];
198 switch(LOWORD(wParam
))
200 case IDC_VOLUME1_BTN
:
202 wsprintf(szPath
, L
"sndvol32.exe -d %d",
203 GetDevNum(GetDlgItem(hwndDlg
, IDC_DEVICE_PLAY_LIST
), MIXER_OBJECTF_WAVEOUT
));
205 ZeroMemory(&si
, sizeof(si
));
207 si
.dwFlags
= STARTF_USESHOWWINDOW
;
208 si
.wShowWindow
= SW_SHOW
;
210 CreateProcess(NULL
, szPath
, NULL
, NULL
, FALSE
, 0, NULL
, NULL
, &si
, &pi
);
220 case IDC_VOLUME2_BTN
:
222 wsprintf(szPath
, L
"sndvol32.exe -r -d %d",
223 GetDevNum(GetDlgItem(hwndDlg
, IDC_DEVICE_REC_LIST
), MIXER_OBJECTF_WAVEIN
));
225 ZeroMemory(&si
, sizeof(si
));
227 si
.dwFlags
= STARTF_USESHOWWINDOW
;
228 si
.wShowWindow
= SW_SHOW
;
230 CreateProcess(NULL
, szPath
, NULL
, NULL
, FALSE
, 0, NULL
, NULL
, &si
, &pi
);
240 case IDC_VOLUME3_BTN
:
242 wsprintf(szPath
, L
"sndvol32.exe -d %d",
243 GetDevNum(GetDlgItem(hwndDlg
, IDC_DEVICE_MIDI_LIST
), MIXER_OBJECTF_MIDIOUT
));
245 ZeroMemory(&si
, sizeof(si
));
247 si
.dwFlags
= STARTF_USESHOWWINDOW
;
248 si
.wShowWindow
= SW_SHOW
;
250 CreateProcess(NULL
, szPath
, NULL
, NULL
, FALSE
, 0, NULL
, NULL
, &si
, &pi
);