Home | History | Annotate | Download | only in tts
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 package android.speech.tts;
     17 
     18 /**
     19  * A callback to return speech data synthesized by a text to speech engine.
     20  *
     21  * The engine can provide streaming audio by calling
     22  * {@link #start}, then {@link #audioAvailable} until all audio has been provided, then finally
     23  * {@link #done}.
     24  *
     25  * {@link #error} can be called at any stage in the synthesis process to
     26  * indicate that an error has occurred, but if the call is made after a call
     27  * to {@link #done}, it might be discarded.
     28  *
     29  * After {@link #start} been called, {@link #done} must be called regardless of errors.
     30  */
     31 public interface SynthesisCallback {
     32     /**
     33      * @return the maximum number of bytes that the TTS engine can pass in a single call of
     34      *         {@link #audioAvailable}. Calls to {@link #audioAvailable} with data lengths
     35      *         larger than this value will not succeed.
     36      */
     37     public int getMaxBufferSize();
     38 
     39     /**
     40      * The service should call this when it starts to synthesize audio for this
     41      * request.
     42      *
     43      * This method should only be called on the synthesis thread,
     44      * while in {@link TextToSpeechService#onSynthesizeText}.
     45      *
     46      * @param sampleRateInHz Sample rate in HZ of the generated audio.
     47      * @param audioFormat Audio format of the generated audio. Must be one of
     48      *         the ENCODING_ constants defined in {@link android.media.AudioFormat}.
     49      * @param channelCount The number of channels. Must be {@code 1} or {@code 2}.
     50      * @return {@link TextToSpeech#SUCCESS} or {@link TextToSpeech#ERROR}.
     51      */
     52     public int start(int sampleRateInHz, int audioFormat, int channelCount);
     53 
     54     /**
     55      * The service should call this method when synthesized audio is ready for consumption.
     56      *
     57      * This method should only be called on the synthesis thread,
     58      * while in {@link TextToSpeechService#onSynthesizeText}.
     59      *
     60      * @param buffer The generated audio data. This method will not hold on to {@code buffer},
     61      *         so the caller is free to modify it after this method returns.
     62      * @param offset The offset into {@code buffer} where the audio data starts.
     63      * @param length The number of bytes of audio data in {@code buffer}. This must be
     64      *         less than or equal to the return value of {@link #getMaxBufferSize}.
     65      * @return {@link TextToSpeech#SUCCESS} or {@link TextToSpeech#ERROR}.
     66      */
     67     public int audioAvailable(byte[] buffer, int offset, int length);
     68 
     69     /**
     70      * The service should call this method when all the synthesized audio for a request has
     71      * been passed to {@link #audioAvailable}.
     72      *
     73      * This method should only be called on the synthesis thread,
     74      * while in {@link TextToSpeechService#onSynthesizeText}.
     75      *
     76      * This method has to be called if {@link #start} was called.
     77      *
     78      * @return {@link TextToSpeech#SUCCESS} or {@link TextToSpeech#ERROR}.
     79      */
     80     public int done();
     81 
     82     /**
     83      * The service should call this method if the speech synthesis fails.
     84      *
     85      * This method should only be called on the synthesis thread,
     86      * while in {@link TextToSpeechService#onSynthesizeText}.
     87      */
     88     public void error();
     89 
     90 }