diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-02-18 11:31:54 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-02-18 11:31:54 +0000 |
| commit | 39bb54ddabc005ecec636abcf0566860632da71f (patch) | |
| tree | 279b329609111c2478fe274e80b86f5e811884ea /src/plugins | |
| parent | 4a80476a45075876fb952f814becd8f036d881a3 (diff) | |
| download | qmmp-39bb54ddabc005ecec636abcf0566860632da71f.tar.gz qmmp-39bb54ddabc005ecec636abcf0566860632da71f.tar.bz2 qmmp-39bb54ddabc005ecec636abcf0566860632da71f.zip | |
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
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/Output/waveout/outputwaveout.cpp | 29 | ||||
| -rw-r--r-- | src/plugins/Output/waveout/outputwaveout.h | 16 | ||||
| -rw-r--r-- | src/plugins/Output/waveout/outputwaveoutfactory.cpp | 2 |
3 files changed, 43 insertions, 4 deletions
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 <QObject>
#include <unistd.h>
#include <stdio.h>
@@ -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 <stdio.h>
#include <windows.h>
+#include <qmmp/volume.h>
#include <qmmp/output.h>
/**
@@ -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)
|
