Exemple #1
0
SongList PLSParser::Load(QIODevice *device, const QString& playlist_path, const QDir &dir) const {
    QMap<int, Song> songs;
    QRegExp n_re("\\d+$");

    while (!device->atEnd()) {
        QString line = QString::fromUtf8(device->readLine()).trimmed();
        int equals = line.indexOf('=');
        QString key = line.left(equals).toLower();
        QString value = line.mid(equals + 1);

        n_re.indexIn(key);
        int n = n_re.cap(0).toInt();

        if (key.startsWith("file")) {
            Song song = LoadSong(value, 0, dir);

            // Use the title and length we've already loaded if any
            if (!songs[n].title().isEmpty())
                song.set_title(songs[n].title());
            if (!songs[n].length_nanosec() != -1)
                song.set_length_nanosec(songs[n].length_nanosec());

            songs[n] = song;
        } else if (key.startsWith("title")) {
            songs[n].set_title(value);
        } else if (key.startsWith("length")) {
            qint64 seconds = value.toLongLong();
            if (seconds > 0) {
                songs[n].set_length_nanosec(seconds * kNsecPerSec);
            }
        }
    }

    return songs.values();
}
Exemple #2
0
void WplParser::ParseSeq(const QDir& dir, QXmlStreamReader* reader,
                         SongList* songs) const {
  while (!reader->atEnd()) {
    QXmlStreamReader::TokenType type = reader->readNext();
    switch (type) {
      case QXmlStreamReader::StartElement: {
        QStringRef name = reader->name();
        if (name == "media") {
          QStringRef src = reader->attributes().value("src");
          if (!src.isEmpty()) {
            Song song = LoadSong(src.toString(), 0, dir);
            if (song.is_valid()) {
              songs->append(song);
            }
          }
        } else {
          Utilities::ConsumeCurrentElement(reader);
        }
        break;
      }
      case QXmlStreamReader::EndElement: {
        if (reader->name() == "seq") {
          return;
        }
        break;
      }
      default:
        break;
    }
  }
}
Exemple #3
0
void MainScreen::become_front() {
    InterfaceScreen::become_front();
    if (Preferences::preferences()->play_idle_music() && !SongIsPlaying()) {
        LoadSong(kTitleSongID);
        SetSongVolume(kMaxMusicVolume);
        PlaySong();
    }
}
Exemple #4
0
void CSound::PlaySong (ESong Song)
{
    bool result = true;
    // If the sound works
    if (m_SoundOK)
    {    
        // If a song exists free it unless it is the same
        if (m_CurrentSong != NULL && m_ESong != Song) FreeSong(Song);
		
        // note: songs are loaded dynamically because of an error in libmikmod (used by SDL_mixer)
        // load new song (if necessary)
        if (m_ESong != Song || m_CurrentSong == NULL) {
            switch (Song) {
                case SONG_MATCH_MUSIC_1_NORMAL:
                    result = LoadSong   (SONG_MATCH_MUSIC_1_NORMAL    , SND_MATCH_MUSIC_1_NORMAL);
                    break;
                case SONG_MATCH_MUSIC_1_FAST:
                    result = LoadSong   (SONG_MATCH_MUSIC_1_FAST      , SND_MATCH_MUSIC_1_FAST  );
                    break;
                case SONG_MENU_MUSIC:
                    result = LoadSong   (SONG_MENU_MUSIC              , SND_MENU_MUSIC          );
                    break;
                case SONG_CONTROLS_MUSIC:
                    result = LoadSong   (SONG_CONTROLS_MUSIC          , SND_CONTROLS_MUSIC      );
                    break;
                case SONG_TITLE_MUSIC:
                    result = LoadSong   (SONG_TITLE_MUSIC             , SND_TITLE_MUSIC         );
                    break;
                default:
                    result = false;
            }
        }
	
        if (result)
        {
            // Start playing this song (-1 infinite loop)
            Mix_PlayMusic(m_CurrentSong, -1);
            m_ESong = Song;
        }
    }
}
Exemple #5
0
SongList M3UParser::Load(QIODevice* device, const QString& playlist_path,
                         const QDir& dir) const {
  SongList ret;

  M3UType type = STANDARD;
  Metadata current_metadata;

  QString data = QString::fromUtf8(device->readAll());
  data.replace('\r', '\n');
  data.replace("\n\n", "\n");
  QByteArray bytes = data.toUtf8();
  QBuffer buffer(&bytes);
  buffer.open(QIODevice::ReadOnly);

  QString line = QString::fromUtf8(buffer.readLine()).trimmed();
  if (line.startsWith("#EXTM3U")) {
    // This is in extended M3U format.
    type = EXTENDED;
    line = QString::fromUtf8(buffer.readLine()).trimmed();
  }

  forever {
    if (line.startsWith('#')) {
      // Extended info or comment.
      if (type == EXTENDED && line.startsWith("#EXT")) {
        if (!ParseMetadata(line, &current_metadata)) {
          qLog(Warning) << "Failed to parse metadata: " << line;
        }
      }
    } else if (!line.isEmpty()) {
      Song song = LoadSong(line, 0, dir);
      if (!current_metadata.title.isEmpty()) {
        song.set_title(current_metadata.title);
      }
      if (!current_metadata.artist.isEmpty()) {
        song.set_artist(current_metadata.artist);
      }
      if (current_metadata.length > 0) {
        song.set_length_nanosec(current_metadata.length);
      }
      ret << song;

      current_metadata = Metadata();
    }
    if (buffer.atEnd()) {
      break;
    }
    line = QString::fromUtf8(buffer.readLine()).trimmed();
  }

  return ret;
}
Song XSPFParser::ParseTrack(QXmlStreamReader* reader, const QDir& dir) const {
  QString title, artist, album, location;
  qint64 nanosec = -1;

  while (!reader->atEnd()) {
    QXmlStreamReader::TokenType type = reader->readNext();
    switch (type) {
      case QXmlStreamReader::StartElement: {
        QStringRef name = reader->name();
        if (name == "location") {
          location = reader->readElementText();
        } else if (name == "title") {
          title = reader->readElementText();
        } else if (name == "creator") {
          artist = reader->readElementText();
        } else if (name == "album") {
          album = reader->readElementText();
        } else if (name == "duration") {  // in milliseconds.
          const QString duration = reader->readElementText();
          bool ok = false;
          nanosec = duration.toInt(&ok) * kNsecPerMsec;
          if (!ok) {
            nanosec = -1;
          }
        } else if (name == "image") {
          // TODO: Fetch album covers.
        } else if (name == "info") {
          // TODO: Do something with extra info?
        }
        break;
      }
      case QXmlStreamReader::EndElement: {
        if (reader->name() == "track") {
          goto return_song;
        }
      }
      default:
        break;
    }
  }

return_song:
  Song song = LoadSong(location, 0, dir);

  // Override metadata with what was in the playlist
  song.set_title(title);
  song.set_artist(artist);
  song.set_album(album);
  song.set_length_nanosec(nanosec);
  return song;
}
Exemple #7
0
SongList AsxIniParser::Load(QIODevice* device, const QString& playlist_path,
                            const QDir& dir) const {
  SongList ret;

  while (!device->atEnd()) {
    QString line = QString::fromUtf8(device->readLine()).trimmed();
    int equals = line.indexOf('=');
    QString key = line.left(equals).toLower();
    QString value = line.mid(equals + 1);

    if (key.startsWith("ref")) {
      Song song = LoadSong(value, 0, dir);
      if (song.is_valid()) {
        ret << song;
      }
    }
  }

  return ret;
}
void ScrollTextScreen::become_front() {
    // If a song was requested, play it.
    if (_play_song && Preferences::preferences()->play_idle_music()) {
        if (SongIsPlaying()) {
            StopAndUnloadSong();
        }
        LoadSong(_song_id);
        SetSongVolume(kMaxMusicVolume);
        PlaySong();
    }

    _start = now_usecs();
    _next_shift = _start;

    _clip = Rect(0, 0, world.width(), kScrollTextHeight);
    _clip.center_in(world);

    _position = _build_pix.size().as_rect();
    _position.center_in(_clip);
    _position.offset(0, _clip.bottom - _position.top);
}
Exemple #9
0
Song ASXParser::ParseTrack(QXmlStreamReader* reader, const QDir& dir) const {
  QString title, artist, album, ref;

  while (!reader->atEnd()) {
    QXmlStreamReader::TokenType type = reader->readNext();

    switch (type) {
      case QXmlStreamReader::StartElement: {
        QStringRef name = reader->name();
        if (name == "ref") {
          ref = reader->attributes().value("href").toString();
        } else if (name == "title") {
          title = reader->readElementText();
        } else if (name == "author") {
          artist = reader->readElementText();
        }
        break;
      }
      case QXmlStreamReader::EndElement: {
        if (reader->name() == "entry") {
          goto return_song;
        }
        break;
      }
      default:
        break;
    }
  }

return_song:
  Song song = LoadSong(ref, 0, dir);

  // Override metadata with what was in the playlist
  song.set_title(title);
  song.set_artist(artist);
  song.set_album(album);
  return song;
}
Exemple #10
0
SWBOOL
PlaySong(char *song_file_name, int cdaudio_track, SWBOOL loop, SWBOOL restart)
{
    if (!gs.MusicOn)
    {
        return FALSE;
    }

    if (DemoMode)
        return FALSE;

    if (!restart)
    {
        if (SongType == SongTypeWave)
        {
            if (SongTrack > 0 && SongTrack == cdaudio_track)
            {
                // ogg replacement for a CD track
                return TRUE;
            }
            else if (SongName && song_file_name && !strcmp(SongName, song_file_name))
            {
                return TRUE;
            }
        }
        else if (SongType == SongTypeMIDI)
        {
            if (SongName && song_file_name && !strcmp(SongName, song_file_name))
            {
                return TRUE;
            }
        }
    }

    StopSong();

    if (!SW_SHAREWARE)
    {
        if (cdaudio_track >= 0)
        {
            char waveformtrack[MAXWAVEFORMTRACKLENGTH];
            Bstrncpy(waveformtrack, gs.WaveformTrackName, MAXWAVEFORMTRACKLENGTH - 1);

            char *numPos = Bstrstr(waveformtrack, "??");

            if (numPos && (numPos-waveformtrack) < MAXWAVEFORMTRACKLENGTH - 2)
            {
                static const char *tracktypes[] = { ".flac", ".ogg" };
                const size_t tracknamebaselen = Bstrlen(waveformtrack);
                size_t i;

                numPos[0] = '0' + (cdaudio_track / 10) % 10;
                numPos[1] = '0' + cdaudio_track % 10;

                for (i = 0; i < ARRAY_SIZE(tracktypes); ++i)
                {
                    waveformtrack[tracknamebaselen] = '\0';
                    Bstrncat(waveformtrack, tracktypes[i], MAXWAVEFORMTRACKLENGTH);

                    if (LoadSong(waveformtrack))
                    {
                        SongVoice = FX_PlayLoopedAuto(SongPtr, SongLength, 0, 0, 0,
                                                      255, 255, 255, FX_MUSIC_PRIORITY, MUSIC_ID);
                        if (SongVoice > FX_Ok)
                        {
                            SongType = SongTypeWave;
                            SongTrack = cdaudio_track;
                            SongName = Bstrdup(waveformtrack);
                            return TRUE;
                        }
                    }
                }

                buildprintf("Can't find CD track %i!\n", cdaudio_track);
            }
            else
            {
                buildprintf("Make sure to have \"??\" as a placeholder for the track number in your WaveformTrackName!\n");
                buildprintf("  e.g. WaveformTrackName = \"MUSIC/Track??\"\n");
            }
        }
    }

    if (!song_file_name || !LoadSong(song_file_name))
    {
        return FALSE;
    }

    if (!memcmp(SongPtr, "MThd", 4))
    {
        MUSIC_PlaySong(SongPtr, /*SongLength,*/  MUSIC_LoopSong);
        SongType = SongTypeMIDI;
        SongName = strdup(song_file_name);
        return TRUE;
    }
    else
    {
        SongVoice = FX_PlayLoopedAuto(SongPtr, SongLength, 0, 0, 0,
                                      255, 255, 255, FX_MUSIC_PRIORITY, MUSIC_ID);
        if (SongVoice > FX_Ok)
        {
            SongType = SongTypeWave;
            SongName = strdup(song_file_name);
            return TRUE;
        }
    }

    return FALSE;
}
Exemple #11
0
struct Root *LoadRoot(void){
	static char *objs[1]={
		"SONG"
	};
	static char *vars[14]={
		"def_instrument",
		"curr_block",
		"tempo",
		"lpb",
                "signature_numerator",
                "signature_denominator",                
		"quantitize",
                "quantitize_numerator",
                "quantitize_denominator",
                "grid_numerator",
                "grid_denominator",
		"keyoct",
		"min_standardvel",
		"standardvel"
	};
	struct Root *ret=DC_alloc(sizeof(struct Root));
        ret->quantitize_options = root->quantitize_options;
	ret->scrollplayonoff=true;
        ret->min_standardvel=MAX_VELOCITY*40/100;
        ret->editonoff=true;
        ret->grid_numerator=1;
        ret->grid_denominator=1;
        ret->signature.numerator=4;
        ret->signature.denominator=4;

