aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/modplug/decoder_modplug.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Input/modplug/decoder_modplug.cpp')
-rw-r--r--src/plugins/Input/modplug/decoder_modplug.cpp228
1 files changed, 0 insertions, 228 deletions
diff --git a/src/plugins/Input/modplug/decoder_modplug.cpp b/src/plugins/Input/modplug/decoder_modplug.cpp
deleted file mode 100644
index a3579bcee..000000000
--- a/src/plugins/Input/modplug/decoder_modplug.cpp
+++ /dev/null
@@ -1,228 +0,0 @@
-/***************************************************************************
- * Copyright (C) 2008-2021 by Ilya Kotov *
- * forkotov02@ya.ru *
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
- ***************************************************************************/
-
-/* Based on Modplug XMMS Plugin
- * Authors: Kenton Varda <temporal@gauge3d.org>
- */
-
-#include <QObject>
-#include <QIODevice>
-#include <QFile>
-#include <QDir>
-#include <QSettings>
-#include <math.h>
-#include <libmodplug/stdafx.h>
-#include <libmodplug/it_defs.h>
-#include <libmodplug/sndfile.h>
-#include <qmmp/buffer.h>
-#include <qmmp/output.h>
-#include <stdint.h>
-#include "archivereader.h"
-#include "decoder_modplug.h"
-
-// Decoder class
-
-DecoderModPlug* DecoderModPlug::m_instance = nullptr;
-
-DecoderModPlug::DecoderModPlug(const QString &path) : Decoder(nullptr),
- m_path(path)
-{
- m_instance = this;
-}
-
-DecoderModPlug::~DecoderModPlug()
-{
- deinit();
- if(m_instance == this)
- m_instance = nullptr;
-}
-
-bool DecoderModPlug::initialize()
-{
- m_freq = m_bitrate = 0;
- m_chan = 0;
- m_totalTime = 0;
-
- ArchiveReader reader;
- if (reader.isSupported(m_path))
- m_input_buf = reader.unpack(m_path);
- else
- {
- QFile file(m_path);
- if (!file.open(QIODevice::ReadOnly))
- {
- qWarning("DecoderModPlug: error: %s", qPrintable(file.errorString ()));
- return false;
- }
- m_input_buf = file.readAll();
- file.close();
- }
- if (m_input_buf.isEmpty())
- {
- qWarning("DecoderModPlug: error while reading module file");
- return false;
- }
- m_soundFile = new CSoundFile();
- readSettings();
- m_sampleSize = m_bps / 8 * m_chan;
- m_soundFile->Create((uchar*) m_input_buf.data(), m_input_buf.size());
- m_bitrate = m_soundFile->GetNumChannels();
- m_totalTime = (qint64) m_soundFile->GetSongTime() * 1000;
- configure(m_freq, m_chan, (m_bps == 8 ? Qmmp::PCM_S8 : Qmmp::PCM_S16LE));
- return true;
-}
-
-qint64 DecoderModPlug::totalTime() const
-{
- return m_totalTime;
-}
-
-int DecoderModPlug::bitrate() const
-{
- return m_bitrate;
-}
-
-qint64 DecoderModPlug::read(unsigned char *audio, qint64 maxSize)
-{
- long len = m_soundFile->Read (audio, maxSize) * m_sampleSize;
- if (m_usePreamp)
- {
- {
- //apply preamp
- if (m_bps == 16)
- {
- long n = len >> 1;
- for (long i = 0; i < n; i++)
- {
- short old = ((short*)audio)[i];
- ((short*)audio)[i] *= m_preampFactor;
- // detect overflow and clip!
- if ((old & 0x8000) !=
- (((short*)audio)[i] & 0x8000))
- ((short*)audio)[i] = old | 0x7FFF;
- }
- }
- else
- {
- for (long i = 0; i < len; i++)
- {
- uchar old = ((uchar*)audio)[i];
- ((uchar*)audio)[i] *= m_preampFactor;
- // detect overflow and clip!
- if ((old & 0x80) !=
- (((uchar*)audio)[i] & 0x80))
- ((uchar*)audio)[i] = old | 0x7F;
- }
- }
- }
- }
- return len;
-}
-
-void DecoderModPlug::seek(qint64 pos)
-{
- quint32 lMax;
- quint32 lMaxtime;
- double lPostime;
-
- if (pos > (lMaxtime = m_soundFile->GetSongTime()) * 1000)
- pos = lMaxtime * 1000;
- lMax = m_soundFile->GetMaxPosition();
- lPostime = float(lMax) / lMaxtime;
- m_soundFile->SetCurrentPos(int(pos * lPostime / 1000));
-}
-
-void DecoderModPlug::deinit()
-{
- m_freq = m_bitrate = 0;
- m_chan = 0;
- if (m_soundFile)
- {
- m_soundFile->Destroy();
- delete m_soundFile;
- m_soundFile = nullptr;
- }
- m_input_buf.clear();
-}
-
-void DecoderModPlug::readSettings()
-{
- if (!m_soundFile)
- return;
- QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
- settings.beginGroup("ModPlug");
- CSoundFile::SetWaveConfig
- (
- m_freq = settings.value("Frequency", 44100).toInt(),
- m_bps = settings.value("Bits", 16).toInt(),
- m_chan = settings.value("Channels", 2).toInt()
- );
-
- CSoundFile::SetWaveConfigEx
- (
- settings.value("Surround", true).toBool(),
- true,
- settings.value("Reverb", false).toBool(),
- true,
- settings.value("Megabass", false).toBool(),
- settings.value("NoiseReduction", false).toBool(),
- false
- );
- if (settings.value("Reverb", false).toBool())
- {
- CSoundFile::SetReverbParameters
- (
- settings.value("ReverbDepth", 30).toInt(),
- settings.value("ReverbDelay", 100).toInt()
- );
- }
- if (settings.value("Megabass", false).toBool())
- {
- CSoundFile::SetXBassParameters
- (
- settings.value("BassAmount", 40).toInt(),
- settings.value("BassRange", 30).toInt()
- );
- }
- if (settings.value("Surround", true).toBool())
- {
- CSoundFile::SetSurroundParameters
- (
- settings.value("SurroundDepth", 20).toInt(),
- settings.value("SurroundDelay", 20).toInt()
- );
- }
- CSoundFile::SetResamplingMode(settings.value("ResamplineMode", SRCMODE_POLYPHASE).toInt());
- m_soundFile->SetRepeatCount(settings.value("LoopCount", 0).toInt());
-
-
- //general
- /*
- settings.value("GrabAmigaMOD", true).toBool());*/
- //preamp
- m_usePreamp = settings.value("PreAmp", false).toBool();
- m_preampFactor = exp(settings.value("PreAmpLevel", 0.0f).toDouble());
- settings.endGroup();
-}
-
-DecoderModPlug* DecoderModPlug::instance()
-{
- return m_instance;
-}