Convierta texto en voz expresiva y de alta calidad en su aplicación para Android con el SDK de conversión de texto a voz (TTS) de CosyVoice.
NativeNui
El SDK admite múltiples instancias de NativeNui y utiliza devoluciones de llamada para entregar eventos de síntesis.
Aspectos destacados de la arquitectura:-
Múltiples instancias: Cree una instancia llamando a
new NativeNui(Constants.ModeType.MODE_STREAM_INPUT_TTS). -
Impulsado por devoluciones de llamada: Reciba eventos y datos de audio a través de la interfaz
INativeStreamInputTtsCallback. -
Tipos de eventos:
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED: La tarea de síntesis ha comenzado.onStreamInputTtsDataCallback: Se entregan los datos de audio.STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE: La tarea de síntesis ha finalizado.STREAM_INPUT_TTS_EVENT_TASK_FAILED: La tarea de síntesis ha fallado.
Flujo de uso
CosyVoice admite dos modos de invocación: entrada única y entrada en streaming.
Entrada única es adecuada para textos cortos y cualquier escenario que utilice marcado SSML.
playStreamInputTts()oasyncPlayStreamInputTts()— envía un texto completo e inicia la síntesis. El primero es síncrono y retorna después de que finaliza la síntesis; el segundo es asíncrono y retorna inmediatamente después de iniciar la síntesis.onStreamInputTtsDataCallback()— recibir datos de audio.STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE— la síntesis ha finalizado.
Entrada en streaming es adecuada para escenarios de conversación en tiempo real y de formato largo "hablar sobre la marcha". SSML no es compatible con este modo.
startStreamInputTts()— inicializar el SDK y configurar los parámetros de devolución de llamada y conexión.sendStreamInputTts()— enviar texto continuamente a medida que esté disponible.onStreamInputTtsDataCallback()— recibir datos de audio.stopStreamInputTts()oasyncStopStreamInputTts()— enviar la solicitud de fin de síntesis. El primero es síncrono y regresa después de que finaliza la síntesis; el segundo es asíncrono y regresa inmediatamente después de enviar la solicitud.STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE— la síntesis ha finalizado.
startStreamInputTts
Inicia la síntesis en streaming bidireccional, abre la conexión al servicio y registra la devolución de llamada para eventos y datos de audio.
Este método puede bloquearse. Llámelo en un hilo que no sea de UI.
Firma del método:public synchronized int startStreamInputTts(INativeStreamInputTtsCallback callback,
String ticket,
String parameters,
String session_id,
int log_level,
boolean save_log)
Parámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
callback | INativeStreamInputTtsCallback | Su implementación de la interfaz de devolución de llamada de eventos y datos. |
ticket | String | Una cadena JSON que contiene configuraciones de autenticación, conexión y depuración. Consulte la referencia del parámetro ticket a continuación. |
parameters | String | Una cadena JSON que controla la salida de la síntesis de voz. Consulte la referencia de parámetros a continuación. |
session_id | String | Un ID de sesión especificado por el cliente. Si se omite, el servidor genera uno automáticamente. |
log_level | int | Controla la verbosidad de los registros internos del SDK. Valores válidos:
|
save_log | boolean | Si se deben escribir registros en un archivo local. Si es true, configure debug_path en el ticket para especificar el destino y, opcionalmente, configure max_log_file_size para limitar el tamaño del archivo. |
Devuelve un código de error.
ejemplo JSON del ticket:{
"url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference",
"apikey": "sk-****",
"device_id": "my_device_id"
}
parámetros del ticket:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
url | String | Sí | Dirección del servicio:
Reemplace |
apikey | String | Sí | Su clave API. Para limitar el radio de impacto si se expone una clave de larga duración, utilice en su lugar una clave API temporal de corta duración. |
device_id | String | Sí | Un identificador único para el usuario final. Configúrelo con su ID de usuario dentro de la aplicación o con un identificador de dispositivo generado por el cliente. Este ID se utiliza principalmente para la correlación de registros y la resolución de problemas. |
complete_waiting_ms | int | No | Después de llamar al método stop, el tiempo en milisegundos para esperar el evento STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE antes de que se agote el tiempo de espera.Predeterminado: 10000. |
debug_path | String | No | La ruta local donde se escriben los archivos de registro. Este parámetro solo surte efecto cuando Se conservan como máximo dos archivos de registro en el dispositivo. |
max_log_file_size | int | No | El tamaño máximo del archivo de registro en bytes. Este parámetro surte efecto solo cuando Predeterminado: 104857600 (100 × 1024 × 1024 bytes, o 100 MiB). |
log_track_level | int | No | Nivel de filtro para los registros que se entregan a través de la devolución de llamada de registro (onStreamInputTtsLogTrackCallback).Predeterminado: 2. Valores válidos:
Nota: |
{
"model": "cosyvoice-v3-plus",
"voice": "longanyang",
"format": "mp3",
"volume": 50,
"rate": 1.0,
"pitch": 1.0
}
referencia de parámetros:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
model | String | Sí | El nombre del modelo. |
voice | String | Sí | La voz utilizada para la síntesis de habla.
|
format | String | No | El formato de codificación de audio. Valores válidos:
|
enable_audio_decoder | boolean | No | Si se debe habilitar el decodificador interno del SDK. Valor predeterminado: false. Este parámetro surte efecto solo cuando el formato de codificación de audio es opus o mp3. Cuando está habilitado, el SDK decodifica los datos de audio opus o mp3 en datos PCM antes de devolverlos. |
volume | int | No | El nivel de volumen. Valor predeterminado: 50. Valores válidos: [0, 100]. |
sample_rate | int | No | La tasa de muestreo de audio en Hz. Valores válidos: 8000, 16000, 22050 (predeterminado), 24000, 44100, 48000. |
rate | float | No | La velocidad del habla. Valor predeterminado: 1.0. Valores válidos: [0.5, 2.0]. |
pitch | float | No | El tono. Valor predeterminado: 1.0. Valores válidos: [0.5, 2.0]. |
bit_rate | int | No | La tasa de bits de audio en kbps. Cuando el formato de audio es mp3 u opus, utilice bit_rate para ajustar la tasa de bits.Valor predeterminado: 32. Valores válidos: [6, 510]. |
enable_ssml | boolean | No | Si se debe habilitar SSML. Predeterminado: false.
Para las restricciones de uso de SSML (modelos, voces y API compatibles), consulte Limitaciones. |
word_timestamp_enabled | boolean | No | Especifica si se deben habilitar las marcas de tiempo a nivel de palabra. Valor predeterminado: false. Disponible solo en modo de salida por streaming. Voces compatibles: voces clonadas de cosyvoice-v3.5-plus, cosyvoice-v3.5-flash, cosyvoice-v3-flash, cosyvoice-v3-plus, cosyvoice-v2 y voces del sistema marcadas como compatibles en la CosyVoice lista de voces. Las voces clonadas de otros modelos no admiten esta función.
|
seed | int | No | Una semilla aleatoria para controlar la variación en la salida de la síntesis. Cuando la versión del modelo, el texto, la voz y otros parámetros no cambian, usar la misma semilla produce resultados idénticos. Valor predeterminado: 0. Valores válidos: [0, 65535]. |
language_hints | String[] | No | Importante
Especifica el idioma objetivo para la síntesis de voz con el fin de mejorar la calidad de salida. Cuando la pronunciación de dígitos, la expansión de abreviaturas, la lectura de símbolos o la síntesis en idiomas minoritarios no cumpla con las expectativas, utilice este parámetro. Por ejemplo:
Valores válidos
|
instruction | String | No | Controla las características de la síntesis, como el dialecto, la emoción o el estilo de habla. Para detalles de uso, consulte Control de instrucciones. |
enable_aigc_tag | boolean | No | Especifica si se debe incrustar una marca de agua AIGC en el audio generado. Cuando se establece en true, la marca de agua se incrusta en archivos de audio de formatos compatibles (wav/mp3/opus). Valor predeterminado: false. NotaSolo cosyvoice-v3-flash, cosyvoice-v3-plus y cosyvoice-v2 admiten esta función. |
aigc_propagator | String | No | Establece el campo ContentPropagator en la marca de agua AIGC, identificando al propagador del contenido. Surte efecto solo cuando enable_aigc_tag es true.Valor predeterminado: UID de Alibaba Cloud. NotaSolo cosyvoice-v3-flash, cosyvoice-v3-plus y cosyvoice-v2 admiten esta función. |
aigc_propagate_id | String | No | Establece el campo PropagateID en la marca de agua AIGC, identificando de manera única una acción de propagación específica. Surte efecto solo cuando enable_aigc_tag es true.Valor predeterminado: El ID de solicitud de la solicitud actual de síntesis de voz. NotaSolo cosyvoice-v3-flash, cosyvoice-v3-plus y cosyvoice-v2 admiten esta función. |
hot_fix | object | No | Configuración de corrección rápida de texto para personalizar la pronunciación de palabras especificadas o reemplazar texto antes de la síntesis. Notacosyvoice-v2 no admite esta función. Campos:
Ejemplo: |
enable_markdown_filter | boolean | No | NotaSolo las voces clonadas de cosyvoice-v3-flash admiten esta función. Si se debe filtrar el marcado Markdown del texto de entrada antes de la síntesis para que el marcado no se lea en voz alta. Predeterminado: false. Valores válidos:
|
sendStreamInputTts
Envía el texto que se va a sintetizar. Utilice este método junto con startStreamInputTts.
Después de llamar a startStreamInputTts, llame a este método para enviar texto continuamente.
Cuando haya enviado todo el texto, llame a stopStreamInputTts o asyncStopStreamInputTts para finalizar la entrada.
public synchronized int sendStreamInputTts(String text)
Parámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
text | String | Texto a sintetizar. SSML no es compatible. Las etiquetas SSML en la entrada se leen en voz alta como texto sin formato en lugar de ser analizadas. |
Devuelve un código de error.
stopStreamInputTts
Método síncrono que indica al servidor que se ha enviado todo el texto y se bloquea hasta que se haya sintetizado todo el audio y se reciba el evento STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE.
El tiempo de espera es controlado por complete_waiting_ms.
public synchronized int stopStreamInputTts()
Valor devuelto:
Devuelve un código de error.
asyncStopStreamInputTts
Método asíncrono que indica al servidor que se ha enviado todo el texto. La llamada regresa inmediatamente y la síntesis continúa en segundo plano.
Utilice el evento STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE para detectar cuándo ha finalizado la síntesis.
public synchronized int asyncStopStreamInputTts()
Valor devuelto:
Devuelve un código de error.
cancelStreamInputTts
Cierra inmediatamente la conexión al servidor y aborta la tarea de síntesis actual. No se entregan más devoluciones de llamada de audio después de esta llamada.
Firma del método:public synchronized int cancelStreamInputTts()
Valor devuelto:
Devuelve un código de error.
playStreamInputTts
Método de síntesis única síncrono. La llamada envía el texto, se bloquea mientras se recibe el audio y regresa solo después de que la síntesis ha finalizado. No necesita llamar al método stop posteriormente.
SSML está habilitado de forma predeterminada para este método. Para anularlo, configure enable_ssml explícitamente.
Llame a este método en un hilo que no sea de UI.
Firma del método:public synchronized int playStreamInputTts(INativeStreamInputTtsCallback callback,
String ticket,
String parameters,
String text,
String session_id,
int log_level,
boolean save_log)
Parámetros:
La devolución de llamada, el ticket y otros parámetros compartidos tienen el mismo significado que en startStreamInputTts.
| Parámetro | Tipo | Descripción |
|---|---|---|
text | String | Texto a sintetizar. Admite SSML. |
Devuelve un código de error.
asyncPlayStreamInputTts
Método de síntesis única asíncrono. La llamada regresa inmediatamente, la síntesis se ejecuta en segundo plano y los resultados se entregan a través de la devolución de llamada. No necesita llamar al método stop posteriormente.
SSML está habilitado de forma predeterminada para este método. Para anularlo, configure enable_ssml explícitamente.
public synchronized int asyncPlayStreamInputTts(INativeStreamInputTtsCallback callback,
String ticket,
String parameters,
String text,
String session_id,
int log_level,
boolean save_log)
Parámetros:
La devolución de llamada, el ticket y otros parámetros compartidos tienen el mismo significado que en startStreamInputTts.
| Parámetro | Tipo | Descripción |
|---|---|---|
text | String | Texto a sintetizar. Admite SSML. |
Devuelve un código de error.
INativeStreamInputTtsCallback
La interfaz de devolución de llamada TTS en streaming de CosyVoice entrega eventos de síntesis, datos de audio y registros.
onStreamInputTtsEventCallback: recibir eventos
Firma del método:void onStreamInputTtsEventCallback(StreamInputTtsEvent event,
String task_id,
String session_id,
int ret_code,
String error_msg,
String timestamp,
String all_response);
Parámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
event | StreamInputTtsEvent | El evento que se está entregando. |
task_id | String | El ID de la tarea de síntesis. |
session_id | String | El ID de sesión. Se devuelve tal como lo proporcionó el cliente; generado por el servidor si se omite. |
ret_code | int | Código de error. Válido solo con el evento STREAM_INPUT_TTS_EVENT_TASK_FAILED. |
error_msg | String | Mensaje de error. Válido solo con el evento STREAM_INPUT_TTS_EVENT_TASK_FAILED. |
timestamp | String | Información de marca de tiempo para el resultado de la síntesis. |
all_response | String | La respuesta JSON completa. Analícela para extraer cualquier dato adicional que necesite. |
onStreamInputTtsDataCallback: recibir datos de audio
El SDK invoca esta devolución de llamada repetidamente durante la síntesis. Lea los datos de audio desde la devolución de llamada.
Firma del método:void onStreamInputTtsDataCallback(byte[] data);
Parámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
data | byte[] | Datos de audio para el segmento actual. Úselos para:
Notas:
|
onStreamInputTtsLogTrackCallback: recibir registros de seguimiento
Utilice esta devolución de llamada para recibir registros internos detallados del SDK, lo cual ayuda en la resolución de problemas y depuración.
Firma del método:default void onStreamInputTtsLogTrackCallback(Constants.LogLevel level, String log)
StreamInputTtsEvent
Enumeración de tipos de eventos para la síntesis de habla en streaming de CosyVoice.
| Evento | Descripción |
|---|---|
STREAM_INPUT_TTS_EVENT_SYNTHESIS_STARTED | El servidor ha aceptado la solicitud y ha comenzado el procesamiento. Poco después de este evento, onStreamInputTtsDataCallback comienza a devolver los primeros datos de audio. |
STREAM_INPUT_TTS_EVENT_SENTENCE_SYNTHESIS | Información de ejecución sobre la síntesis, incluidos los datos de facturación. |
STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE | El servidor ha enviado todos los datos de audio y onStreamInputTtsEventCallback no se volverá a llamar. Este evento es la señal explícita de que el flujo de audio ha terminado. |
STREAM_INPUT_TTS_EVENT_TASK_FAILED | La tarea falló. Lea el campo all_response de INativeStreamInputTtsCallback para obtener task_id, error_code y error_message e identificar la causa. |
Código de ejemplo
-
Obtener una clave API: Obtenga una clave API. Por seguridad, almacene la clave API en una variable de entorno.
NotaUtilice una clave de API temporal cuando necesite otorgar acceso temporal a una aplicación o usuario externo, o cuando want controlar estrictamente operaciones de alto riesgo, como acceder a datos confidenciales o eliminarlos. Una clave de API temporal tiene una validez de 60 segundos, tras los cuales debe solicitar una nueva.
-
Descargue el SDK y ejecute el código de ejemplo:
- Descargue el paquete más reciente del SDK.
- Descomprima el paquete. El SDK en formato AAR se encuentra en
app/libs— agréguelo a las dependencias de su proyecto. Para la integración con C++ en Android, obtenga las bibliotecas compartidas deandroid_libsy los encabezados deandroid_includedentro del ZIP. - Abra el proyecto en Android Studio. El código de ejemplo se encuentra en
DashCosyVoiceStreamTtsActivity.java— reemplace la clave API con la suya propia para probar la función.
Modos de invocación
| Modo | Descripción |
|---|---|
One-shot text input | Pasos:
|
Streaming text input | Pasos:
|
Funciones avanzadas
Marcado SSML
Propósito: Incrustar etiquetas XML en el texto para ajustar la pronunciación, la velocidad de habla, las pausas y otros detalles prosódicos.
Limitaciones: SSML solo es compatible con entrada de texto única (los métodos playStreamInputTts o asyncPlayStreamInputTts). La entrada de texto en streaming (el método sendStreamInputTts) no admite SSML.
Uso: Cuando llama a playStreamInputTts o asyncPlayStreamInputTts, el SDK habilita SSML automáticamente. Pase el texto que contiene etiquetas SSML a través del parámetro text.
Para más información, consulte SSML.
Expresiones matemáticas
Propósito: Permitir que el modelo lea en voz alta fórmulas y expresiones matemáticas comunes correctamente.
Uso: Pase texto que contenga expresiones matemáticas con formato LaTeX a través del parámetro text. Para más información, consulte Convertir fórmulas LaTeX a voz (solo idioma chino).