	GENERAL_LOAD(1,14);



obj0:
	ret->song=LoadSong();
	goto start;
var0:
	goto start;			// Don't bother with instruments yet.
var1:
	ret->curr_block=DC_LoadN();
	goto start;
var2:
	ret->tempo=DC_LoadI();
	goto start;
var3:
	ret->lpb=DC_LoadI();
	goto start;

var4:
	ret->signature.numerator=DC_LoadI();
	goto start;

var5:
	ret->signature.denominator=DC_LoadI();
	goto start;

var6:
        DC_LoadF();
	goto start;

var7:
        ret->quantitize_options.quant.numerator = DC_LoadI();
	goto start;

var8:
        ret->quantitize_options.quant.denominator = DC_LoadI();
	goto start;

var9:
        ret->grid_numerator=DC_LoadI();
        goto start;

var10:
        ret->grid_denominator=DC_LoadI();
        goto start;

var11:
	ret->keyoct=DC_LoadI();
	goto start;

var12:
	ret->min_standardvel=DC_LoadI();
	goto start;

var13:
	ret->standardvel=DC_LoadI();
	goto start;

var14:
var15:
var16:
var17:
var18:
var19:
 var20:
        
obj1:
obj2:
obj3:
obj4:
obj5:
obj6:
debug("loadroot, very wrong\n");

error:
debug("loadroot, goto error\n");

end:

	return ret;
}
Song ParserBase::LoadSong(const QString& filename_or_url, qint64 beginning, const QDir& dir) const {
  Song song;
  LoadSong(filename_or_url, beginning, dir, &song);
  return song;
}