aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/gme/gmehelper.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-09-25 09:32:08 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2010-09-25 09:32:08 +0000
commitae7229c3897f3dc106d9547af39086fe68be852b (patch)
treedc7a92685294bc5729b4bcfd0e18a99fbcbada44 /src/plugins/Input/gme/gmehelper.cpp
parent63de3bbefb1c8c3cf36be875856ea6b28b33b09f (diff)
downloadqmmp-ae7229c3897f3dc106d9547af39086fe68be852b.tar.gz
qmmp-ae7229c3897f3dc106d9547af39086fe68be852b.tar.bz2
qmmp-ae7229c3897f3dc106d9547af39086fe68be852b.zip
added game music plugin
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1909 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins/Input/gme/gmehelper.cpp')
-rw-r--r--src/plugins/Input/gme/gmehelper.cpp125
1 files changed, 125 insertions, 0 deletions
diff --git a/src/plugins/Input/gme/gmehelper.cpp b/src/plugins/Input/gme/gmehelper.cpp
new file mode 100644
index 000000000..120dcdd1f
--- /dev/null
+++ b/src/plugins/Input/gme/gmehelper.cpp
@@ -0,0 +1,125 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Ilya Kotov *
+ * forkotov02@hotmail.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., *
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ ***************************************************************************/
+
+#include "gmehelper.h"
+
+#define FADE_LENGTH 8000
+
+GmeHelper::GmeHelper()
+{
+ m_emu = 0;
+}
+
+GmeHelper::~GmeHelper()
+{
+ if(m_emu)
+ delete m_emu;
+ m_emu = 0;
+}
+
+Music_Emu *GmeHelper::load(const QString &url, int sample_rate)
+{
+ if(m_emu)
+ delete m_emu;
+ m_emu = 0;
+ QString path = url;
+ if(url.contains("://"))
+ {
+ path = QUrl(url).path();
+ path.replace(QString(QUrl::toPercentEncoding("#")), "#");
+ path.replace(QString(QUrl::toPercentEncoding("?")), "?");
+ path.replace(QString(QUrl::toPercentEncoding("%")), "%");
+ }
+ const char *err = 0;
+ gme_type_t file_type;
+ if((err = gme_identify_file(qPrintable(path),&file_type)))
+ {
+ qWarning("GmeHelper: %s", err);
+ return 0;
+ }
+ if(!file_type)
+ {
+ qWarning("DecoderGme: unsupporetd music type");
+ return 0;
+ }
+ if(!(m_emu = file_type->new_emu()))
+ {
+ qWarning("GmeHelper: out of memory");
+ return 0;
+ }
+ if((err = m_emu->set_sample_rate(sample_rate)))
+ {
+ qWarning("GmeHelper: %s", err);
+ return 0;
+ }
+ if((err = m_emu->load_file(qPrintable(path))))
+ {
+ qWarning("GmeHelper: %s", err);
+ return 0;
+ }
+ QString m3u_path = path.left(path.lastIndexOf("."));
+ m3u_path.append(".m3u");
+ m_emu->load_m3u(qPrintable(m3u_path));
+ m_path = path;
+ return m_emu;
+}
+
+QList <FileInfo*> GmeHelper::createPlayList(bool meta)
+{
+ QList <FileInfo*> list;
+ if(!m_emu)
+ return list;
+ int count = m_emu->track_count();
+ track_info_t track_info;
+ for(int i = 0; i < count; ++i)
+ {
+ FileInfo *info = new FileInfo();
+ m_emu->start_track(i);
+ if(!m_emu->track_info(&track_info))
+ {
+ if(track_info.length <= 0)
+ track_info.length = track_info.intro_length + track_info.loop_length * 2;
+ }
+ if(track_info.length <= 0)
+ track_info.length = (long) (2.5 * 60 * 1000);
+ if(track_info.length < FADE_LENGTH)
+ track_info.length += FADE_LENGTH;
+ if(meta)
+ {
+ info->setMetaData(Qmmp::TITLE, track_info.song);
+ info->setMetaData(Qmmp::ARTIST, track_info.author);
+ info->setMetaData(Qmmp::COMMENT, track_info.comment);
+ info->setMetaData(Qmmp::TRACK, i+1);
+ }
+ QString path = m_path;
+ path.replace("%", QString(QUrl::toPercentEncoding("%"))); //replace special symbols
+ path.replace("#", QString(QUrl::toPercentEncoding("#")));
+ path.replace("?", QString(QUrl::toPercentEncoding("?")));
+ info->setPath("gme://"+path+QString("#%1").arg(i+1));
+ info->setLength(track_info.length/1000);
+ list << info;
+ }
+ return list;
+}
+
+int GmeHelper::fadeLength()
+{
+ return FADE_LENGTH;
+}