SynthesisCallback.java revision d41b852f92ec2def734eac68a76ecbcea17e3cc9
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 */ 16package 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 * {@link #done} must be called at the end of synthesis, regardless of errors. 30 * 31 * All methods can be only called on the synthesis thread. 32 */ 33public interface SynthesisCallback { 34 /** 35 * @return the maximum number of bytes that the TTS engine can pass in a single call of 36 * {@link #audioAvailable}. Calls to {@link #audioAvailable} with data lengths 37 * larger than this value will not succeed. 38 */ 39 public int getMaxBufferSize(); 40 41 /** 42 * The service should call this when it starts to synthesize audio for this 43 * request. 44 * 45 * This method should only be called on the synthesis thread, 46 * while in {@link TextToSpeechService#onSynthesizeText} or 47 * {@link TextToSpeechService#onSynthesizeTextV2}. 48 * 49 * @param sampleRateInHz Sample rate in HZ of the generated audio. 50 * @param audioFormat Audio format of the generated audio. Must be one of 51 * the ENCODING_ constants defined in {@link android.media.AudioFormat}. 52 * @param channelCount The number of channels. Must be {@code 1} or {@code 2}. 53 * @return {@link TextToSpeech#SUCCESS}, {@link TextToSpeech#ERROR}. 54 * {@link TextToSpeechClient.Status#STOPPED} is also possible if called in context of 55 * {@link TextToSpeechService#onSynthesizeTextV2}. 56 */ 57 public int start(int sampleRateInHz, int audioFormat, int channelCount); 58 59 /** 60 * The service should call this method when synthesized audio is ready for consumption. 61 * 62 * This method should only be called on the synthesis thread, 63 * while in {@link TextToSpeechService#onSynthesizeText} or 64 * {@link TextToSpeechService#onSynthesizeTextV2}. 65 * 66 * @param buffer The generated audio data. This method will not hold on to {@code buffer}, 67 * so the caller is free to modify it after this method returns. 68 * @param offset The offset into {@code buffer} where the audio data starts. 69 * @param length The number of bytes of audio data in {@code buffer}. This must be 70 * less than or equal to the return value of {@link #getMaxBufferSize}. 71 * @return {@link TextToSpeech#SUCCESS} or {@link TextToSpeech#ERROR}. 72 * {@link TextToSpeechClient.Status#STOPPED} is also possible if called in context of 73 * {@link TextToSpeechService#onSynthesizeTextV2}. 74 */ 75 public int audioAvailable(byte[] buffer, int offset, int length); 76 77 /** 78 * The service should call this method when all the synthesized audio for a request has 79 * been passed to {@link #audioAvailable}. 80 * 81 * This method should only be called on the synthesis thread, 82 * while in {@link TextToSpeechService#onSynthesizeText} or 83 * {@link TextToSpeechService#onSynthesizeTextV2}. 84 * 85 * This method has to be called if {@link #start} and/or {@link #error} was called. 86 * 87 * @return {@link TextToSpeech#SUCCESS} or {@link TextToSpeech#ERROR}. 88 * {@link TextToSpeechClient.Status#STOPPED} is also possible if called in context of 89 * {@link TextToSpeechService#onSynthesizeTextV2}. 90 */ 91 public int done(); 92 93 /** 94 * The service should call this method if the speech synthesis fails. 95 * 96 * This method should only be called on the synthesis thread, 97 * while in {@link TextToSpeechService#onSynthesizeText}. 98 */ 99 public void error(); 100 101 102 /** 103 * The service should call this method if the speech synthesis fails. 104 * 105 * This method should only be called on the synthesis thread, 106 * while in {@link TextToSpeechService#onSynthesizeText} or 107 * {@link TextToSpeechService#onSynthesizeTextV2}. 108 * 109 * @param errorCode Error code to pass to the client. One of the ERROR_ values from 110 * {@link TextToSpeechClient.Status} 111 */ 112 public void error(int errorCode); 113 114 /** 115 * Communicate to client that the original request can't be done and client-requested 116 * fallback is happening. 117 * 118 * Fallback can be requested by the client by setting 119 * {@link TextToSpeechClient.Params#FALLBACK_VOICE_NAME} voice parameter with a id of 120 * the voice that is expected to be used for the fallback. 121 * 122 * This method will fail if user called {@link #start(int, int, int)} and/or 123 * {@link #done()}. 124 * 125 * This method should only be called on the synthesis thread, 126 * while in {@link TextToSpeechService#onSynthesizeTextV2}. 127 * 128 * @return {@link TextToSpeech#SUCCESS}, {@link TextToSpeech#ERROR} if client already 129 * called {@link #start(int, int, int)}, {@link TextToSpeechClient.Status#STOPPED} 130 * if stop was requested. 131 */ 132 public int fallback(); 133 134 /** 135 * Check if {@link #start} was called or not. 136 * 137 * This method should only be called on the synthesis thread, 138 * while in {@link TextToSpeechService#onSynthesizeText} or 139 * {@link TextToSpeechService#onSynthesizeTextV2}. 140 * 141 * Useful for checking if a fallback from network request is possible. 142 */ 143 public boolean hasStarted(); 144 145 /** 146 * Check if {@link #done} was called or not. 147 * 148 * This method should only be called on the synthesis thread, 149 * while in {@link TextToSpeechService#onSynthesizeText} or 150 * {@link TextToSpeechService#onSynthesizeTextV2}. 151 * 152 * Useful for checking if a fallback from network request is possible. 153 */ 154 public boolean hasFinished(); 155} 156