diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-10-07 18:05:57 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-10-07 18:05:57 +0000 |
| commit | ed90cdc22d95e24a921a721a8307182d172c9795 (patch) | |
| tree | 994633652b37ec6c279b3a0dabe0418e0bbd5722 /src | |
| parent | 6a8185ef6679cc329a5fde14bfe97eadca0d2f91 (diff) | |
| download | qmmp-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.cpp | 3 | ||||
| -rw-r--r-- | src/qmmp/replaygain.cpp | 20 |
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; } |
