Skip to content

Commit 0ced7b5

Browse files
committed
Added volume control
1 parent 950d648 commit 0ced7b5

File tree

5 files changed

+89
-4
lines changed

5 files changed

+89
-4
lines changed

AudioPlayer.cpp

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ BOOL PlayerDlgOnInitDialog(HWND hDlg, HWND hWndFocus, LPARAM lParam)
6666
SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR) pData);
6767

6868
const HWND hPosition = GetDlgItem(hDlg, IDC_POSITION);
69+
const HWND hVolume = GetDlgItem(hDlg, IDC_VOLUME);
6970

7071
GetWindowText(hDlg, pData->strTitle, ARRAYSIZE(pData->strTitle));
7172

@@ -80,6 +81,11 @@ BOOL PlayerDlgOnInitDialog(HWND hDlg, HWND hWndFocus, LPARAM lParam)
8081
TrackBar_SetTicFreq(hPosition, 60);
8182
TrackBar_SetLineSize(hPosition, 10);
8283
TrackBar_SetPageSize(hPosition, 60);
84+
TrackBar_SetTicFreq(hVolume, 10);
85+
TrackBar_SetLineSize(hVolume, 1);
86+
TrackBar_SetPageSize(hVolume, 10);
87+
TrackBar_SetRange(hVolume, 0, 100);
88+
TrackBar_SetPos(hVolume, 100 - 100);
8389

8490
for (int i = 1; i < __argc; ++i)
8591
{
@@ -199,6 +205,7 @@ void PlayerDlgOnAPOpen(HWND hDlg, LPCTSTR pFileName)
199205
{
200206
PlayerDlgData* pData = (PlayerDlgData*) GetWindowLongPtr(hDlg, DWLP_USER);
201207
const HWND hPosition = GetDlgItem(hDlg, IDC_POSITION);
208+
const HWND hVolume = GetDlgItem(hDlg, IDC_VOLUME);
202209
const HWND hBegin = GetDlgItem(hDlg, IDC_BEGIN);
203210
const HWND hEnd = GetDlgItem(hDlg, IDC_END);
204211

@@ -215,6 +222,9 @@ void PlayerDlgOnAPOpen(HWND hDlg, LPCTSTR pFileName)
215222
FormatTime(dwLength, buf, ARRAYSIZE(buf));
216223
SetWindowText(hEnd, buf);
217224

225+
DWORD dwVolume = 100 - TrackBar_GetPos(hVolume);
226+
MciSetVolume(hDlg, pData->wDeviceID, dwVolume * 10);
227+
218228
MciPlay(hDlg, pData->wDeviceID);
219229
}
220230
else
@@ -235,10 +245,12 @@ BOOL PlayerDlgOnNotify(HWND hDlg, int id, LPNMHDR pNmHdr)
235245
{
236246
PlayerDlgData* pData = (PlayerDlgData*) GetWindowLongPtr(hDlg, DWLP_USER);
237247
const HWND hPosition = GetDlgItem(hDlg, IDC_POSITION);
248+
const HWND hVolume = GetDlgItem(hDlg, IDC_VOLUME);
238249
const HWND hBegin = GetDlgItem(hDlg, IDC_BEGIN);
239250

240-
if (id == IDC_POSITION)
251+
switch (id)
241252
{
253+
case IDC_POSITION:
242254
switch (pNmHdr->code)
243255
{
244256
case NM_RELEASEDCAPTURE:
@@ -281,14 +293,47 @@ BOOL PlayerDlgOnNotify(HWND hDlg, int id, LPNMHDR pNmHdr)
281293
break;
282294
}
283295
return TRUE;
284-
}
285-
else
296+
297+
case IDC_VOLUME:
298+
switch (pNmHdr->code)
299+
{
300+
case NM_RELEASEDCAPTURE:
301+
if (pData->wDeviceID != 0)
302+
{
303+
DWORD dwVolume = 100 - TrackBar_GetPos(hVolume);
304+
MciSetVolume(hDlg, pData->wDeviceID, dwVolume * 10);
305+
}
306+
break;
307+
308+
case TRBN_THUMBPOSCHANGING:
309+
if (pData->wDeviceID != 0)
310+
{
311+
const NMTRBTHUMBPOSCHANGING* pPosChanging = (NMTRBTHUMBPOSCHANGING*) pNmHdr;
312+
DWORD dwPos = 100 - pPosChanging->dwPos;
313+
if (dwPos > (MAXDWORD / 2)) dwPos = 0;
314+
if (dwPos > 100) dwPos = 100;
315+
if (pPosChanging->nReason == TB_THUMBTRACK)
316+
{
317+
MciSetVolume(hDlg, pData->wDeviceID, dwPos * 10);
318+
}
319+
else if (pPosChanging->nReason != TB_THUMBPOSITION && pPosChanging->nReason != TB_ENDTRACK)
320+
{
321+
MciSetVolume(hDlg, pData->wDeviceID, dwPos * 10);
322+
}
323+
}
324+
break;
325+
}
326+
return TRUE;
327+
328+
default:
286329
return FALSE;
330+
}
287331
}
288332

