Generowanie muzyki za pomocą Lyria RealTime wykorzystuje trwałe, dwukierunkowe połączenie strumieniowe o niskim opóźnieniu, które korzysta z WebSockets. W tej sekcji znajdziesz dodatkowe informacje o interfejsie WebSockets API.
Sesje
Połączenie WebSocket ustanawia sesję, aby utrzymać komunikację z modelem w czasie rzeczywistym. Po zainicjowaniu nowego połączenia przez klienta sesja może wymieniać wiadomości z serwerem w celu:
- wysyłać prompty i sterować generowaniem muzyki;
- wysyłać elementy sterujące odtwarzaniem muzyki;
- Odbieranie fragmentów dźwięku.
Połączenie WebSocket
Aby rozpocząć sesję, połącz się z tym punktem końcowym WebSocket:
wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateMusic
Konfiguracja sesji
Pierwsza wiadomość po połączeniu ustawia model, który będzie używany podczas sesji.
Zobacz przykładową konfigurację poniżej. Pamiętaj, że wielkość liter w nazwach w pakietach SDK może się różnić. Opcje konfiguracji pakietu SDK Pythona znajdziesz tutaj.
{
"model": string
}
Wysyłanie wiadomości
Aby wymieniać wiadomości przez połączenie WebSocket, klient musi wysłać obiekt JSON przez otwarte połączenie WebSocket. Obiekt JSON musi zawierać dokładnie jedno z pól z tego zestawu obiektów:
{
"setup": BidiGenerateMusicSetup,
"client_content": BidiGenerateMusicClientContent,
"music_generation_config": BidiGenerateMusicGenerationConfig,
"playback_control": BidiGenerateMusicPlaybackControl
}
Obsługiwane wiadomości klienta
W tabeli poniżej znajdziesz obsługiwane komunikaty klienta:
| Wiadomość | Opis |
|---|---|
BidiGenerateMusicSetup
|
Konfiguracja sesji do wysłania tylko w pierwszej wiadomości |
BidiGenerateMusicClientContent |
Prompty z wagami jako dane wejściowe modelu |
BidiGenerateMusicGenerationConfig |
Konfiguracja generowania muzyki |
BidiGenerateMusicPlaybackControl
|
Sygnały sterujące odtwarzaniem na potrzeby generowania modelu |
Odbieranie wiadomości
Aby otrzymywać wiadomości z serwera, nasłuchuj zdarzenia „message” protokołu WebSocket, a następnie przeanalizuj wynik zgodnie z definicją obsługiwanych wiadomości serwera.
Zobacz:
async def receive_audio(session):
"""Example background task to process incoming audio."""
while True:
async for message in session.receive():
audio_data = message.server_content.audio_chunks[0].data
# Process audio...
await asyncio.sleep(10**-12)
async with (
client.aio.live.music.connect(model='models/lyria-realtime-exp') as session,
asyncio.TaskGroup() as tg,
):
# Set up task to receive server messages.
tg.create_task(receive_audio(session))
# Send initial prompts and config
await session.set_weighted_prompts(
prompts=[
types.WeightedPrompt(text='minimal techno', weight=1.0),
]
)
await session.set_music_generation_config(
config=types.LiveMusicGenerationConfig(bpm=90, temperature=1.0)
)
# Start streaming music
await session.play()
Wiadomości serwera zawierają dokładnie jedno z pozostałych pól z wiadomości BidiGenerateMusicServerMessage.
(Unia messageType nie jest wyrażona w formacie JSON, więc pole pojawi się na najwyższym poziomie wiadomości).
Wiadomości i zdarzenia
AudioChunk
Reprezentacja fragmentu audio.
| Pola | |
|---|---|
Pole zbiorcze Pole |
|
data |
Nieprzetworzone bajty fragmentu audio. |
mimeType |
Typ MIME treści fragmentu audio, np. „audio/wav”. |
sourceMetadata |
Tylko dane wyjściowe. Prompty i konfiguracja użyte do wygenerowania tego fragmentu audio. |
SourceMetadata
Metadane dotyczące źródła danych wejściowych użytego do wygenerowania tego fragmentu audio.
| Pola | |
|---|---|
clientContent |
Prompty z wagami do wygenerowania tego fragmentu audio. |
musicGenerationConfig |
Konfiguracja generowania muzyki na potrzeby wygenerowania tego fragmentu audio. |
BidiGenerateMusicClientContent
Dane wejściowe użytkownika, które pozwalają rozpocząć lub sterować muzyką.
| Pola | |
|---|---|
weightedPrompts[] |
Wymagane. Prompty z wagami jako dane wejściowe modelu. |
BidiGenerateMusicClientMessage
Wiadomości wysyłane przez klienta w wywołaniu BidiGenerateMusic.
| Pola | |
|---|---|
Pole zbiorcze Pole |
|
setup |
Opcjonalnie: Konfiguracja sesji wysłana w pierwszej i tylko pierwszej wiadomości klienta. |
clientContent |
Opcjonalnie: Prompty z wagami i konfiguracje generowania muzyki jako dane wejściowe do generowania muzyki. |
musicGenerationConfig |
Opcjonalnie: Konfiguracja generowania muzyki. |
playbackControl |
Opcjonalnie: Sygnał sterowania odtwarzaniem na potrzeby generowania muzyki. |
BidiGenerateMusicFilteredPrompt
Odfiltrowany prompt z powodem.
| Pola | |
|---|---|
filteredReason |
Tylko dane wyjściowe. Powód odfiltrowania prompta. |
Pole zbiorcze prompt. Prompt, który został odfiltrowany. prompt może mieć tylko jedną z tych wartości: |
|
text |
Opcjonalnie: Prompt tekstowy. |
BidiGenerateMusicGenerationConfig
Konfiguracja generowania muzyki.
| Pola | |
|---|---|
temperature |
Opcjonalnie: Kontroluje wariancję w generowaniu dźwięku. Wyższe wartości dają większą wariancję. Zakres to [0.0, 3.0]. Wartość domyślna to 1.1. |
topK |
Opcjonalnie: Określa, jak model wybiera tokeny w celu wygenerowania odpowiedzi. Próbkuje tokeny topK o najwyższym prawdopodobieństwie. Zakres to [1, 1000]. Wartość domyślna to 40. |
seed |
Opcjonalnie: Generowanie dźwięku na podstawie promptu. Jeśli nie zostanie ustawiony, żądanie użyje losowo wygenerowanego ziarna. |
guidance |
Opcjonalnie: Określa, jak dokładnie model ma postępować zgodnie z promptami. Bardziej szczegółowe wytyczne będą dokładniej przestrzegane, ale przejścia będą bardziej gwałtowne. Zakres: [0.0, 6.0]. Wartość domyślna to 4.0. |
bpm |
Opcjonalnie: Uderzenia na minutę. Zakres to [60, 200]. |
density |
Opcjonalnie: gęstość dźwięków, Zakres to [0,0; 1,0]. |
brightness |
Opcjonalnie: Wyższa wartość daje jaśniejszy dźwięk. Zakres to [0.0, 1.0]. |
scale |
Opcjonalnie: Skala wygenerowanej muzyki. |
muteBass |
Opcjonalnie: Dane wyjściowe audio nie powinny zawierać basów. |
muteDrums |
Opcjonalnie: Dane wyjściowe audio nie powinny zawierać bębnów. |
onlyBassAndDrums |
Opcjonalnie: Dane wyjściowe audio powinny zawierać tylko bas i perkusję. |
musicGenerationMode |
Opcjonalnie: Tryb generowania muzyki. Wartość domyślna to QUALITY. |
MusicGenerationMode
| Wartości w polu enum | |
|---|---|
MUSIC_GENERATION_MODE_UNSPECIFIED |
Ta wartość nie jest używana. |
QUALITY |
Ten tryb kieruje prompty tekstowe do regionów przestrzeni ukrytej z muzyką o wyższej jakości. |
DIVERSITY |
Ten tryb kieruje prompty tekstowe do regionów przestrzeni ukrytej z większą różnorodnością muzyki. |
VOCALIZATION |
Ten tryb kieruje prompty tekstowe do regionów przestrzeni ukrytej, które z większym prawdopodobieństwem wygenerują muzykę wokalną. |
Skaluj
Skala wygenerowanej muzyki.
| Wartości w polu enum | |
|---|---|
SCALE_UNSPECIFIED |
Wartość domyślna. Ta wartość nie jest używana. |
C_MAJOR_A_MINOR |
C-dur lub a-moll |
D_FLAT_MAJOR_B_FLAT_MINOR |
Des-dur lub b-moll |
D_MAJOR_B_MINOR |
D-dur lub h-moll |
E_FLAT_MAJOR_C_MINOR |
Es-dur lub c-moll |
E_MAJOR_D_FLAT_MINOR |
E-dur lub des-moll |
F_MAJOR_D_MINOR |
F-dur lub d-moll |
G_FLAT_MAJOR_E_FLAT_MINOR |
Ges-dur lub es-moll |
G_MAJOR_E_MINOR |
G-dur lub e-moll |
A_FLAT_MAJOR_F_MINOR |
As-dur lub f-moll |
A_MAJOR_G_FLAT_MINOR |
A-dur lub ges-moll |
B_FLAT_MAJOR_G_MINOR |
B-dur lub g-moll |
B_MAJOR_A_FLAT_MINOR |
H-dur lub as-moll |
BidiGenerateMusicPlaybackControl
Elementy sterujące odtwarzaniem generowania muzyki.
| Wartości w polu enum | |
|---|---|
PLAYBACK_CONTROL_UNSPECIFIED |
Ta wartość nie jest używana. |
PLAY |
Zacznij generować muzykę. |
PAUSE |
Wstrzymaj generowanie muzyki. Użyj przycisku ODTWÓRZ, aby wznowić od bieżącej pozycji. |
STOP |
Zatrzymaj generowanie muzyki i zresetuj kontekst (prompty zostaną zachowane). Aby ponownie rozpocząć generowanie muzyki, użyj przycisku ODTWÓRZ. |
RESET_CONTEXT |
Zresetuj kontekst (prompty zostaną zachowane) bez zatrzymywania generowania muzyki. |
BidiGenerateMusicServerContent
Przyrostowa aktualizacja serwera wygenerowana przez model w odpowiedzi na wiadomości klienta.
Treści są generowane jak najszybciej, ale nie w czasie rzeczywistym. Klienci mogą zdecydować się na buforowanie i odtwarzanie w czasie rzeczywistym.
| Pola | |
|---|---|
audioChunks[] |
Tylko dane wyjściowe. Fragmenty audio wygenerowane przez model. |
BidiGenerateMusicServerMessage
Komunikat odpowiedzi na wywołanie BidiGenerateMusic.
| Pola | |
|---|---|
Pole zbiorcze messageType. Typ wiadomości. messageType może mieć tylko jedną z tych wartości: |
|
setupComplete |
Tylko dane wyjściowe. Wysyłany w odpowiedzi na wiadomość |
serverContent |
Tylko dane wyjściowe. Treści generowane przez model w odpowiedzi na wiadomości klienta. |
filteredPrompt |
Tylko dane wyjściowe. Odfiltrowany prompt z powodem. |
warning |
Tylko dane wyjściowe. Ostrzeżenie z serwera. Ostrzeżenia nie spowodują zakończenia transmisji. |
BidiGenerateMusicSetup
Wiadomość, która zostanie wysłana w pierwszym (i tylko w pierwszym) BidiGenerateMusicClientMessage.
Klient powinien poczekać na wiadomość BidiGenerateMusicSetupComplete, zanim wyśle kolejne wiadomości.
| Pola | |
|---|---|
model |
Wymagane. Nazwa zasobu modelu. Służy on jako identyfikator modelu. Format: |
BidiGenerateMusicSetupComplete
Ten typ nie ma pól.
Wysyłane w odpowiedzi na wiadomość BidiGenerateMusicSetup od klienta.
WeightedPrompt
Prompt z wagą jako dane wejściowe modelu.
| Pola | |
|---|---|
weight |
Wymagane. Waga prompta. Waga służy do kontrolowania względnego znaczenia prompta. Większe wagi są ważniejsze niż mniejsze. Wagi wszystkich elementów weighted_prompts w tym BidiGenerateMusicClientContent nie mogą być równe 0. Wagi wszystkich elementów weighted_prompts w tej wiadomości BidiGenerateMusicClientContent zostaną znormalizowane. |
Pole zbiorcze Pole |
|
text |
Prompt tekstowy. |
Więcej informacji o typach
Więcej informacji o typach używanych przez interfejs API znajdziesz w pakiecie SDK dla Pythona.