From 691ace7cc6a9f9806f3fffb53d3a585eff1f0ad0 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 27 Aug 2014 19:05:39 -0700 Subject: [PATCH 1/2] Looping option --- examples/Recorder.js | 20 +++++++++++--------- libraries/avatars/src/AvatarData.cpp | 15 +++++++++++---- libraries/avatars/src/AvatarData.h | 4 +++- libraries/avatars/src/Recorder.cpp | 20 +++++++++++++++++--- libraries/avatars/src/Recorder.h | 9 ++++++++- 5 files changed, 50 insertions(+), 18 deletions(-) diff --git a/examples/Recorder.js b/examples/Recorder.js index 0a42eff576..cf4b422926 100644 --- a/examples/Recorder.js +++ b/examples/Recorder.js @@ -139,7 +139,9 @@ function moveUI() { function mousePressEvent(event) { clickedOverlay = Overlays.getOverlayAtPoint({ x: event.x, y: event.y }); - if (recordIcon === toolBar.clicked(clickedOverlay)) { + print("Status: isPlaying=" + MyAvatar.isPlaying() + ", isRecording=" + MyAvatar.isRecording()); + + if (recordIcon === toolBar.clicked(clickedOverlay) && !MyAvatar.isPlaying()) { if (!MyAvatar.isRecording()) { MyAvatar.startRecording(); toolBar.setBack(COLOR_ON, ALPHA_ON); @@ -148,14 +150,14 @@ function mousePressEvent(event) { MyAvatar.loadLastRecording(); toolBar.setBack(COLOR_OFF, ALPHA_OFF); } - } else if (playIcon === toolBar.clicked(clickedOverlay)) { - if (!MyAvatar.isRecording()) { - if (MyAvatar.isPlaying()) { - MyAvatar.stopPlaying(); - } else { - MyAvatar.startPlaying(true); - } - } + } else if (playIcon === toolBar.clicked(clickedOverlay) && !MyAvatar.isRecording()) { + if (MyAvatar.isPlaying()) { + MyAvatar.stopPlaying(); + } else { + MyAvatar.setPlayFromCurrentLocation(true); + MyAvatar.setPlayerLoop(true); + MyAvatar.startPlaying(true); + } } else if (saveIcon === toolBar.clicked(clickedOverlay)) { if (!MyAvatar.isRecording()) { recordingFile = Window.save("Save recording to file", ".", "*.rec"); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 67da20cf70..17c5d6c259 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -637,16 +637,23 @@ void AvatarData::loadRecording(QString filename) { _player->loadFromFile(filename); } -void AvatarData::startPlaying(bool fromCurrentPosition) { +void AvatarData::startPlaying() { if (QThread::currentThread() != thread()) { - QMetaObject::invokeMethod(this, "startPlaying", Qt::BlockingQueuedConnection, - Q_ARG(bool, fromCurrentPosition)); + QMetaObject::invokeMethod(this, "startPlaying", Qt::BlockingQueuedConnection); return; } if (!_player) { _player = PlayerPointer(new Player(this)); } - _player->startPlaying(fromCurrentPosition); + _player->startPlaying(); +} + +void AvatarData::setPlayFromCurrentLocation(bool playFromCurrentLocation) { + _player->setPlayFromCurrentLocation(playFromCurrentLocation); +} + +void AvatarData::setPlayerLoop(bool loop) { + _player->setLoop(loop); } void AvatarData::play() { diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 26ce5b3b8b..432b68a776 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -303,7 +303,9 @@ public slots: qint64 playerElapsed(); qint64 playerLength(); void loadRecording(QString filename); - void startPlaying(bool fromCurrentPosition = false); + void startPlaying(); + void setPlayFromCurrentLocation(bool playFromCurrentLocation); + void setPlayerLoop(bool loop); void play(); void stopPlaying(); diff --git a/libraries/avatars/src/Recorder.cpp b/libraries/avatars/src/Recorder.cpp index 68fff737c5..9c35668b17 100644 --- a/libraries/avatars/src/Recorder.cpp +++ b/libraries/avatars/src/Recorder.cpp @@ -166,7 +166,9 @@ Player::Player(AvatarData* avatar) : _recording(new Recording()), _avatar(avatar), _audioThread(NULL), - _startingScale(1.0f) + _startingScale(1.0f), + _playFromCurrentPosition(true), + _loop(false) { _timer.invalidate(); _options.setLoop(false); @@ -216,7 +218,7 @@ float Player::getLeanForward() { return _recording->getFrame(_currentFrame).getLeanForward(); } -void Player::startPlaying(bool fromCurrentPosition) { +void Player::startPlaying() { if (_recording && _recording->getFrameNumber() > 0) { qDebug() << "Recorder::startPlaying()"; _currentFrame = 0; @@ -233,7 +235,7 @@ void Player::startPlaying(bool fromCurrentPosition) { // Fake faceshift connection _avatar->setForceFaceshiftConnected(true); - if (fromCurrentPosition) { + if (_playFromCurrentPosition) { _startingPosition = _avatar->getPosition(); _startingRotation = _avatar->getOrientation(); _startingScale = _avatar->getTargetScale(); @@ -291,6 +293,10 @@ void Player::play() { if (_currentFrame < 0 || _currentFrame >= _recording->getFrameNumber() - 1) { // If it's the end of the recording, stop playing stopPlaying(); + + if (_loop) { + startPlaying(); + } return; } @@ -325,6 +331,14 @@ void Player::play() { _injector->setOptions(_options); } +void Player::setPlayFromCurrentLocation(bool playFromCurrentLocation) { + _playFromCurrentPosition = playFromCurrentLocation; +} + +void Player::setLoop(bool loop) { + _loop = loop; +} + bool Player::computeCurrentFrame() { if (!isPlaying()) { _currentFrame = -1; diff --git a/libraries/avatars/src/Recorder.h b/libraries/avatars/src/Recorder.h index 2e4814f9f7..1f41672749 100644 --- a/libraries/avatars/src/Recorder.h +++ b/libraries/avatars/src/Recorder.h @@ -97,6 +97,7 @@ private: QVector _timestamps; QVector _frames; + bool _stereo; Sound* _audio; friend class Recorder; @@ -146,12 +147,15 @@ public: public slots: - void startPlaying(bool fromCurrentPosition = false); + void startPlaying(); void stopPlaying(); void loadFromFile(QString file); void loadRecording(RecordingPointer recording); void play(); + void setPlayFromCurrentLocation(bool playFromCurrentLocation); + void setLoop(bool loop); + private: bool computeCurrentFrame(); @@ -168,6 +172,9 @@ private: glm::vec3 _startingPosition; glm::quat _startingRotation; float _startingScale; + + bool _playFromCurrentPosition; + bool _loop; }; void writeRecordingToFile(RecordingPointer recording, QString file); From 9df68dc2f16ea83c4ac86ba2eec714eb51bd1f5a Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Thu, 28 Aug 2014 10:58:07 -0700 Subject: [PATCH 2/2] CR --- libraries/avatars/src/Recorder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/avatars/src/Recorder.cpp b/libraries/avatars/src/Recorder.cpp index 9c35668b17..69cde6560e 100644 --- a/libraries/avatars/src/Recorder.cpp +++ b/libraries/avatars/src/Recorder.cpp @@ -290,7 +290,7 @@ void Player::loadRecording(RecordingPointer recording) { void Player::play() { computeCurrentFrame(); - if (_currentFrame < 0 || _currentFrame >= _recording->getFrameNumber() - 1) { + if (_currentFrame < 0 || (_currentFrame >= _recording->getFrameNumber() - 1)) { // If it's the end of the recording, stop playing stopPlaying();