aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Output/waveout/outputwaveout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Output/waveout/outputwaveout.cpp')
-rw-r--r--src/plugins/Output/waveout/outputwaveout.cpp29
1 files changed, 27 insertions, 2 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;
+}