return result;
}
+static int __play_sound_data(player_s* player, sound_data_s* sound_data)
+{
+ if (TTSD_ERROR_NONE != g_audio_stream->setAudioFormat(sound_data->audio_type, sound_data->rate)) {
+ SLOG(LOG_ERROR, tts_tag(), "[Player ERROR] Fail to create audio out");
+ return TTSD_ERROR_OPERATION_FAILED;
+ }
+
+ // Check whether set_policy is done or not
+ if (false == g_is_set_policy) {
+ SLOG(LOG_INFO, tts_tag(), "[Player INFO] Set policy");
+ __set_policy_for_playing();
+ }
+
+ if (TTSD_ERROR_NONE != g_audio_stream->prepareAudioOut()) {
+ SLOG(LOG_ERROR, tts_tag(), "[Player ERROR] Fail to prepare audio");
+ return TTSD_ERROR_OPERATION_FAILED;
+ }
+
+ unsigned int idx = sound_data->played_data_size;
+ while (APP_STATE_PLAYING == player->state || APP_STATE_PAUSED == player->state) {
+ if (idx >= sound_data->data_size) {
+ break;
+ }
+
+ unsigned int len = 0;
+ if (idx + SOUND_BUFFER_LENGTH > sound_data->data_size) {
+ len = sound_data->data_size - idx;
+ } else {
+ len = SOUND_BUFFER_LENGTH;
+ }
+
+ char* temp_data = sound_data->data;
+ SLOG(LOG_INFO, tts_tag(), "[Player INFO] Before audio_out_write. data(%p), data[%d](%p), uid(%u), utt_id(%d), len(%u)",
+ temp_data, idx, &temp_data[idx], player->uid, sound_data->utt_id, len);
+
+#ifdef BUF_SAVE_MODE
+ __write_buffer_dump_file(&temp_data[idx], len);
+#endif
+
+ if (TTSD_ERROR_NONE != g_audio_stream->playAudioData(&temp_data[idx], len)) {
+ SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to write audio");
+ } else {
+ idx += len;
+ sound_data->played_data_size = idx;
+ SLOG(LOG_INFO, tts_tag(), "[Player INFO] After audio_out_write");
+ }
+
+ if (APP_STATE_PAUSED == player->state) {
+ return TTSD_ERROR_INVALID_STATE;
+ }
+
+ if (false == __is_player_valid(player)) {
+ return TTSD_ERROR_OPERATION_FAILED;
+ }
+ }
+
+ return TTSD_ERROR_NONE;
+}
+
static void __play_thread_old(void *data, Ecore_Thread *thread)
{
SLOG(LOG_DEBUG, tts_tag(), "@@@ Start thread");
sound_data_s* sound_data = NULL;
int ret = -1;
- int len = SOUND_BUFFER_LENGTH;
- int idx = 0;
/* set volume policy as 40% */
__set_policy_for_playing();
/* Save last event to check utterance start */
player->event = sound_data->event;
- idx = 0;
if (NULL == sound_data->data || 0 >= sound_data->data_size) {
ttse_result_event_e event = sound_data->event;
} // (NULL == sound_data->data || 0 >= sound_data->data_size)
} // NO player->is_paused_data
- // If there is any change in audio format, recreate audio handle
- if (TTSD_ERROR_NONE != g_audio_stream->setAudioFormat(sound_data->audio_type, sound_data->rate)) {
- SLOG(LOG_ERROR, tts_tag(), "[Player ERROR] Fail to create audio out");
- /* unset volume policy, volume will be 100% */
+ ret = __play_sound_data(player, sound_data);
+ if (TTSD_ERROR_INVALID_STATE == ret) {
+ SLOG(LOG_DEBUG, tts_tag(), "[Player] Player(%p) is paused, uid(%u)", player, player->uid);
+ ttsd_data_set_paused_data_existing(player->uid, true);
+ g_audio_stream->unprepareAudioOut();
__unset_policy_for_playing();
return;
- }
+ } else if (TTSD_ERROR_NONE != ret) {
+ SLOG(LOG_ERROR, tts_tag(), "[Player] Fail to play audio data. player(%p), uid(%u)", player, player->uid);
- while (APP_STATE_PLAYING == player->state || APP_STATE_PAUSED == player->state) {
- if ((unsigned int)idx >= sound_data->data_size)
- break;
-
- if ((unsigned int)idx + SOUND_BUFFER_LENGTH > sound_data->data_size) {
- len = sound_data->data_size - idx;
- } else {
- len = SOUND_BUFFER_LENGTH;
- }
-
- // Check whether set_policy is done or not
- if (false == g_is_set_policy) {
- SLOG(LOG_INFO, tts_tag(), "[Player INFO] Set policy");
- __set_policy_for_playing();
- }
-
- if (AudioStream::AUDIO_STATE_READY == g_audio_stream->getState() || AudioStream::AUDIO_STATE_WAIT_FOR_PLAYING == g_audio_stream->getState()) {
- /* Request prepare */
- ret = g_audio_stream->prepareAudioOut();
- if (TTSD_ERROR_NONE != ret) {
- SLOG(LOG_ERROR, tts_tag(), "[Player ERROR] Fail to prepare audio : %d", ret);
-
- /* unset volume policy, volume will be 100% */
- __unset_policy_for_playing();
- return;
- }
-
- SLOG(LOG_DEBUG, tts_tag(), "[Player SUCCESS] Prepare audio");
- }
-
- char* temp_data = sound_data->data;
- SLOG(LOG_INFO, tts_tag(), "[Player INFO] Before audio_out_write. data(%p), data[%d](%p), uid(%u), utt_id(%d), len(%d)",
- temp_data, idx, &temp_data[idx], player->uid, sound_data->utt_id, len);
-#ifdef BUF_SAVE_MODE
- __write_buffer_dump_file(&temp_data[idx], len);
-#endif
- ret = g_audio_stream->playAudioData(&temp_data[idx], len);
- if (TTSD_ERROR_NONE != ret) {
- SLOG(LOG_WARN, tts_tag(), "[Player WARNING] Fail to audio write - %d", ret);
- } else {
- idx += len;
- sound_data->played_data_size = idx;
- SLOG(LOG_INFO, tts_tag(), "[Player INFO] After audio_out_write");
- }
-
- if (NULL == g_playing_info && APP_STATE_PAUSED != player->state) {
- SLOG(LOG_ERROR, tts_tag(), "[Player ERROR] Current player is NULL");
- g_audio_stream->unprepareAudioOut();
- /* unset volume policy, volume will be 100% */
- __unset_policy_for_playing();
- return;
- } // (NULL == g_playing_info && APP_STATE_PAUSED != player->state)
-
- if (APP_STATE_PAUSED == player->state) {
- /* Save data */
- SLOG(LOG_DEBUG, tts_tag(), "[Player] player(%p)", player);
- ttsd_data_set_paused_data_existing(player->uid, true);
-
- SLOG(LOG_INFO, tts_tag(), "[Player] Stop player thread by pause");
- /* Request prepare */
- g_audio_stream->unprepareAudioOut();
- /* unset volume policy, volume will be 100% */
- __unset_policy_for_playing();
- return;
- } // (APP_STATE_PAUSED == player->state)
- } // while (APP_STATE_PLAYING == player->state || APP_STATE_PAUSED == player->state)
+ g_playing_info = NULL;
+ g_audio_stream->unprepareAudioOut();
+ __unset_policy_for_playing();
+ return;
+ }
ttse_result_event_e event = sound_data->event;
int utt_id = sound_data->utt_id;