Revision 7a918ce1
server/src/Arbiter.cpp | ||
---|---|---|
37 | 37 |
|
38 | 38 |
Arbiter::Arbiter(std::string audio_output){ |
39 | 39 |
//initialize audio player: |
40 |
if (iequals(audio_output.substr(0,3), "rsb")){ |
|
40 |
if (iequals(audio_output, "none")){ |
|
41 |
//allow none for no sound output |
|
42 |
audio_player = NULL; |
|
43 |
}else if (iequals(audio_output.substr(0,3), "rsb")){ |
|
41 | 44 |
#ifdef RSB_SUPPORT |
42 | 45 |
audio_player = new AudioPlayerRSB(audio_output); |
43 | 46 |
#else |
... | ... | |
157 | 160 |
scoped_lock.unlock(); |
158 | 161 |
|
159 | 162 |
//start audio playback, this function returns once we started playback |
160 |
audio_player->play(utterance->get_audio_data()); |
|
163 |
if (audio_player == NULL){ |
|
164 |
printf("> audio_player disabled, not speaking '%s'\n", u.get()->get_text().c_str()); |
|
165 |
}else{ |
|
166 |
audio_player->play(utterance->get_audio_data()); |
|
167 |
} |
|
161 | 168 |
utterance->start_playback(); |
162 | 169 |
|
163 | 170 |
//wait until audio playback was finished: |
164 |
while(audio_player->is_playing()){ |
|
165 |
//save some cpu cycles: |
|
166 |
usleep(1*1000); //1ms |
|
171 |
if (audio_player != NULL){ |
|
172 |
while(audio_player->is_playing()){ |
|
173 |
//save some cpu cycles: |
|
174 |
usleep(1*1000); //1ms |
|
175 |
} |
|
167 | 176 |
} |
177 |
|
|
168 | 178 |
//in case the audio output fails, we end up here before the utterance is finished. |
169 | 179 |
//so check now if the utterance finished as well: |
170 | 180 |
while (utterance->is_playing()){ |
... | ... | |
175 | 185 |
} |
176 | 186 |
|
177 | 187 |
bool Arbiter::speak_active(){ |
178 |
return audio_player->is_playing(); |
|
188 |
if (audio_player == NULL){ |
|
189 |
return false; |
|
190 |
}else{ |
|
191 |
return audio_player->is_playing(); |
|
192 |
} |
|
179 | 193 |
} |
180 | 194 |
|
181 | 195 |
void Arbiter::arbitrate(){ |
Also available in: Unified diff