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

# Modalità client: Song (sintesi vocale cantata) - VOICEVOX for Laravel

> Come eseguire la sintesi vocale cantata da Score e Note in modalità client di VOICEVOX for Laravel.

## Far cantare in modalità client

Nella sintesi vocale cantata in modalità client vengono utilizzate le API `sing_frame_audio_query` e `frame_synthesis` del motore ufficiale VOICEVOX.

A differenza di Talk, è necessario costruire prima `Score` e `Note`.

## Prerequisiti

```shell theme={null}
docker pull voicevox/voicevox_engine:cpu-latest
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-latest
```

## Creazione di `Score` e `Note`

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

$score = Score::make([
    Note::make(length: 15),
    Note::make(length: Note::len(ticks: 480, bpm: 120), lyric: 'ド', key: 60),
    Note::make(length: Note::len(480, 120), lyric: 'レ', key: 62),
    Note::make(length: Note::len(960, 120), lyric: 'ミ', key: 64),
    Note::make(length: 2),
]);
```

| Parametro | Tipo        | Descrizione                                              |
| --------- | ----------- | -------------------------------------------------------- |
| `length`  | `int`       | Lunghezza in frame                                       |
| `lyric`   | `string`    | Testo. Se è una stringa vuota o omesso, indica una pausa |
| `key`     | `int\|null` | Numero di nota MIDI                                      |

<Tip>
  Con `Note::len($ticks, $bpm)` puoi calcolare la lunghezza in frame dai ticks MIDI e dal BPM. È più chiaro considerare una nota da un quarto pari a 480 ticks.
</Tip>

## Utilizzo di base

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

$score = Score::make([
    Note::make(length: 15),
    Note::make(length: Note::len(480, 120), lyric: 'ド', key: 60),
    Note::make(length: Note::len(480, 120), lyric: 'レ', key: 62),
    Note::make(length: Note::len(960, 120), lyric: 'ミ', key: 64),
    Note::make(length: 2),
]);

$response = Voicevox::song($score, teacher: 6000)
    ->generate(id: 3001);

$response->storeAs('client', 'song.wav');
```

### `teacher` e `id`

* `teacher`: Style ID passato a `sing_frame_audio_query`. Attualmente esiste solo il 6000, quindi il valore predefinito è 6000.
* `generate(id:)`: Style ID passato a `frame_synthesis`

Puoi ottenere l'elenco degli speaker per il canto con `singers()`.

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

$singers = Voicevox::singers();
```

## Regolazione di F0 e volume con `tap()`

In Song l'utilità di `tap()` è particolarmente evidente: puoi regolare la `SongAudioQuery` prima di passarla a `generate()`.

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

$response = Voicevox::song($score, teacher: 6000)
    ->tap(function (SongAudioQuery $song) {
        $song->sync();
    })
    ->generate(id: 3001);
```

Quando aggiorni F0 e volume separatamente, esegui l'ordine **F0 → volume**.

```php theme={null}
->tap(function (SongAudioQuery $song) {
    $song->updateF0();
    $song->updateVolume();
})
```

Anche quando vuoi risincronizzare dopo aver modificato lo Score, `tap()` è comodo.

```php theme={null}
->tap(function (SongAudioQuery $song) {
    $song->score->notes[2] = Note::make(length: Note::len(480, 120), lyric: 'ファ', key: 65);
    $song->sync();
})
```

<Info>
  L'idea alla base di `tap()` è riassunta in [helper tap() e trait Tappable](/it/advanced/tap). VOICEVOX for Laravel è un caso tipico di "voglio regolare solo l'oggetto intermedio senza cambiare il valore di ritorno".
</Info>

## Pagine successive

<Columns cols={3}>
  <Card title="Dettagli su Score e Note" href="/it/packages/laravel-voicevox/song-score-note" icon="list-music">
    Verifica il calcolo delle lunghezze in frame e i pattern di gestione JSON.
  </Card>

  <Card title="Song in modalità nativa" href="/it/packages/laravel-voicevox/native-song" icon="music">
    Usa lo stesso `Score` in modalità nativa tramite FFI.
  </Card>

  <Card title="Utilizzo di VOICEVOX Core for PHP" href="/it/packages/voicevox-core-php/usage" icon="library">
    Verifica il flusso di sintesi vocale con la sola libreria core.
  </Card>
</Columns>


## Related topics

- [Modalità Engine API: Song (sintesi vocale cantata) - VOICEVOX for Laravel](/it/packages/laravel-voicevox/engine-song.md)
- [Modalità nativa: Song (sintesi vocale canora) - VOICEVOX for Laravel](/it/packages/laravel-voicevox/native-song.md)
- [Modalità client: Talk (sintesi vocale da testo) - VOICEVOX for Laravel](/it/packages/laravel-voicevox/client-talk.md)
- [Modalità nativa: Talk (sintesi vocale da testo) - VOICEVOX for Laravel](/it/packages/laravel-voicevox/native-talk.md)
- [Modalità API Engine: Talk (sintesi vocale da testo) - VOICEVOX for Laravel](/it/packages/laravel-voicevox/engine-talk.md)
