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

# Client-Modus: Song (Gesangs-Sprachsynthese) - VOICEVOX für Laravel

> Beschreibt, wie Sie im Client-Modus von VOICEVOX für Laravel aus Score und Note Gesangs-Sprachsynthese durchführen.

## Singen lassen im Client-Modus

Bei der Gesangs-Sprachsynthese im Client-Modus werden die APIs `sing_frame_audio_query` und `frame_synthesis` der offiziellen VOICEVOX-Engine verwendet.

Im Gegensatz zum Talk müssen Sie zuvor `Score` und `Note` zusammenbauen.

## Vorbereitung

```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
```

## `Score` und `Note` erstellen

```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),
]);
```

| Parameter | Typ         | Beschreibung                                            |
| --------- | ----------- | ------------------------------------------------------- |
| `length`  | `int`       | Frame-Länge                                             |
| `lyric`   | `string`    | Liedtext. Leerer String oder weggelassen bedeutet Pause |
| `key`     | `int\|null` | MIDI-Notennummer                                        |

<Tip>
  Mit `Note::len($ticks, $bpm)` können Sie aus MIDI-Ticks und BPM die Frame-Länge berechnen. Wenn Sie eine Viertelnote als 480 Ticks behandeln, ist es leichter verständlich.
</Tip>

## Grundlegende Verwendung

```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` und `id`

* `teacher`: Style-ID, die an `sing_frame_audio_query` übergeben wird. Derzeit existiert nur 6000, daher ist 6000 der Standardwert.
* `generate(id:)`: Style-ID, die an `frame_synthesis` übergeben wird.

Die Liste der verfügbaren Gesangs-Speaker können Sie mit `singers()` abrufen.

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

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

## F0 und Lautstärke mit `tap()` anpassen

Bei Song ist der Einsatzzweck von `tap()` besonders klar: Sie können das `SongAudioQuery` anpassen, bevor Sie es an `generate()` weitergeben.

```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);
```

Wenn Sie F0 und Lautstärke einzeln aktualisieren möchten, führen Sie es in der Reihenfolge **F0 → Lautstärke** aus.

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

`tap()` ist auch praktisch, wenn Sie den Score ändern und dann neu synchronisieren möchten.

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

<Info>
  Die Idee hinter `tap()` ist im Abschnitt [tap()-Helper und Tappable-Trait](/de/advanced/tap) zusammengefasst. VOICEVOX für Laravel ist ein typisches Beispiel für „Wir wollen den Rückgabewert nicht ändern, sondern nur das Zwischenobjekt anpassen".
</Info>

## Nächste Seiten

<Columns cols={3}>
  <Card title="Score- und Note-Details" href="/de/packages/laravel-voicevox/song-score-note" icon="list-music">
    Frame-Längen-Berechnung und JSON-Verwaltungsmuster.
  </Card>

  <Card title="Native Song" href="/de/packages/laravel-voicevox/native-song" icon="music">
    Verwenden Sie denselben `Score` im Native-Modus über FFI.
  </Card>

  <Card title="Verwendung von VOICEVOX Core für PHP" href="/de/packages/voicevox-core-php/usage" icon="library">
    Ablauf der Sprachsynthese mit der Core-Library allein.
  </Card>
</Columns>


## Related topics

- [Native-Modus: Song (Gesangs-Sprachsynthese) - VOICEVOX für Laravel](/de/packages/laravel-voicevox/native-song.md)
- [Engine-API-Modus: Song (Gesangs-Sprachsynthese) - VOICEVOX für Laravel](/de/packages/laravel-voicevox/engine-song.md)
- [Client-Modus: Talk (Text-Sprachsynthese) - VOICEVOX für Laravel](/de/packages/laravel-voicevox/client-talk.md)
- [Native-Modus: Talk (Text-Sprachsynthese) - VOICEVOX für Laravel](/de/packages/laravel-voicevox/native-talk.md)
- [Engine-API-Modus: Talk (Text-Sprachsynthese) - VOICEVOX für Laravel](/de/packages/laravel-voicevox/engine-talk.md)
