From 39bb54ddabc005ecec636abcf0566860632da71f Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 18 Feb 2013 11:31:54 +0000 Subject: waveout plugin: added volume control git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3255 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Output/waveout/outputwaveout.cpp | 29 ++++++++++++++++++++-- src/plugins/Output/waveout/outputwaveout.h | 16 +++++++++++- .../Output/waveout/outputwaveoutfactory.cpp | 2 +- 3 files changed, 43 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/plugins/Output/waveout/outputwaveout.cpp b/src/plugins/Output/waveout/outputwaveout.cpp index a3486f3f6..7f5293686 100644 --- a/src/plugins/Output/waveout/outputwaveout.cpp +++ b/src/plugins/Output/waveout/outputwaveout.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2012 by Ilya Kotov * + * Copyright (C) 2009-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -18,7 +18,6 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ - #include #include #include @@ -238,3 +237,29 @@ void OutputWaveOut::uninitialize() DeleteCriticalSection (&cs); return; } + +/***** MIXER *****/ +VolumeWaveOut::VolumeWaveOut() +{} + +VolumeWaveOut::~VolumeWaveOut() +{} + +void VolumeWaveOut::setVolume(int channel, int value) +{ + int l = (channel == Volume::LEFT_CHANNEL) ? value : (long)LOWORD(m_volume) * 100 / 0xFFFF; + int r = (channel == Volume::RIGHT_CHANNEL) ? value : (long)HIWORD(m_volume) * 100 / 0xFFFF; + m_volume = (r*0xFFFF/100 << 16) | l*0xFFFF/100; + waveOutSetVolume(0, m_volume); +} + +int VolumeWaveOut::volume(int channel) +{ + DWORD volume; + waveOutGetVolume(0, (LPDWORD)&volume); + m_volume = volume; + if(channel == Volume::LEFT_CHANNEL) + return (long)LOWORD(volume) * 100 / 0xFFFF; + else + return (long)HIWORD(volume) * 100 / 0xFFFF; +} diff --git a/src/plugins/Output/waveout/outputwaveout.h b/src/plugins/Output/waveout/outputwaveout.h index 619653e84..d4e44e30a 100644 --- a/src/plugins/Output/waveout/outputwaveout.h +++ b/src/plugins/Output/waveout/outputwaveout.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2012 by Ilya Kotov * + * Copyright (C) 2009-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -23,6 +23,7 @@ #include #include +#include #include /** @@ -50,5 +51,18 @@ private: void uninitialize(); }; +class VolumeWaveOut : public Volume +{ +public: + VolumeWaveOut(); + ~VolumeWaveOut(); + + void setVolume(int channel, int value); + int volume(int channel); + +private: + DWORD m_volume; +}; + #endif // OUTPUTWAVEOUT_H diff --git a/src/plugins/Output/waveout/outputwaveoutfactory.cpp b/src/plugins/Output/waveout/outputwaveoutfactory.cpp index 01fcb4b06..62d8a8f32 100644 --- a/src/plugins/Output/waveout/outputwaveoutfactory.cpp +++ b/src/plugins/Output/waveout/outputwaveoutfactory.cpp @@ -40,7 +40,7 @@ Output* OutputWaveOutFactory::create() Volume *OutputWaveOutFactory::createVolume() { - return 0; + return new VolumeWaveOut(); } void OutputWaveOutFactory::showSettings(QWidget* parent) -- cgit v1.2.3-13-gbd6f