30 |
30 |
#include "AudioPlayerLibAO.h"
|
31 |
31 |
#include "AudioPlayerRSB.h"
|
32 |
32 |
#include <boost/algorithm/string/predicate.hpp>
|
33 |
|
#include <boost/thread/mutex.hpp>
|
|
33 |
#include <mutex>
|
|
34 |
#include <thread>
|
34 |
35 |
#include <iostream>
|
35 |
36 |
|
36 |
37 |
using namespace boost;
|
... | ... | |
68 |
69 |
|
69 |
70 |
void Arbiter::set_default_emotion(EmotionState e){
|
70 |
71 |
//lock access
|
71 |
|
boost::mutex::scoped_lock scoped_lock(emotion_config_default_mutex);
|
|
72 |
const std::lock_guard<std::mutex> lock(emotion_config_default_mutex);
|
72 |
73 |
|
73 |
74 |
//update our config, ignore duration as this is the default emotion
|
74 |
75 |
emotion_config_default.select_config(e.value);
|
... | ... | |
81 |
82 |
|
82 |
83 |
void Arbiter::set_current_emotion(EmotionState e){
|
83 |
84 |
//lock access
|
84 |
|
boost::mutex::scoped_lock scoped_lock(emotion_config_current_mutex);
|
|
85 |
const std::lock_guard<std::mutex> lock(emotion_config_current_mutex);
|
85 |
86 |
|
86 |
87 |
//this will set a emotion override for a given time, after the timeout
|
87 |
88 |
//we will return to the default emotion state:
|
... | ... | |
96 |
97 |
|
97 |
98 |
void Arbiter::set_mouth_config(MouthConfig m){
|
98 |
99 |
//lock access
|
99 |
|
boost::mutex::scoped_lock scoped_lock(mouth_config_override_mutex);
|
|
100 |
const std::lock_guard<std::mutex> lock(mouth_config_override_mutex);
|
100 |
101 |
|
101 |
102 |
mouth_config = m;
|
102 |
103 |
}
|
103 |
104 |
|
104 |
105 |
void Arbiter::set_gaze_target(humotion::GazeState target){
|
105 |
106 |
//lock access
|
106 |
|
boost::mutex::scoped_lock scoped_lock(requested_gaze_state_mutex);
|
|
107 |
const std::lock_guard<std::mutex> lock(requested_gaze_state_mutex);
|
107 |
108 |
|
108 |
109 |
requested_gaze_state = target;
|
109 |
110 |
}
|
110 |
111 |
|
111 |
112 |
void Arbiter::set_mouth_target(humotion::MouthState target){
|
112 |
113 |
//lock access
|
113 |
|
boost::mutex::scoped_lock scoped_lock(requested_mouth_state_mutex);
|
|
114 |
const std::lock_guard<std::mutex> lock(requested_mouth_state_mutex);
|
114 |
115 |
|
115 |
116 |
requested_mouth_state = target;
|
116 |
117 |
}
|
... | ... | |
119 |
120 |
void Arbiter::play_animation(boost::shared_ptr<Animation> incoming_animation){
|
120 |
121 |
//incoming animation, check if this would conflict with any pending animations:
|
121 |
122 |
//lock access & iterate over vector:
|
122 |
|
boost::mutex::scoped_lock lock_av(active_animation_vector_mutex);
|
|
123 |
std::unique_lock<std::mutex> lock_av(active_animation_vector_mutex);
|
123 |
124 |
active_animation_vector_t::iterator it;
|
124 |
125 |
for(it = active_animation_vector.begin(); it<active_animation_vector.end(); it++){
|
125 |
126 |
boost::shared_ptr<Animation> current_ani = *it;
|
... | ... | |
162 |
163 |
|
163 |
164 |
void Arbiter::speak(boost::shared_ptr<Utterance> u){ //, ao_sample_format audio_format, char *audio_data, unsigned int audio_len){
|
164 |
165 |
//lock audio playback as such:
|
165 |
|
boost::mutex::scoped_lock scoped_lock_audio(audio_player_mutex);
|
|
166 |
const std::lock_guard<std::mutex> lock_audio(audio_player_mutex);
|
166 |
167 |
|
167 |
|
//lock utterance & store data:
|
168 |
|
boost::mutex::scoped_lock scoped_lock(utterance_mutex);
|
169 |
|
utterance = u;
|
170 |
|
scoped_lock.unlock();
|
|
168 |
{
|
|
169 |
//lock utterance & store data:
|
|
170 |
const std::lock_guard<std::mutex> lock(utterance_mutex);
|
|
171 |
utterance = u;
|
|
172 |
}
|
171 |
173 |
|
172 |
174 |
//start audio playback, this function returns once we started playback
|
173 |
175 |
if (audio_player == NULL){
|
... | ... | |
272 |
274 |
}
|
273 |
275 |
|
274 |
276 |
//lock access
|
275 |
|
boost::mutex::scoped_lock scoped_lock1(emotion_config_default_mutex);
|
|
277 |
const std::lock_guard<std::mutex> lock1(emotion_config_default_mutex);
|
276 |
278 |
|
277 |
279 |
|
278 |
280 |
// did the current emotion time out?
|
... | ... | |
344 |
346 |
|
345 |
347 |
void Arbiter::override_by_animation(){
|
346 |
348 |
//lock access & iterate over vector:
|
347 |
|
boost::mutex::scoped_lock lock_av(active_animation_vector_mutex);
|
|
349 |
const std::lock_guard<std::mutex> lock_av(active_animation_vector_mutex);
|
348 |
350 |
active_animation_vector_t::iterator it;
|
349 |
351 |
for(it = active_animation_vector.begin(); it<active_animation_vector.end(); it++){
|
350 |
352 |
boost::shared_ptr<Animation> current_ani = *it;
|