Gemini API, yang menggunakan Lyria RealTime, memberikan akses ke model pembuatan musik streaming tercanggih dan real-time. Hal ini memungkinkan developer mem-build aplikasi tempat pengguna dapat membuat, mengarahkan, dan memainkan musik instrumental secara interaktif.
Untuk merasakan apa yang dapat dibuat menggunakan Lyria RealTime, coba di AI Studio menggunakan aplikasi Prompt DJ atau MIDI DJ.
Cara kerja pembuatan musik
Pembuatan musik RealTime Lyria menggunakan koneksi streaming persisten, dua arah, dengan latensi rendah menggunakan WebSocket.
Membuat dan mengontrol musik
Lyria RealTime berfungsi sedikit seperti Live API dalam arti bahwa ia menggunakan websocket untuk mempertahankan komunikasi real-time dengan model. Hal ini masih belum sama karena Anda tidak dapat berbicara dengan model dan harus menggunakan format tertentu untuk memintanya.
Kode berikut menunjukkan cara membuat musik:
Python
Contoh ini menginisialisasi sesi Lyria RealTime menggunakan
client.aio.live.music.connect()
, lalu mengirim
perintah awal dengan session.set_weighted_prompts()
beserta konfigurasi
awal menggunakan session.set_music_generation_config
, memulai pembuatan
musik menggunakan session.play()
, dan menyiapkan
receive_audio()
untuk memproses potongan audio yang diterimanya.
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
Contoh ini menginisialisasi sesi Lyria RealTime menggunakan
client.live.music.connect()
, lalu mengirim
perintah awal dengan session.setWeightedPrompts()
beserta konfigurasi
awal menggunakan session.setMusicGenerationConfig
, memulai pembuatan
musik menggunakan session.play()
, dan menyiapkan
callback onMessage
untuk memproses potongan audio yang diterimanya.
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();
Kemudian, Anda dapat menggunakan session.play()
, session.pause()
, session.stop()
, dan session.reset_context()
untuk memulai, menjeda, menghentikan, atau mereset sesi.
Mengarahkan musik secara real time
Perintah Lyria RealTime
Saat streaming aktif, Anda dapat mengirim pesan WeightedPrompt
baru kapan saja untuk mengubah musik yang dihasilkan. Model akan bertransisi dengan lancar berdasarkan
input baru.
Perintah harus mengikuti format yang tepat dengan text
(perintah
yang sebenarnya), dan weight
. weight
dapat menggunakan nilai apa pun kecuali 0
. 1.0
biasanya adalah titik awal yang baik.
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 }
],
});
Perhatikan bahwa transisi model dapat sedikit tiba-tiba saat mengubah perintah secara drastis sehingga sebaiknya terapkan semacam cross-fading dengan mengirim nilai bobot perantara ke model.
Mengupdate konfigurasi
Anda juga dapat memperbarui parameter pembuatan musik secara real time. Anda tidak dapat sekadar memperbarui parameter, Anda harus menetapkan seluruh konfigurasi. Jika tidak, kolom lainnya akan direset kembali ke nilai defaultnya.
Karena memperbarui bpm atau skala adalah perubahan drastis untuk model, Anda juga harus memberi tahu model untuk mereset konteksnya menggunakan reset_context()
untuk mempertimbangkan konfigurasi baru. Tindakan ini tidak akan menghentikan streaming, tetapi akan menjadi transisi
yang sulit. Anda tidak perlu melakukannya untuk parameter lainnya.
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();
Panduan perintah untuk Lyria RealTime
Berikut adalah daftar perintah tidak lengkap yang dapat Anda gunakan untuk meminta Lyria RealTime:
- Instrumen:
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, ...
- Genre Musik:
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, ...
- Suasana Hati/Deskripsi:
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, ...
Ini hanyalah beberapa contoh, Lyria RealTime dapat melakukan lebih banyak hal. Bereksperimenlah dengan perintah Anda sendiri.
Praktik terbaik
- Aplikasi klien harus menerapkan buffering audio yang andal untuk memastikan pemutaran yang lancar. Hal ini membantu memperhitungkan jitter jaringan dan sedikit variasi dalam latensi pembuatan.
- Perintah yang efektif:
- Berikan gambaran yang jelas. Gunakan kata sifat yang menjelaskan suasana hati, genre, dan instrumentasi.
- Lakukan iterasi dan arahkan secara bertahap. Daripada mengubah perintah sepenuhnya, coba tambahkan atau ubah elemen untuk mengubah musik dengan lebih lancar.
- Lakukan eksperimen dengan bobot pada
WeightedPrompt
untuk memengaruhi seberapa kuat perintah baru memengaruhi pembuatan yang sedang berlangsung.
Detail teknis
Bagian ini menjelaskan secara spesifik cara menggunakan pembuatan musik RealTime Lyria.
Spesifikasi
- Format output: Audio PCM 16-bit mentah
- Frekuensi sampel: 48 kHz
- Saluran: 2 (stereo)
Kontrol
Pembuatan musik dapat dipengaruhi secara real time dengan mengirimkan pesan yang berisi:
WeightedPrompt
: String teks yang menjelaskan ide musik, genre, instrumen, suasana hati, atau karakteristik. Beberapa perintah berpotensi dapat disediakan untuk menggabungkan pengaruh. Lihat di atas untuk mengetahui detail selengkapnya tentang cara terbaik untuk meminta Lyria RealTime.MusicGenerationConfig
: Konfigurasi untuk proses pembuatan musik, yang memengaruhi karakteristik audio output.). Parameter mencakup:guidance
: (float) Rentang:[0.0, 6.0]
. Default:4.0
. Mengontrol seberapa ketat model mengikuti perintah. Panduan yang lebih tinggi akan meningkatkan kepatuhan terhadap perintah, tetapi membuat transisi menjadi lebih mendadak.bpm
: (int) Rentang:[60, 200]
. Menetapkan Detak Per Menit yang Anda inginkan untuk musik yang dihasilkan. Anda perlu menghentikan/memutar atau mereset konteks untuk model yang memperhitungkan bpm baru.density
: (float) Rentang:[0.0, 1.0]
. Mengontrol kepadatan nada/suara musik. Nilai yang lebih rendah menghasilkan musik yang lebih jarang; nilai yang lebih tinggi menghasilkan musik yang "lebih ramai".brightness
: (float) Rentang:[0.0, 1.0]
. Menyesuaikan kualitas tonal. Nilai yang lebih tinggi menghasilkan audio yang terdengar "lebih cerah", umumnya menekankan frekuensi yang lebih tinggi.scale
: (Enum) Menetapkan skala musik (Kunci dan Mode) untuk pembuatan. Gunakan nilai enumScale
yang disediakan oleh SDK. Anda harus menghentikan/memutar atau mereset konteks untuk model yang memperhitungkan skala baru.mute_bass
: (bool) Default:False
. Mengontrol apakah model mengurangi bass output.mute_drums
: (bool) Default:False
. Mengontrol apakah output model mengurangi drum output.only_bass_and_drums
: (bool) Default:False
. Arahkan model untuk mencoba hanya menghasilkan bass dan drum.
PlaybackControl
: Perintah untuk mengontrol aspek pemutaran, seperti putar, jeda, berhenti, atau reset konteks.
Untuk bpm
, density
, brightness
, dan scale
, jika tidak ada nilai yang diberikan,
model akan menentukan nilai terbaik sesuai dengan perintah awal Anda.
Parameter klasik lainnya seperti temperature
(0,0 hingga 3,0, default 1,1), top_k
(1 hingga 1.000, default 40), dan seed
(0 hingga 2 147 483 647, dipilih secara acak secara
default) juga dapat disesuaikan di MusicGenerationConfig
.
Menskalakan Nilai Enum
Berikut adalah semua nilai skala yang dapat diterima model:
Nilai Enum | Skala / Kunci |
---|---|
C_MAJOR_A_MINOR |
C mayor / A minor |
D_FLAT_MAJOR_B_FLAT_MINOR |
D♭ mayor / B♭ minor |
D_MAJOR_B_MINOR |
D mayor / B minor |
E_FLAT_MAJOR_C_MINOR |
E♭ mayor / C minor |
E_MAJOR_D_FLAT_MINOR |
E mayor / C♯/D♭ minor |
F_MAJOR_D_MINOR |
F mayor / D minor |
G_FLAT_MAJOR_E_FLAT_MINOR |
G♭ mayor / E♭ minor |
G_MAJOR_E_MINOR |
G mayor / E minor |
A_FLAT_MAJOR_F_MINOR |
A♭ mayor / F minor |
A_MAJOR_G_FLAT_MINOR |
A mayor / F♯/G♭ minor |
B_FLAT_MAJOR_G_MINOR |
B♭ mayor / G minor |
B_MAJOR_A_FLAT_MINOR |
B mayor / G♯/A♭ minor |
SCALE_UNSPECIFIED |
Default / Model memutuskan |
Model ini dapat memandu nada yang dimainkan, tetapi tidak
membedakan antara kunci relatif. Dengan demikian, setiap enum sesuai dengan
versi utama dan minor relatif. Misalnya, C_MAJOR_A_MINOR
akan sesuai dengan semua
tombol putih piano, dan F_MAJOR_D_MINOR
akan menjadi semua tombol putih
kecuali B flat.
Batasan
- Hanya instrumental: Model hanya menghasilkan musik instrumental.
- Keamanan: Perintah diperiksa oleh filter keamanan. Perintah yang memicu filter
akan diabaikan, dan dalam hal ini penjelasan akan ditulis di kolom
filtered_prompt
output. - Pemberian watermark: Audio output selalu diberi watermark untuk identifikasi dengan mengikuti prinsip Responsible AI kami.
Langkah berikutnya
- Daripada musik, pelajari cara membuat percakapan multi-pembicara menggunakan model TTS,
- Temukan cara membuat gambar atau video,
- Daripada membuat musik atau audio, cari tahu cara Gemini dapat memahami file Audio,
- Mulai percakapan secara real-time dengan Gemini menggunakan Live API.
Jelajahi Cookbook untuk mengetahui contoh kode dan tutorial lainnya.