bool MusicDriver_LibTimidity::IsSongPlaying() { if (_midi.status == MIDI_PLAYING) { _midi.song_position = mid_song_get_time(_midi.song); if (_midi.song_position >= _midi.song_length) { _midi.status = MIDI_STOPPED; _midi.song_position = 0; } } return (_midi.status == MIDI_PLAYING); }
//private: qint64 MidiDecoder::readData(char *data, qint64 maxlen) { if (d->state != QtopiaMedia::Playing) return 0; qint64 rc = 0; if (maxlen > 0) { quint32 position = (mid_song_get_time(d->song) / 1000) * 1000; if (d->position != position) { d->position = position; emit positionChanged(d->position); } if ((rc = (qint64) mid_song_read_wave(d->song, data, maxlen)) == 0) { seek(0); mid_song_start(d->song); emit playerStateChanged(d->state = QtopiaMedia::Stopped); } } return rc; }