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