/*************************************************************************** * 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 GmeHelper::createPlayList(bool meta) { QList 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; }