A API Gemini, que usa o Lyria RealTime, oferece acesso a um modelo de geração de música em streaming em tempo real de última geração. Ele permite que os desenvolvedores criem aplicativos em que os usuários possam criar, direcionar e tocar música instrumental interativamente.
Para conferir o que pode ser criado com o Lyria RealTime, teste no AI Studio usando os apps Prompt DJ ou MIDI DJ.
Como a geração de música funciona
A geração de música em tempo real do Lyria usa uma conexão de streaming persistente, bidirecional e de baixa latência usando o WebSocket.
Gerar e controlar músicas
O Lyria RealTime funciona um pouco como a API Live, no sentido de usar websockets para manter uma comunicação em tempo real com o modelo. Ainda não é exatamente igual, porque não é possível conversar com o modelo, e é necessário usar um formato específico para incentivá-lo.
O código abaixo demonstra como gerar músicas:
Python
Este exemplo inicializa a sessão do Lyria RealTime usando
client.aio.live.music.connect()
e, em seguida, envia um
prompt inicial com session.set_weighted_prompts()
junto com uma configuração
inicial usando session.set_music_generation_config
, inicia a geração
de música usando session.play()
e configura
receive_audio()
para processar os fragmentos de áudio recebidos.
import asyncio
from google import genai
from google.genai import types
client = genai.Client(api_key=API_KEY, http_options={'api_version': 'v1alpha'})
async def main():
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()
if __name__ == "__main__":
asyncio.run(main())
JavaScript
Este exemplo inicializa a sessão do Lyria RealTime usando
client.live.music.connect()
e, em seguida, envia um
prompt inicial com session.setWeightedPrompts()
junto com uma configuração
inicial usando session.setMusicGenerationConfig
, inicia a geração
de música usando session.play()
e configura um
callback onMessage
para processar os fragmentos de áudio recebidos.
import { GoogleGenAI } from '@google/genai';
const ai = new GoogleGenAI({
apiKey: API_KEY, // Do not store your API client-side!
apiVersion: 'v1alpha',
});
// Create session object to control music generation.
const session: MusicSession = client.live.music.connect({
model: 'models/lyria-realtime-exp',
callbacks: {
onMessage: (message) => {
// Application logic: buffer and play using Web Audio API etc.
},
onError: (error) => {
console.error('music session error:', error);
},
onClose: () => {
console.log('Lyria RealTime stream closed.');
}
}
});
// Send initial prompts and config
await session.setWeightedPrompts({
weightedPrompts: [{ text: 'minimal techno', weight: 1.0 }],
});
await session.setMusicGenerationConfig({
musicGenerationConfig: { bpm: 90, temperature: 1.0 },
});
// Start generation
await session.play();
Em seguida, use session.play()
, session.pause()
, session.stop()
e
session.reset_context()
para iniciar, pausar, parar ou redefinir a sessão.
Controlar a música em tempo real
Prompt Lyria RealTime
Enquanto a transmissão estiver ativa, você poderá enviar novas mensagens WeightedPrompt
a qualquer
momento para alterar a música gerada. O modelo vai fazer a transição de forma suave com base
na nova entrada.
As instruções precisam seguir o formato correto com um text
(a
instrução real) e um weight
. O weight
pode ter qualquer valor, exceto 0
. 1.0
geralmente é um bom ponto de partida.
Python
await session.set_weighted_prompts(
prompts=[
{"text": "Piano", "weight": 2.0},
types.WeightedPrompt(text="Meditation", weight=0.5),
types.WeightedPrompt(text="Live Performance", weight=1.0),
]
)
JavaScript
await session.setMusicGenerationConfig({
weightedPrompts: [
{ text: 'Harmonica', weight: 0.3 },
{ text: 'Afrobeat', weight: 0.7 }
],
});
As transições do modelo podem ser um pouco abruptas quando mudam drasticamente as instruções. Por isso, é recomendável implementar algum tipo de transição cruzada enviando valores de peso intermediários para o modelo.
Atualizar a configuração
Também é possível atualizar os parâmetros de geração de música em tempo real. Não é possível atualizar apenas um parâmetro. É necessário definir toda a configuração. Caso contrário, os outros campos serão redefinidos para os valores padrão.
Como a atualização do bpm ou da escala é uma mudança drástica para o modelo, você também
precisa dizer a ele para redefinir o contexto usando reset_context()
para considerar a
nova configuração. A transmissão não será interrompida, mas a transição será
difícil. Não é necessário fazer isso para os outros parâmetros.
Python
await session.set_music_generation_config(
config=types.LiveMusicGenerationConfig(
bpm=128,
scale=types.Scale.D_MAJOR_B_MINOR,
)
)
await session.reset_context();
JavaScript
await session.setMusicGenerationConfig({
musicGenerationConfig: { bpm: 120, density: 0.75 },
});
await session.reset_context();
Guia de comandos para o Lyria RealTime
Confira uma lista não exaustiva de comandos que podem ser usados para acionar o Lyria RealTime:
- Instrumentos:
303 Acid Bass, 808 Hip Hop Beat, Accordion, Alto Saxophone, Bagpipes, Balalaika Ensemble, Banjo, Bass Clarinet, Bongos, Boomy Bass, Bouzouki, Buchla Synths, Cello, Charango, Clavichord, Conga Drums, Didgeridoo, Dirty Synths, Djembe, Drumline, Dulcimer, Fiddle, Flamenco Guitar, Funk Drums, Glockenspiel, Guitar, Hang Drum, Harmonica, Harp, Harpsichord, Hurdy-gurdy, Kalimba, Koto, Lyre, Mandolin, Maracas, Marimba, Mbira, Mellotron, Metallic Twang, Moog Oscillations, Ocarina, Persian Tar, Pipa, Precision Bass, Ragtime Piano, Rhodes Piano, Shamisen, Shredding Guitar, Sitar, Slide Guitar, Smooth Pianos, Spacey Synths, Steel Drum, Synth Pads, Tabla, TR-909 Drum Machine, Trumpet, Tuba, Vibraphone, Viola Ensemble, Warm Acoustic Guitar, Woodwinds, ...
- Gênero musical:
Acid Jazz, Afrobeat, Alternative Country, Baroque, Bengal Baul, Bhangra, Bluegrass, Blues Rock, Bossa Nova, Breakbeat, Celtic Folk, Chillout, Chiptune, Classic Rock, Contemporary R&B, Cumbia, Deep House, Disco Funk, Drum & Bass, Dubstep, EDM, Electro Swing, Funk Metal, G-funk, Garage Rock, Glitch Hop, Grime, Hyperpop, Indian Classical, Indie Electronic, Indie Folk, Indie Pop, Irish Folk, Jam Band, Jamaican Dub, Jazz Fusion, Latin Jazz, Lo-Fi Hip Hop, Marching Band, Merengue, New Jack Swing, Minimal Techno, Moombahton, Neo-Soul, Orchestral Score, Piano Ballad, Polka, Post-Punk, 60s Psychedelic Rock, Psytrance, R&B, Reggae, Reggaeton, Renaissance Music, Salsa, Shoegaze, Ska, Surf Rock, Synthpop, Techno, Trance, Trap Beat, Trip Hop, Vaporwave, Witch house, ...
- Humor/descrição:
Acoustic Instruments, Ambient, Bright Tones, Chill, Crunchy Distortion, Danceable, Dreamy, Echo, Emotional, Ethereal Ambience, Experimental, Fat Beats, Funky, Glitchy Effects, Huge Drop, Live Performance, Lo-fi, Ominous Drone, Psychedelic, Rich Orchestration, Saturated Tones, Subdued Melody, Sustained Chords, Swirling Phasers, Tight Groove, Unsettling, Upbeat, Virtuoso, Weird Noises, ...
Esses são apenas alguns exemplos, o Lyria RealTime pode fazer muito mais. Teste seus próprios comandos.
Práticas recomendadas
- Os aplicativos clientes precisam implementar um buffer de áudio robusto para garantir uma reprodução tranquila. Isso ajuda a explicar o jitter de rede e pequenas variações na latência de geração.
- Comandos eficazes:
- Utilize descrições. Use adjetivos que descrevam o clima, o gênero e a instrumentação.
- Faça iterações e direcione gradualmente. Em vez de mudar completamente a instrução, tente adicionar ou modificar elementos para transformar a música de maneira mais suave.
- Experimente o peso em
WeightedPrompt
para influenciar a intensidade com que um novo comando afeta a geração em andamento.
Detalhes técnicos
Esta seção descreve as especificidades de como usar a geração de música do Lyria RealTime.
Especificações
- Formato de saída: áudio PCM bruto de 16 bits
- Taxa de amostragem: 48 kHz
- Canais: 2 (estéreo)
Controles
A geração de músicas pode ser influenciada em tempo real com o envio de mensagens contendo:
WeightedPrompt
: uma string de texto que descreve uma ideia, gênero, instrumento, clima ou característica musical. Vários comandos podem ser fornecidos para misturar influências. Consulte acima para mais detalhes sobre como solicitar melhor o Lyria RealTime.MusicGenerationConfig
: configuração para o processo de geração de música, influenciando as características do áudio de saída. Os parâmetros incluem:guidance
: (ponto flutuante) Intervalo:[0.0, 6.0]
. Padrão:4.0
. Controla o quanto o modelo segue as instruções. Uma orientação mais alta melhora a adesão ao comando, mas torna as transições mais abruptas.bpm
: (int) Intervalo:[60, 200]
. Define a quantidade de BPM que você quer para a música gerada. É necessário parar/reproduzir ou redefinir o contexto para que o modelo leve em consideração o novo bpm.density
: (ponto flutuante) Intervalo:[0.0, 1.0]
. Controla a densidade das notas/sons musicais. Valores mais baixos produzem músicas mais espaçadas, e valores mais altos produzem músicas mais "agitadas".brightness
: (ponto flutuante) Intervalo:[0.0, 1.0]
. Ajusta a qualidade tonal. Valores mais altos produzem áudio com som "mais brilhante", geralmente enfatizando frequências mais altas.scale
: (tipo enumerado) define a escala musical (chave e modo) para a geração. Use os valores de tipo enumeradoScale
fornecidos pelo SDK. É necessário parar/reproduzir ou redefinir o contexto do modelo para que ele leve em conta a nova escala.mute_bass
: (bool) Padrão:False
. Controla se o modelo reduz os graves das saídas.mute_drums
: (bool) Padrão:False
. Controla se as saídas do modelo reduzem os tambores das saídas.only_bass_and_drums
: (bool) Padrão:False
. Direcione o modelo para tentar gerar apenas baixo e bateria.
PlaybackControl
: comandos para controlar aspectos da reprodução, como tocar, pausar, parar ou redefinir o contexto.
Para bpm
, density
, brightness
e scale
, se nenhum valor for fornecido, o
modelo vai decidir o que é melhor de acordo com suas solicitações iniciais.
Parâmetros mais clássicos, como temperature
(0,0 a 3,0, padrão 1,1), top_k
(1 a 1.000, padrão 40) e seed
(0 a 2.147.483.647, selecionado aleatoriamente por
padrão) também podem ser personalizados no MusicGenerationConfig
.
Escalar valores de tipo enumerado
Confira todos os valores de escala que o modelo pode aceitar:
Valor de tipo enumerado | Escala / Chave |
---|---|
C_MAJOR_A_MINOR |
C maior / A menor |
D_FLAT_MAJOR_B_FLAT_MINOR |
D♭ maior / B♭ menor |
D_MAJOR_B_MINOR |
D maior / B menor |
E_FLAT_MAJOR_C_MINOR |
E♭ maior / C menor |
E_MAJOR_D_FLAT_MINOR |
E maior / C♯/D♭ menor |
F_MAJOR_D_MINOR |
F maior / D menor |
G_FLAT_MAJOR_E_FLAT_MINOR |
G♭ maior / E♭ menor |
G_MAJOR_E_MINOR |
G maior / E menor |
A_FLAT_MAJOR_F_MINOR |
A♭ maior / F menor |
A_MAJOR_G_FLAT_MINOR |
A maior / F♯/G♭ menor |
B_FLAT_MAJOR_G_MINOR |
B♭ maior / G menor |
B_MAJOR_A_FLAT_MINOR |
B maior / G♯/A♭ menor |
SCALE_UNSPECIFIED |
Padrão / O modelo decide |
O modelo é capaz de orientar as notas que são tocadas, mas não
distingue entre as teclas relativas. Assim, cada tipo enumerado corresponde ao
principal e secundário relativo. Por exemplo, C_MAJOR_A_MINOR
corresponde a todas
as teclas brancas de um piano, e F_MAJOR_D_MINOR
corresponde a todas as teclas brancas
menos si bemol.
Limitações
- Somente instrumental: o modelo gera apenas músicas instrumentais.
- Segurança: os comandos são verificados por filtros de segurança. As solicitações que acionarem os filtros
serão ignoradas. Nesse caso, uma explicação será gravada no campo
filtered_prompt
da saída. - Marca d'água: o áudio de saída sempre tem uma marca d'água para identificação, seguindo os princípios da IA responsável.
A seguir
- Em vez de música, aprenda a gerar conversas com vários alto-falantes usando os modelos TTS.
- Descubra como gerar imagens ou vídeos.
- Em vez de gerar música ou áudio, descubra como o Gemini pode entender arquivos de áudio.
- Tenha uma conversa em tempo real com o Gemini usando a API Live.
Consulte o livro de receitas para mais exemplos de código e tutoriais.