const char *crPlayerGetVoiceName(void *context, int voice) { gmeContext *gme = (gmeContext*)context; return gme_voice_name(gme->emu, voice); }
bool GME::open(const QString &_url, bool tracksOnly) { QString prefix, url, param; const bool hasPluginPrefix = Functions::splitPrefixAndUrlIfHasPluginPrefix(_url, &prefix, &url, ¶m); if (tracksOnly == hasPluginPrefix) return false; int track = 0; if (!hasPluginPrefix) { if (url.startsWith(GMEName "://")) return false; url = _url; } else { if (prefix != GMEName) return false; bool ok; track = param.toInt(&ok); if (track < 0 || !ok) return false; } if (Reader::create(url, m_reader)) { const QByteArray data = m_reader->read(m_reader->size()); m_reader.clear(); gme_open_data(data.data(), data.size(), &m_gme, m_srate); if (!m_gme) return false; if (!hasPluginPrefix) { m_aborted = true; m_url = url; return true; } if (track >= gme_track_count(m_gme)) return false; gme_info_t *info = NULL; if (!gme_track_info(m_gme, &info, track) && info) { m_title = getTitle(info, track); m_length = getLength(info); if (*info->game) m_tags << qMakePair(QString::number(QMPLAY2_TAG_TITLE), QString(info->game)); if (*info->author) m_tags << qMakePair(QString::number(QMPLAY2_TAG_ARTIST), QString(info->author)); if (*info->system) m_tags << qMakePair(tr("System"), QString(info->system)); if (*info->copyright) m_tags << qMakePair(tr("Copyright"), QString(info->copyright)); if (*info->comment) m_tags << qMakePair(tr("Comment"), QString(info->comment)); gme_free_info(info); } QString voices; const int numVoices = gme_voice_count(m_gme); for (int i = 0; i < numVoices; ++i) { voices += gme_voice_name(m_gme, i); voices += ", "; } voices.chop(2); m_tags << qMakePair(tr("Voices"), voices); m_tags << qMakePair(tr("Track"), QString::number(track + 1)); streams_info += new StreamInfo(m_srate, 2); gme_set_stereo_depth(m_gme, 0.5); return !gme_start_track(m_gme, track); } return false; }