| // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // Defined an interface to be implemented for passing as a callback |
| // to receive synthesized audio data from the TTS engine. |
| |
| #include <stdint.h> |
| #include <cstring> |
| |
| #ifndef SPEECH_CLIENT_SYNTHESIS_SERVICE_TTS_RECEIVER_H_ |
| #define SPEECH_CLIENT_SYNTHESIS_SERVICE_TTS_RECEIVER_H_ |
| |
| namespace speech_synthesis { |
| |
| enum tts_synth_status { |
| TTS_SYNTH_DONE = 0, // Only the LAST call to Receive() for a given |
| // synthesis should have status = TTS_SYNTH_DONE. |
| TTS_SYNTH_PENDING = 1 |
| }; |
| |
| enum tts_callback_status { |
| TTS_CALLBACK_CONTINUE = 1, // The normal case: continue if there's more data. |
| TTS_CALLBACK_HALT = 0, // Stop synthesis. The engine should |
| // return TTS_SUCCESS from SynthesizeText(). |
| TTS_CALLBACK_ERROR = 2 // Stop synthesis due to error. The engine should |
| // return TTS_FAILURE from SynthesizeText(). |
| }; |
| |
| template <class DataElement> |
| class TtsGenericDataReceiver { |
| public: |
| virtual ~TtsGenericDataReceiver() {} |
| // Note that 'data' may be null if num_data_elements is zero; |
| // this is often used with status = TTS_SYNTH_DONE to signal |
| // the end of data. |
| // TODO(fergus): refactor this to remove the status parameter |
| // and instead use a separate Done() method. |
| virtual tts_callback_status Receive(int rate, int num_channels, |
| const DataElement* data, int num_data_elements, |
| tts_synth_status status) = 0; |
| }; |
| |
| // For raw audio (linear 16 bit encoding). |
| typedef TtsGenericDataReceiver<int16_t> TtsDataReceiver; |
| |
| // For compressed audio (arbitrary encoding). |
| typedef TtsGenericDataReceiver<char> TtsEncodedDataReceiver; |
| } |
| |
| #endif // SPEECH_CLIENT_SYNTHESIS_SERVICE_TTS_RECEIVER_H_ |
| |