> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Modo Engine API: Talk (síntesis de voz desde texto) - VOICEVOX for Laravel

> Explica cómo integrar en una app Laravel una API HTTP compatible con el motor VOICEVOX y usar los mismos endpoints de talk que el motor oficial.

## Qué es el modo Engine API

El modo Engine API expone dentro de tu app Laravel una API HTTP compatible con el motor oficial de VOICEVOX.

Solo con arrancar la app con `php artisan serve --port=50513` puedes utilizar tal cual `/audio_query`, `/synthesis`, etc.

## Preparación

<Steps>
  <Step title="Configura VOICEVOX Core for PHP">
    Prepara `voicevox-core-php` y la biblioteca core siguiendo [Instalación y configuración](/es/packages/laravel-voicevox/installation).
  </Step>

  <Step title="Configura las variables de entorno y habilita FFI">
    ```dotenv theme={null}
    VOICEVOX_CORE_PATH=/path/to/voicevox_core/
    ```

    ```ini theme={null}
    ffi.enable=true
    ```
  </Step>

  <Step title="Instala los recursos de información de personajes">
    ```shell theme={null}
    php artisan voicevox:install
    ```
  </Step>
</Steps>

## Arranca el motor versión Laravel

```shell theme={null}
php artisan serve --port=50513
```

Por defecto arranca en `http://127.0.0.1:50513`.

### Sobre el puerto 50513

El puerto por defecto del motor oficial de VOICEVOX es 50021. Para poder arrancar a la vez el motor versión Laravel y el oficial, hemos fijado el puerto por defecto en 50513.

Solo se arranca añadiendo `--port=50513`, así que también puedes usar otro puerto como `--port=8000`.

<Info>
  El motor oficial, si el puerto está en uso, arranca automáticamente en el primer puerto libre a partir del 50022. `php artisan serve`, si no indicas `--port`, también se ajusta automáticamente a partir del 8001, pero si indicas `--port` y el puerto está en uso, el arranque falla. Se recomienda fijar un puerto que difícilmente colisione con otros servicios. El 50513 es un ejemplo.
</Info>

## Generar audio de talk

### 1. Crear el `audio_query`

```shell theme={null}
curl -s -X POST "http://127.0.0.1:50513/audio_query?speaker=1&text=ララベルが好きなのだ" \
  -H "Content-Type: application/json" \
  > audio_query.json
```

### 2. Sintetizar el audio con `synthesis`

```shell theme={null}
curl -s -X POST "http://127.0.0.1:50513/synthesis?speaker=1" \
  -H "Content-Type: application/json" \
  -d @audio_query.json \
  > talk.wav
```

## Uso desde el cliente Laravel

Puedes usar el motor versión Laravel como destino de conexión del modo cliente.

```php theme={null}
// config/voicevox.php
'client' => [
    'url' => env('VOICEVOX_URL', 'http://127.0.0.1:50513'),
],
```

```php theme={null}
use Revolution\Voicevox\Voicevox;

$response = Voicevox::talk('ララベルが好きなのだ', id: 1)
    ->generate(id: 1);

$response->storeAs('engine', 'talk.wav');
```

## Habilitar/deshabilitar la Engine API y fallback

```php theme={null}
'engine' => [
    'disabled' => env('VOICEVOX_ENGINE_DISABLED', false),
    'fallback_url' => env('VOICEVOX_ENGINE_FALLBACK_URL', 'http://127.0.0.1:50021'),
],
```

Los endpoints no implementados como `cancellable_synthesis` o `multi_synthesis` pueden hacer fallback al motor oficial.

<Info>
  Si vas a usar el fallback, arranca el motor oficial en `VOICEVOX_ENGINE_FALLBACK_URL`.
</Info>

## Estado de compatibilidad relacionado con Talk

| Endpoint                      | Versión Laravel | Fallback | Notas                               |
| ----------------------------- | --------------- | -------- | ----------------------------------- |
| `POST /audio_query`           | ✅               | ✅        | No admite `enable_katakana_english` |
| `POST /accent_phrases`        | ✅               | ✅        | No admite `enable_katakana_english` |
| `POST /synthesis`             | ✅               | ✅        |                                     |
| `POST /mora_data`             | ✅               | ✅        |                                     |
| `POST /mora_length`           | ✅               | ✅        |                                     |
| `POST /mora_pitch`            | ✅               | ✅        |                                     |
| `GET /speakers`               | ✅               | ✅        |                                     |
| `GET /speaker_info`           | ✅               | ✅        | Requiere instalar recursos          |
| `POST /cancellable_synthesis` | ❌               | ✅        | Solo fallback                       |
| `POST /multi_synthesis`       | ❌               | ✅        | Solo fallback                       |

## Endpoint TTS compatible con OpenAI

`POST /v1/audio/speech` acepta el mismo formato de petición que la API de síntesis de voz de OpenAI. Basta con cambiar la Base URL para usarlo desde Laravel AI SDK y muchas otras herramientas compatibles con la API de OpenAI.

```shell theme={null}
curl -s -X POST "http://127.0.0.1:50513/v1/audio/speech" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "voicevox",
    "input": "ララベルが好きなのだ",
    "voice": "ずんだもん"
  }' \
  > talk.wav
```

### Parámetros

| Parámetro         | Descripción                                                                                                |
| ----------------- | ---------------------------------------------------------------------------------------------------------- |
| `input`           | Texto a leer (máx. 4096 caracteres)                                                                        |
| `voice`           | ID de estilo (número), alias (`ずんだもん`, `四国めたん`, etc.) o nombre de voz de OpenAI (`alloy`, `shimmer`, etc.) |
| `speed`           | Velocidad de reproducción. Se aplica como `speedScale` (0.25-4.0; por defecto 1.0)                         |
| `response_format` | Siempre se devuelve como wav. El valor indicado se ignora                                                  |
| Otros parámetros  | Se ignoran                                                                                                 |

<Info>
  Los nombres de voz de OpenAI (`alloy`, `shimmer`, etc.) son una asignación provisional. No existe una definición oficial de cómo relacionar cada voz de OpenAI con los personajes de VOICEVOX, así que la relación se hace convencionalmente por compatibilidad. Recomendamos usar los alias de personajes de VOICEVOX (`ずんだもん`, `四国めたん/ノーマル`, etc.).
</Info>

## Siguientes páginas

<Columns cols={2}>
  <Card title="Engine API: Song" href="/es/packages/laravel-voicevox/engine-song" icon="music">
    Revisa cómo usar `sing_frame_audio_query` y `frame_synthesis`.
  </Card>

  <Card title="Integración con Laravel AI SDK" href="/es/packages/laravel-voicevox/ai-sdk" icon="sparkles">
    Revisa la configuración para usar VOICEVOX desde la facade `Audio`.
  </Card>
</Columns>


## Related topics

- [Modo Engine API: Song (síntesis de voz cantada) - VOICEVOX for Laravel](/es/packages/laravel-voicevox/engine-song.md)
- [Modo cliente: Talk (síntesis de voz desde texto) - VOICEVOX for Laravel](/es/packages/laravel-voicevox/client-talk.md)
- [Modo nativo: Talk (síntesis de voz desde texto) - VOICEVOX for Laravel](/es/packages/laravel-voicevox/native-talk.md)
- [Modo cliente: Song (síntesis de voz cantada) - VOICEVOX for Laravel](/es/packages/laravel-voicevox/client-song.md)
- [Modo nativo: Song (síntesis de voz cantada) - VOICEVOX for Laravel](/es/packages/laravel-voicevox/native-song.md)
