A geração de música do Lyria RealTime usa uma conexão de streaming persistente, bidirecional e de baixa latência com WebSockets. Nesta seção, você vai encontrar mais detalhes sobre a API WebSockets.
Sessões
Uma conexão WebSocket estabelece uma sessão para manter uma comunicação em tempo real com o modelo. Depois que um cliente inicia uma nova conexão, a sessão pode trocar mensagens com o servidor para:
- Envie comandos e controles para direcionar a geração de música.
- Enviar controles de mídia.
- Receber blocos de áudio.
Conexão WebSocket
Para iniciar uma sessão, conecte-se a este endpoint do WebSocket:
wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateMusic
Configuração da sessão
A mensagem inicial após a conexão define o modelo a ser usado durante a sessão.
Confira o exemplo de configuração a seguir. As letras maiúsculas e minúsculas nos nomes dos SDKs podem variar. Confira as opções de configuração do SDK para Python aqui.
{
"model": string
}
Enviar mensagens
Para trocar mensagens pela conexão WebSocket, o cliente precisa enviar um objeto JSON por uma conexão WebSocket aberta. O objeto JSON precisa ter exatamente um dos campos do seguinte conjunto de objetos:
{
"setup": BidiGenerateMusicSetup,
"client_content": BidiGenerateMusicClientContent,
"music_generation_config": BidiGenerateMusicGenerationConfig,
"playback_control": BidiGenerateMusicPlaybackControl
}
Mensagens de cliente compatíveis
Confira as mensagens de cliente compatíveis na tabela a seguir:
| Mensagem | Descrição |
|---|---|
BidiGenerateMusicSetup
|
Configuração da sessão a ser enviada apenas na primeira mensagem |
BidiGenerateMusicClientContent |
Comandos ponderados como entrada do modelo |
BidiGenerateMusicGenerationConfig |
Configuração para geração de música |
BidiGenerateMusicPlaybackControl
|
Indicadores de controle de mídia para geração de modelos |
Receber mensagens
Para receber mensagens do servidor, detecte o evento "message" do WebSocket e analise o resultado de acordo com a definição das mensagens de servidor compatíveis.
Confira estes guias:
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()
As mensagens do servidor incluem exatamente um dos outros campos da mensagem BidiGenerateMusicServerMessage.
A união messageType não é expressa em JSON, então o campo vai aparecer no nível superior da mensagem.
Mensagens e eventos
AudioChunk
Representação de um trecho de áudio.
| Campos | |
|---|---|
Campo de união
|
|
data |
Bytes brutos do bloco de áudio. |
mimeType |
O tipo MIME do conteúdo do bloco de áudio, como "audio/wav". |
sourceMetadata |
Apenas saída. Comandos e configurações usados para gerar este trecho de áudio. |
SourceMetadata
Metadados sobre a fonte de entrada usada para gerar esse trecho de áudio.
| Campos | |
|---|---|
clientContent |
Comandos ponderados para gerar esse trecho de áudio. |
musicGenerationConfig |
Configuração de geração de música para criar este trecho de áudio. |
BidiGenerateMusicClientContent
Entrada do usuário para iniciar ou direcionar a música.
| Campos | |
|---|---|
weightedPrompts[] |
Obrigatório. Comandos ponderados como entrada do modelo. |
BidiGenerateMusicClientMessage
Mensagens enviadas pelo cliente na chamada BidiGenerateMusic.
| Campos | |
|---|---|
Campo de união
|
|
setup |
Opcional. Configuração da sessão enviada na primeira e única mensagem do cliente. |
clientContent |
Opcional. Comandos ponderados e configurações de geração de música como entrada para a geração de música. |
musicGenerationConfig |
Opcional. Configuração para geração de música. |
playbackControl |
Opcional. Sinal de controle de mídia para a geração de música. |
BidiGenerateMusicFilteredPrompt
Comando filtrado com motivo.
| Campos | |
|---|---|
filteredReason |
Apenas saída. O motivo pelo qual o comando foi filtrado. |
Campo de união prompt. O comando que foi filtrado. prompt pode ser apenas de um dos tipos a seguir: |
|
text |
Opcional. Comando de texto. |
BidiGenerateMusicGenerationConfig
Configuração para geração de música.
| Campos | |
|---|---|
temperature |
Opcional. Controla a variância na geração de áudio. Valores mais altos produzem uma variância maior. O intervalo é [0.0, 3.0]. O padrão é 1.1. |
topK |
Opcional. Controla como o modelo seleciona tokens para saída. Amostra os tokens topK com as maiores probabilidades. O intervalo é [1, 1000]. O padrão é 40. |
seed |
Opcional. Inicia a geração de áudio. Se não for definida, a solicitação vai usar uma semente gerada aleatoriamente. |
guidance |
Opcional. Controla o quanto o modelo segue os comandos. Um valor mais alto segue as instruções de forma mais precisa, mas torna as transições mais abruptas. O intervalo é [0.0, 6.0]. O padrão é 4.0. |
bpm |
Opcional. Batimentos por minuto. O intervalo é [60, 200]. |
density |
Opcional. Densidade de sons. O intervalo é [0.0, 1.0]. |
brightness |
Opcional. Um valor mais alto produz um áudio mais brilhante. O intervalo é [0.0, 1.0]. |
scale |
Opcional. Escala da música gerada. |
muteBass |
Opcional. A saída de áudio não deve conter graves. |
muteDrums |
Opcional. A saída de áudio não pode conter bateria. |
onlyBassAndDrums |
Opcional. A saída de áudio deve conter apenas baixo e bateria. |
musicGenerationMode |
Opcional. O modo de geração de música. O padrão é QUALITY. |
MusicGenerationMode
| Tipos enumerados | |
|---|---|
MUSIC_GENERATION_MODE_UNSPECIFIED |
Esse valor não é usado. |
QUALITY |
Esse modo direciona os comandos de texto para regiões de espaço latente com músicas de maior qualidade. |
DIVERSITY |
Esse modo direciona os comandos de texto para regiões de espaço latente com uma maior diversidade de músicas. |
VOCALIZATION |
Esse modo direciona os comandos de texto para regiões do espaço latente com maior probabilidade de gerar música vocal. |
Escala
Escala da música gerada.
| Tipos enumerados | |
|---|---|
SCALE_UNSPECIFIED |
Valor padrão. Esse valor não é usado. |
C_MAJOR_A_MINOR |
Dó maior ou Lá menor |
D_FLAT_MAJOR_B_FLAT_MINOR |
Ré bemol maior ou si bemol menor |
D_MAJOR_B_MINOR |
Ré maior ou Si menor |
E_FLAT_MAJOR_C_MINOR |
Mi bemol maior ou dó menor |
E_MAJOR_D_FLAT_MINOR |
Mi maior ou ré bemol menor |
F_MAJOR_D_MINOR |
Fá maior ou Ré menor |
G_FLAT_MAJOR_E_FLAT_MINOR |
Sol bemol maior ou mi bemol menor |
G_MAJOR_E_MINOR |
Sol maior ou Mi menor |
A_FLAT_MAJOR_F_MINOR |
Lá bemol maior ou fá menor |
A_MAJOR_G_FLAT_MINOR |
Lá maior ou sol bemol menor |
B_FLAT_MAJOR_G_MINOR |
Si bemol maior ou sol menor |
B_MAJOR_A_FLAT_MINOR |
Si maior ou Sol bemol menor |
BidiGenerateMusicPlaybackControl
Controle de mídia para a geração de música.
| Tipos enumerados | |
|---|---|
PLAYBACK_CONTROL_UNSPECIFIED |
Esse valor não é usado. |
PLAY |
Comece a gerar a música. |
PAUSE |
A geração de música está em pausa. Use PLAY para retomar da posição atual. |
STOP |
Interrompe a geração de música e redefine o contexto (os comandos são mantidos). Use PLAY para reiniciar a geração de música. |
RESET_CONTEXT |
Redefina o contexto (os comandos são mantidos) sem interromper a geração de música. |
BidiGenerateMusicServerContent
Atualização incremental do servidor gerada pelo modelo em resposta às mensagens do cliente.
O conteúdo é gerado o mais rápido possível, e não em tempo real. Os clientes podem optar por armazenar em buffer e reproduzir em tempo real.
| Campos | |
|---|---|
audioChunks[] |
Apenas saída. Partes de áudio que o modelo gerou. |
BidiGenerateMusicServerMessage
Mensagem de resposta para a chamada BidiGenerateMusic.
| Campos | |
|---|---|
Campo de união messageType. Tipo da mensagem. messageType pode ser apenas de um dos tipos a seguir: |
|
setupComplete |
Apenas saída. Enviada em resposta a uma mensagem |
serverContent |
Apenas saída. Conteúdo gerado pelo modelo em resposta às mensagens do cliente. |
filteredPrompt |
Apenas saída. Comando filtrado com motivo. |
warning |
Apenas saída. A mensagem de aviso do servidor. Os avisos não encerram o stream. |
BidiGenerateMusicSetup
Mensagem a ser enviada no primeiro (e apenas no primeiro) BidiGenerateMusicClientMessage.
Os clientes precisam esperar uma mensagem de BidiGenerateMusicSetupComplete antes de enviar outras.
| Campos | |
|---|---|
model |
Obrigatório. O nome do recurso do modelo. Isso serve como um ID para o modelo usar. Formato: |
BidiGenerateMusicSetupComplete
Esse tipo não tem campos.
Enviada em resposta a uma mensagem BidiGenerateMusicSetup do cliente.
WeightedPrompt
Comando ponderado como entrada do modelo.
| Campos | |
|---|---|
weight |
Obrigatório. Peso do comando. O peso é usado para controlar a importância relativa do comando. Pesos maiores são mais importantes do que pesos menores. Os pesos de todos os weighted_prompts neste BidiGenerateMusicClientContent não podem ser todos 0. Os pesos de todos os weighted_prompts nesta mensagem BidiGenerateMusicClientContent serão normalizados. |
Campo de união
|
|
text |
Comando de texto. |
Mais informações sobre tipos
Para mais informações sobre os tipos usados pela API, consulte o SDK para Python.