espeak_ERROR sync_espeak_Synth_Mark(unsigned int unique_identifier, const void *text, size_t size, const char *index_mark, unsigned int end_position, unsigned int flags, void* user_data) {//========================================================================= espeak_ERROR aStatus; InitText(flags); my_unique_identifier = unique_identifier; my_user_data = user_data; if(index_mark != NULL) { strncpy0(skip_marker, index_mark, sizeof(skip_marker)); skipping_text = 1; } end_character_position = end_position; aStatus = Synthesize(unique_identifier, text, flags | espeakSSML); SHOW_TIME("LEAVE sync_espeak_Synth_Mark"); return (aStatus); } // end of sync_espeak_Synth_Mark
espeak_ng_STATUS sync_espeak_Char(wchar_t character) { // is there a system resource of character names per language? char buf[80]; my_unique_identifier = 0; my_user_data = NULL; sprintf(buf, "<say-as interpret-as=\"tts:char\">&#%d;</say-as>", character); return Synthesize(0, buf, espeakSSML); }
INT16 CFWTproc::OnSynthesize() /* DO NOT CALL THIS FUNCTION FROM C++ SCOPE. */ /* IT MAY INTERFERE WITH THE INTERPRETER SESSION */ { INT16 __nErr = O_K; INT32 __nErrCnt = 0; MIC_CHECK; __nErrCnt = CDlpObject_GetErrorCount(); data* idSignal = MIC_GET_I_EX(idSignal,data,1,1); data* idTrans = MIC_GET_I_EX(idTrans,data,2,2); if (CDlpObject_GetErrorCount()>__nErrCnt) return NOT_EXEC; __nErr = Synthesize(idTrans, idSignal); return __nErr; }
espeak_ng_STATUS sync_espeak_Key(const char *key) { // symbolic name, symbolicname_character - is there a system resource of symbolic names per language? int letter; int ix; ix = utf8_in(&letter, key); if (key[ix] == 0) // a single character return sync_espeak_Char(letter); my_unique_identifier = 0; my_user_data = NULL; return Synthesize(0, key, 0); // speak key as a text string }
/////////////////////////////////////////////////////////////////////////////// /// CConnection::HandleSend /// @description: This function synthesizes the input CMessage and writes it to /// the channel. /// @pre: The CConnection is initialized. /// @post: A CMessage has been written to the socket for this connection. /////////////////////////////////////////////////////////////////////////////// void CConnection::HandleSend(CMessage msg) { Logger::Debug << __PRETTY_FUNCTION__ << std::endl; boost::tribool result_; boost::array<char, 8192>::iterator it_; it_ = m_buffer.begin(); boost::tie( result_, it_ ) = Synthesize( msg, it_, m_buffer.end() - it_ ); GetSocket().async_send(boost::asio::buffer(m_buffer, (it_ - m_buffer.begin()) * sizeof(char) ), boost::bind(&CConnection::HandleWrite, this, boost::asio::placeholders::error)); }
espeak_ERROR sync_espeak_Synth(unsigned int unique_identifier, const void *text, size_t size, unsigned int position, espeak_POSITION_TYPE position_type, unsigned int end_position, unsigned int flags, void* user_data) {//=========================================================================== #ifdef DEBUG_ENABLED ENTER("sync_espeak_Synth"); SHOW("sync_espeak_Synth > position=%d, position_type=%d, end_position=%d, flags=%d, user_data=0x%x, text=%s\n", position, position_type, end_position, flags, user_data, text); #endif espeak_ERROR aStatus; InitText(flags); my_unique_identifier = unique_identifier; my_user_data = user_data; for (int i=0; i < N_SPEECH_PARAM; i++) saved_parameters[i] = param_stack[0].parameter[i]; switch(position_type) { case POS_CHARACTER: skip_characters = position; break; case POS_WORD: skip_words = position; break; case POS_SENTENCE: skip_sentences = position; break; } if(skip_characters || skip_words || skip_sentences) skipping_text = 1; end_character_position = end_position; aStatus = Synthesize(unique_identifier, text, flags); #ifdef USE_ASYNC wave_flush(my_audio); #endif SHOW_TIME("LEAVE sync_espeak_Synth"); return aStatus; } // end of sync_espeak_Synth
espeak_ng_STATUS sync_espeak_Synth_Mark(unsigned int unique_identifier, const void *text, const char *index_mark, unsigned int end_position, unsigned int flags, void *user_data) { InitText(flags); my_unique_identifier = unique_identifier; my_user_data = user_data; if (index_mark != NULL) { strncpy0(skip_marker, index_mark, sizeof(skip_marker)); skipping_text = true; } end_character_position = end_position; return Synthesize(unique_identifier, text, flags | espeakSSML); }
espeak_ng_STATUS sync_espeak_Synth(unsigned int unique_identifier, const void *text, unsigned int position, espeak_POSITION_TYPE position_type, unsigned int end_position, unsigned int flags, void *user_data) { InitText(flags); my_unique_identifier = unique_identifier; my_user_data = user_data; for (int i = 0; i < N_SPEECH_PARAM; i++) saved_parameters[i] = param_stack[0].parameter[i]; switch (position_type) { case POS_CHARACTER: skip_characters = position; break; case POS_WORD: skip_words = position; break; case POS_SENTENCE: skip_sentences = position; break; } if (skip_characters || skip_words || skip_sentences) skipping_text = true; end_character_position = end_position; espeak_ng_STATUS aStatus = Synthesize(unique_identifier, text, flags); #ifdef HAVE_PCAUDIOLIB_AUDIO_H if ((my_mode & ENOUTPUT_MODE_SPEAK_AUDIO) == ENOUTPUT_MODE_SPEAK_AUDIO) { int error = (aStatus == ENS_SPEECH_STOPPED) ? audio_object_flush(my_audio) : audio_object_drain(my_audio); if (error != 0) fprintf(stderr, "error: %s\n", audio_object_strerror(my_audio, error)); } #endif return aStatus; }
void MainLoop(ALport alp, FileDescriptor dacfd, FileDescriptor sockfd, SynthState *v1, SynthState *v2) { /* int hwm = 300, lwm = 256; */ int hwm = 1000, lwm = 800; fd_set read_fds, write_fds; /* largest file descriptor to search for */ int nfds = BIGGER_OF(dacfd, sockfd) + 1; printf("MainLoop: dacfd %d, sockfd %d, nfds %d\n", dacfd, sockfd, nfds); time_to_quit = 0; sigset(SIGINT, catch_sigint); /* set sig handler */ while(!time_to_quit) { /* compute sine wave samples while the sound output buffer is below the high water mark */ while (ALgetfilled(alp) < hwm) { Synthesize(alp, v1, v2); } /* Figure out the time tag corresponding to the time in the future that we haven't computed any samples for yet. */ OSCInvokeAllMessagesThatAreReady(OSCTT_PlusSeconds(OSCTT_CurrentTime(), ALgetfilled(alp) / the_sample_rate)); /* set the low water mark, i.e. when we want control from select(2) */ ALsetfillpoint(alp, OUTPUTQUEUESIZE - lwm); /* set up select */ FD_ZERO(&read_fds); /* clear read_fds */ FD_ZERO(&write_fds); /* clear write_fds */ FD_SET(dacfd, &write_fds); FD_SET(sockfd, &read_fds); FD_SET(0, &read_fds); /* stdin */ /* give control back to OS scheduler to put us to sleep until the DAC queue drains and/or a character is available from standard input */ if (select(nfds, &read_fds, &write_fds, (fd_set * )0, (struct timeval *)0) < 0) { /* select reported an error */ perror("bad select"); goto quit; } if(FD_ISSET(sockfd, &read_fds)) { ReceivePacket(sockfd); } /* is there a character in the queue? */ if (FD_ISSET(0, &read_fds)) { /* this will never block */ char c = getchar(); if (c == 'q') { /* quit */ break; } else if ((c <= '9') && (c >= '0')) { /* tweak frequency */ v1->f = 440.0 + 100.0 * (c - '0'); } } } quit: ALcloseport(alp); closeudp(sockfd); }