Lyria RealTime을 사용하는 Gemini API는 최신 실시간 스트리밍 음악 생성 모델에 액세스할 수 있도록 지원합니다. 이를 통해 개발자는 사용자가 대화형으로 악기 음악을 만들고, 지속적으로 조종하고, 연주할 수 있는 애플리케이션을 빌드할 수 있습니다.
Lyria RealTime을 사용하여 빌드할 수 있는 기능을 경험하려면 AI 스튜디오에서 프롬프트 DJ 또는 MIDI DJ 앱을 사용해 보세요.
음악 생성의 작동 방식
Lyria 실시간 음악 생성은 WebSocket을 사용하여 영구적인 양방향 저지연 스트리밍 연결을 사용합니다.
음악 생성 및 제어
Lyria RealTime은 웹소켓을 사용하여 모델과 실시간으로 통신한다는 점에서 Live API와 약간 유사합니다. 하지만 모델과 대화할 수 없고 특정 형식을 사용하여 프롬프트를 제공해야 하므로 여전히 정확히 동일하지는 않습니다.
다음 코드는 음악을 생성하는 방법을 보여줍니다.
Python
이 예에서는 client.aio.live.music.connect()
를 사용하여 Lyria RealTime 세션을 초기화한 다음 session.set_music_generation_config
를 사용하여 초기 구성과 함께 session.set_weighted_prompts()
로 초기 프롬프트를 전송하고 session.play()
를 사용하여 음악 생성을 시작하며 수신하는 오디오 청크를 처리하도록 receive_audio()
를 설정합니다.
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())
자바스크립트
이 예에서는 client.live.music.connect()
를 사용하여 Lyria RealTime 세션을 초기화한 다음 session.setMusicGenerationConfig
를 사용하여 초기 구성과 함께 session.setWeightedPrompts()
로 초기 프롬프트를 전송하고 session.play()
를 사용하여 음악 생성을 시작하며 수신하는 오디오 청크를 처리할 onMessage
콜백을 설정합니다.
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();
그런 다음 session.play()
, session.pause()
, session.stop()
, session.reset_context()
를 사용하여 세션을 시작, 일시중지, 중지 또는 재설정할 수 있습니다.
실시간으로 음악 제어
Lyria RealTime 프롬프트
스트림이 활성 상태인 동안 언제든지 새 WeightedPrompt
메시지를 전송하여 생성된 음악을 변경할 수 있습니다. 모델은 새 입력에 따라 원활하게 전환됩니다.
프롬프트는 text
(실제 프롬프트) 및 weight
를 사용하여 올바른 형식을 따라야 합니다. weight
는 0
을 제외한 모든 값을 사용할 수 있습니다. 일반적으로 1.0
이 좋은 시작점입니다.
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),
]
)
자바스크립트
await session.setMusicGenerationConfig({
weightedPrompts: [
{ text: 'Harmonica', weight: 0.3 },
{ text: 'Afrobeat', weight: 0.7 }
],
});
프롬프트를 크게 변경하면 모델 전환이 다소 갑작스러울 수 있으므로 중간 가중치 값을 모델에 전송하여 일종의 크로스페이딩을 구현하는 것이 좋습니다.
구성 업데이트
음악 생성 매개변수를 실시간으로 업데이트할 수도 있습니다. 매개변수만 업데이트할 수는 없으며 전체 구성을 설정해야 합니다. 그러지 않으면 다른 필드가 기본값으로 재설정됩니다.
bpm 또는 스케일을 업데이트하면 모델이 급격하게 변경되므로 reset_context()
를 사용하여 컨텍스트를 재설정하여 새 구성을 고려하도록 지시해야 합니다. 스트림이 중지되지는 않지만 전환이 원활하지는 않습니다. 다른 매개변수의 경우 이 작업을 수행하지 않아도 됩니다.
Python
await session.set_music_generation_config(
config=types.LiveMusicGenerationConfig(
bpm=128,
scale=types.Scale.D_MAJOR_B_MINOR,
)
)
await session.reset_context();
자바스크립트
await session.setMusicGenerationConfig({
musicGenerationConfig: { bpm: 120, density: 0.75 },
});
await session.reset_context();
Lyria RealTime 프롬프트 가이드
다음은 Lyria RealTime 프롬프트에 사용할 수 있는 프롬프트의 일부 목록입니다.
- 계기:
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, ...
- 음악 장르:
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, ...
- 분위기/설명:
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, ...
이는 몇 가지 예에 불과하며 Lyria RealTime은 훨씬 더 많은 작업을 할 수 있습니다. 직접 프롬프트를 실험해 보세요.
권장사항
- 클라이언트 애플리케이션은 원활한 재생을 위해 강력한 오디오 버퍼링을 구현해야 합니다. 이렇게 하면 네트워크 지터와 생성 지연 시간의 약간의 변동을 고려할 수 있습니다.
- 효과적인 프롬프트:
- 자세히 설명하세요. 분위기, 장르, 악기 구성을 설명하는 형용사를 사용하세요.
- 반복하고 점진적으로 조정하세요. 프롬프트를 완전히 변경하는 대신 요소를 추가하거나 수정하여 음악을 더 원활하게 변형해 보세요.
WeightedPrompt
의 가중치를 실험하여 새 프롬프트가 진행 중인 생성에 미치는 영향을 조정합니다.
기술 세부정보
이 섹션에서는 Lyria 실시간 음악 생성을 사용하는 방법을 구체적으로 설명합니다.
사양
- 출력 형식: 원시 16비트 PCM 오디오
- 샘플링 레이트: 48kHz
- 채널: 2개 (스테레오)
컨트롤
다음과 같은 메시지를 전송하여 음악 생성에 실시간으로 영향을 줄 수 있습니다.
WeightedPrompt
: 음악적 아이디어, 장르, 악기, 분위기 또는 특성을 설명하는 텍스트 문자열입니다. 여러 프롬프트를 제공하여 영향을 혼합할 수 있습니다. Lyria RealTime을 가장 효과적으로 프롬프트하는 방법에 관한 자세한 내용은 위를 참고하세요.MusicGenerationConfig
: 음악 생성 프로세스의 구성으로, 출력 오디오의 특성에 영향을 미칩니다. 매개변수에는 다음이 포함됩니다.guidance
: (부동 소수점 수) 범위:[0.0, 6.0]
. 기본값:4.0
모델이 프롬프트를 얼마나 엄격하게 따르는지 제어합니다. 안내 수준을 높일수록 프롬프트 준수가 개선되지만 전환이 더 급격해집니다.bpm
: (int) 범위:[60, 200]
. 생성된 음악에 사용할 분당 박수를 설정합니다. 새 bpm을 고려하도록 모델의 컨텍스트를 중지/재생하거나 재설정해야 합니다.density
: (부동 소수점 수) 범위:[0.0, 1.0]
. 음표/소리의 밀도를 제어합니다. 값이 낮을수록 음악이 더 희박해지고 값이 높을수록 '더 분주한' 음악이 만들어집니다.brightness
: (부동 소수점 수) 범위:[0.0, 1.0]
. 색조 품질을 조정합니다. 값이 높을수록 '더 밝은' 사운드의 오디오가 생성되며 일반적으로 더 높은 주파수를 강조합니다.scale
: (Enum) 생성의 음악 스케일 (키 및 모드)을 설정합니다. SDK에서 제공하는Scale
enum 값을 사용합니다. 새 크기를 고려하도록 모델의 컨텍스트를 중지/재생하거나 재설정해야 합니다.mute_bass
: (불리언) 기본값:False
. 모델이 출력의 베이스를 줄일지 여부를 제어합니다.mute_drums
: (불리언) 기본값:False
. 모델 출력이 출력의 드럼을 줄이는지 여부를 제어합니다.only_bass_and_drums
: (불리언) 기본값:False
. 베이스와 드럼만 출력하도록 모델을 조정합니다.
PlaybackControl
: 재생, 일시중지, 중지, 컨텍스트 재설정과 같은 재생 측면을 제어하는 명령어입니다.
bpm
, density
, brightness
, scale
의 경우 값이 제공되지 않으면 모델이 초기 프롬프트에 따라 가장 적합한 값을 결정합니다.
temperature
(0.0~3.0, 기본값 1.1), top_k
(1~1,000, 기본값 40), seed
(0~2,147,483,647, 기본적으로 무작위로 선택됨)과 같은 더 기존의 매개변수도 MusicGenerationConfig
에서 맞춤설정할 수 있습니다.
enum 값 확장
다음은 모델이 허용할 수 있는 모든 크기 값입니다.
enum 값 | 스케일 / 키 |
---|---|
C_MAJOR_A_MINOR |
C 장조 / A 단조 |
D_FLAT_MAJOR_B_FLAT_MINOR |
D♭ 장조 / B♭ 단조 |
D_MAJOR_B_MINOR |
D 장조 / B 단조 |
E_FLAT_MAJOR_C_MINOR |
E♭ 장조 / C 단조 |
E_MAJOR_D_FLAT_MINOR |
E 장조 / C♯/D♭ 단조 |
F_MAJOR_D_MINOR |
F 장조 / D 단조 |
G_FLAT_MAJOR_E_FLAT_MINOR |
G♭ 장조 / E♭ 단조 |
G_MAJOR_E_MINOR |
G 장조 / E 단조 |
A_FLAT_MAJOR_F_MINOR |
A♭ 장조 / F 단조 |
A_MAJOR_G_FLAT_MINOR |
A 장조 / F♯/G♭ 단조 |
B_FLAT_MAJOR_G_MINOR |
B♭ 장조 / G 단조 |
B_MAJOR_A_FLAT_MINOR |
B 장조 / G♯/A♭ 단조 |
SCALE_UNSPECIFIED |
기본값 / 모델 결정 |
이 모델은 재생되는 음표를 안내할 수 있지만 상대 키를 ����하지는 않습니다. 따라서 각 enum은 상대 메이저 및 마이너에 모두 해당합니다. 예를 들어 C_MAJOR_A_MINOR
는 피아노의 모든 흰색 건반에 해당하며 F_MAJOR_D_MINOR
는 B 플랫을 제외한 모든 흰색 건반입니다.
제한사항
- 악기 연주곡만: 모델이 악기 연주곡만 생성합니다.
- 안전: 프롬프트가 안전 필터에 의해 확인됩니다. 필터를 트리거하는 메시지는 무시되며, 이 경우 설명이 출력의
filtered_prompt
필드에 작성됩니다. - 워터마킹: 출력 오디오는 항상 Google의 책임감 있는 AI 원칙에 따라 식별을 위해 워터마크가 지정됩니다.
다음 단계
- 음악 대신 TTS 모델을 사용하여 여러 발화자의 대화를 생성하는 방법을 알아봅니다.
- 이미지 또는 동영상을 생성하는 방법을 알아보세요.
- 음악이나 오디오를 생성하는 대신 Gemini가 오디오 파일을 이해하는 방법을 알아보세요.
- Live API를 사용하여 Gemini와 실시간으로 대화합니다.
Cookbook에서 더 많은 코드 예시와 튜토리얼을 살펴보세요.