289333
void PlayerDlgOnAppCommand(HWND hDlg, HWND hChild, UINT cmd, UINT uDevice, DWORD dwKeys)
290334
{
291335
PlayerDlgData* pData = (PlayerDlgData*) GetWindowLongPtr(hDlg, DWLP_USER);
336+
const HWND hVolume = GetDlgItem(hDlg, IDC_VOLUME);
292337
switch (cmd)
293338
{
294339
case APPCOMMAND_MEDIA_PLAY:
@@ -306,6 +351,24 @@ void PlayerDlgOnAppCommand(HWND hDlg, HWND hChild, UINT cmd, UINT uDevice, DWORD
306351
MciPlay(hDlg, pData->wDeviceID);
307352
}
308353
break;
354+
case APPCOMMAND_VOLUME_DOWN:
355+
{
356+
DWORD dwVolume = 100 - TrackBar_GetPos(hVolume);
357+
dwVolume -= 10;
358+
if (dwVolume > (DWORD) -100) dwVolume = 0;
359+
MciSetVolume(hDlg, pData->wDeviceID, dwVolume * 10);
360+
TrackBar_SetPos(hVolume, 100 - dwVolume);
361+
}
362+
break;
363+
case APPCOMMAND_VOLUME_UP:
364+
{
365+
DWORD dwVolume = 100 - TrackBar_GetPos(hVolume);
366+
dwVolume += 10;
367+
if (dwVolume > 100) dwVolume = 100;
368+
MciSetVolume(hDlg, pData->wDeviceID, dwVolume * 10);
369+
TrackBar_SetPos(hVolume, 100 - dwVolume);
370+
}
371+
break;
309372
}
310373
}
311374

AudioPlayer.rc

274 Bytes
Binary file not shown.

MciUtils.cpp

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
#include <Windows.h>
22
#include "MciUtils.h"
3+
#include <stdio.h>
4+
#include <tchar.h>
5+
6+
// TODO Use a different alias for each open
7+
#define DEF_ALIAS _T("music")
38

49
static void MciShowError(HWND hDlg, MCIERROR e)
510
{
@@ -32,7 +37,8 @@ MCIERROR MciOpen(HWND hDlg, MCIDEVICEID& wDeviceID, LPCTSTR pFileName)
3237
MCI_OPEN_PARMS op = {};
3338
op.dwCallback = MAKELONG(hDlg, 0);
3439
op.lpstrElementName = pFileName;
35-
MCIERROR e = mciSendCommand(wDeviceID, MCI_OPEN, MCI_WAIT | MCI_OPEN_ELEMENT, (DWORD_PTR) &op);
40+
op.lpstrAlias = DEF_ALIAS;
41+
MCIERROR e = mciSendCommand(wDeviceID, MCI_OPEN, MCI_WAIT | MCI_OPEN_ELEMENT | MCI_OPEN_ALIAS, (DWORD_PTR) &op);
3642
if (e != MMSYSERR_NOERROR)
3743
{
3844
//MciClose(hDlg, op.wDeviceID);
@@ -77,3 +83,18 @@ void MciSeekTo(HWND hDlg, MCIDEVICEID wDeviceID, DWORD dwTo)
7783
if (e != MMSYSERR_NOERROR)
7884
MciShowError(hDlg, e);
7985
}
86+
87+
void MciSetVolume(HWND hDlg, MCIDEVICEID wDeviceID, DWORD dwVolume)
88+
{
89+
TCHAR buffer[1024];
90+
_stprintf_s(buffer, ARRAYSIZE(buffer), _T("setaudio %s volume to %d"), DEF_ALIAS, dwVolume);
91+
92+
TCHAR ret[1024];
93+
MCIERROR e = mciSendString(buffer, ret, ARRAYSIZE(ret), hDlg);
94+
if (e != MMSYSERR_NOERROR)
95+
MciShowError(hDlg, e);
96+
#if 0
97+
if (ret[0] != _T('\0'))
98+
_ftprintf(stdout, _T("%s\n"), ret);
99+
#endif
100+
}

MciUtils.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ DWORD_PTR MciGetStatus(HWND hDlg, MCIDEVICEID wDeviceID, DWORD dwItem);
88
void MciPlay(HWND hDlg, MCIDEVICEID wDeviceID);
99
void MciPause(HWND hDlg, MCIDEVICEID wDeviceID);
1010
void MciSeekTo(HWND hDlg, MCIDEVICEID wDeviceID, DWORD dwTo);
11+
void MciSetVolume(HWND hDlg, MCIDEVICEID wDeviceID, DWORD dwVolume);

resource.h

184 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)