Permalink
Please sign in to comment.
Browse files
Extra audio features, loop audio & close all but currently playing
- Loading branch information...
Showing
with
148 additions
and 22 deletions.
- +86 −0 gui/audiostream.cpp
- +31 −0 gui/audiostream.h
- +7 −4 gui/fastqspwindow.cpp
- +3 −2 gui/fastqspwindow.h
- +4 −2 gui/gui.pro
- +2 −2 gui/qsp_callback.cpp
- +1 −1 gui/qsp_callback.h
- +2 −2 qsp/bindings/default/default_callbacks.cpp
- +1 −1 qsp/callbacks.h
- +1 −0 qsp/game.cpp
- +8 −6 qsp/playlist.cpp
- +1 −1 qsp/qsp.h
- +1 −1 qsp/statements.cpp
86
gui/audiostream.cpp
| @@ -0,0 +1,86 @@ | ||
| +#include "audiostream.h" | ||
| + | ||
| +AudioStream::AudioStream(QMap<QString, AudioStream*> *audio) : | ||
| + QMediaPlayer(new QMediaPlayer()), | ||
| + audio(audio) | ||
| +{ | ||
| +} | ||
| + | ||
| +AudioStream::~AudioStream() | ||
| +{ | ||
| +} | ||
| + | ||
| +void AudioStream::updateFlags(QString flags) | ||
| +{ | ||
| + if(m_flags == flags) | ||
| + return; | ||
| + | ||
| + m_flags = flags; | ||
| + | ||
| + if (flags.contains("!") || flags.contains("only")) | ||
| + only_play_this = true; | ||
| + else | ||
| + only_play_this = false; | ||
| + | ||
| + if (flags.contains("@") || flags.contains("loop")) | ||
| + { | ||
| + if(loop == false) | ||
| + { | ||
| + loop = true; | ||
| + connect(this, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(playAgain(QMediaPlayer::State))); | ||
| + } | ||
| + } | ||
| + else | ||
| + { | ||
| + if(loop == true) | ||
| + { | ||
| + loop = false; | ||
| + disconnect(this, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(playAgain(QMediaPlayer::State))); | ||
| + } | ||
| + } | ||
| +} | ||
| + | ||
| +void AudioStream::play() | ||
| +{ | ||
| + if(only_play_this) | ||
| + { | ||
| + for(AudioStream *x : *audio) | ||
| + { | ||
| + if(x != this) | ||
| + { | ||
| + if(x->state() != StoppedState) | ||
| + x->stop(); | ||
| + } | ||
| + } | ||
| + } | ||
| + stop_looping = false; | ||
| + (static_cast<QMediaPlayer*>(this))->play(); | ||
| +} | ||
| + | ||
| +void AudioStream::stop() | ||
| +{ | ||
| + stop_looping = true; | ||
| + QPropertyAnimation *fadeout = new QPropertyAnimation(this, "volume"); | ||
| + fadeout->setDuration(500); | ||
| + fadeout->setStartValue(this->volume()); | ||
| + fadeout->setEndValue(0); | ||
| + connect(fadeout, SIGNAL(finished()), this, SLOT(stopStream())); | ||
| + fadeout->start(QPropertyAnimation::DeleteWhenStopped); | ||
| +} | ||
| + | ||
| +void AudioStream::playAgain(State state) | ||
| +{ | ||
| + if (state == StoppedState) | ||
| + { | ||
| + if(!stop_looping) | ||
| + { | ||
| + play(); | ||
| + } | ||
| + } | ||
| +} | ||
| + | ||
| +void AudioStream::stopStream() | ||
| +{ | ||
| + (static_cast<QMediaPlayer*>(this))->stop(); | ||
| +} | ||
| + |
31
gui/audiostream.h
| @@ -0,0 +1,31 @@ | ||
| +#ifndef AUDIOSTREAM_H | ||
| +#define AUDIOSTREAM_H | ||
| +#include <QMediaPlayer> | ||
| +#include <QMap> | ||
| +#include <QPropertyAnimation> | ||
| + | ||
| +class AudioStream : public QMediaPlayer | ||
| +{ | ||
| + Q_OBJECT | ||
| +public: | ||
| + AudioStream(QMap<QString, AudioStream*> *audio); | ||
| + ~AudioStream(); | ||
| + bool loop = false; | ||
| + bool only_play_this = false; | ||
| + bool stop_looping = false; | ||
| + void updateFlags(QString flags); | ||
| + | ||
| +public slots: | ||
| + void play(); | ||
| + void stop(); | ||
| + | ||
| +private slots: | ||
| + void playAgain(QMediaPlayer::State); | ||
| + void stopStream(); | ||
| + | ||
| +private: | ||
| + QMap<QString, AudioStream*> *audio; | ||
| + QString m_flags; | ||
| +}; | ||
| + | ||
| +#endif // AUDIOSTREAM_H |
11
gui/fastqspwindow.cpp
5
gui/fastqspwindow.h
6
gui/gui.pro
4
gui/qsp_callback.cpp
2
gui/qsp_callback.h
4
qsp/bindings/default/default_callbacks.cpp
2
qsp/callbacks.h
1
qsp/game.cpp
14
qsp/playlist.cpp
2
qsp/qsp.h
2
qsp/statements.cpp
0 comments on commit
9af09ee