aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-10-07 18:05:57 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2013-10-07 18:05:57 +0000
commited90cdc22d95e24a921a721a8307182d172c9795 (patch)
tree994633652b37ec6c279b3a0dabe0418e0bbd5722 /src
parent6a8185ef6679cc329a5fde14bfe97eadca0d2f91 (diff)
downloadqmmp-ed90cdc22d95e24a921a721a8307182d172c9795.tar.gz
qmmp-ed90cdc22d95e24a921a721a8307182d172c9795.tar.bz2
qmmp-ed90cdc22d95e24a921a721a8307182d172c9795.zip
fixed audio converters
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3754 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src')
-rw-r--r--src/qmmp/qmmpaudioengine.cpp3
-rw-r--r--src/qmmp/replaygain.cpp20
2 files changed, 18 insertions, 5 deletions
diff --git a/src/qmmp/qmmpaudioengine.cpp b/src/qmmp/qmmpaudioengine.cpp
index 4cd25e05f..32eacda86 100644
--- a/src/qmmp/qmmpaudioengine.cpp
+++ b/src/qmmp/qmmpaudioengine.cpp
@@ -380,7 +380,8 @@ void QmmpAudioEngine::run()
{
delay = 0;
// decode
- len = m_decoder->read((char *)(m_output_buf + m_output_at), m_output_size - m_output_at);
+ len = m_replayGain->read(m_decoder,(char *)(m_output_buf + m_output_at), m_output_size - m_output_at);
+ //len = m_decoder->read((char *)(m_output_buf + m_output_at), m_output_size - m_output_at);
}
if (len > 0)
diff --git a/src/qmmp/replaygain.cpp b/src/qmmp/replaygain.cpp
index 7e309b2f3..eeab49d50 100644
--- a/src/qmmp/replaygain.cpp
+++ b/src/qmmp/replaygain.cpp
@@ -80,8 +80,6 @@ qint64 ReplayGain::read(Decoder *decoder, char *data, qint64 size)
samples = decoder->read(m_prebuf, size >> 1);
break;
case Qmmp::PCM_S24LE:
- samples = decoder->read(m_prebuf, size >> 2);
- break;
case Qmmp::PCM_S32LE:
samples = decoder->read(m_prebuf, size >> 2);
break;
@@ -103,15 +101,28 @@ qint64 ReplayGain::read(Decoder *decoder, char *data, qint64 size)
((short*)data)[i] = m_prebuf[i] * 32767.0;
break;
case Qmmp::PCM_S24LE:
- ((qint32*)data)[i] = m_prebuf[i] * 32767.0;
+ ((qint32*)data)[i] = m_prebuf[i] * (1U << 28);
break;
case Qmmp::PCM_S32LE:
- ((qint32*)data)[i] = m_prebuf[i] * 32767.0;
+ ((qint32*)data)[i] = m_prebuf[i] * (1U << 31);
break;
default:
break;
}
}
+
+ switch (m_format)
+ {
+ case Qmmp::PCM_S8:
+ return samples;
+ case Qmmp::PCM_S16LE:
+ return samples << 1;
+ case Qmmp::PCM_S24LE:
+ case Qmmp::PCM_S32LE:
+ return samples << 2;
+ default:
+ return -1;
+ }
}
void ReplayGain::updateSettings(QmmpSettings::ReplayGainMode mode, double preamp,
@@ -149,4 +160,5 @@ void ReplayGain::updateScale()
m_scale = m_scale*peak > 1.0 ? 1.0 / peak : m_scale;
m_scale = qMin(m_scale, 5.6234); // +15 dB
m_scale = qMax(m_scale, 0.1778); // -15 dB*/
+ m_scale = 0.5;
}