Gemini API, yang menggunakan Lyria RealTime, menyediakan akses ke model pembuatan musik streaming real-time yang canggih. Model ini memungkinkan developer membuat aplikasi tempat pengguna dapat membuat, mengarahkan, dan menampilkan musik instrumental secara interaktif dan berkelanjutan.
Pembuatan musik Lyria RealTime menggunakan koneksi streaming dua arah yang persisten, latensi rendah menggunakan WebSocket.
Untuk mengetahui apa yang dapat dibuat menggunakan Lyria RealTime, coba di AI Studio menggunakan aplikasi Prompt DJ atau MIDI DJ.
Membuat dan mengontrol musik
Lyria RealTime berfungsi mirip dengan Live API karena menggunakan Websocket untuk mempertahankan komunikasi real-time dengan model.
Kode berikut menunjukkan cara membuat musik:
Python
Contoh ini menginisialisasi sesi Lyria RealTime menggunakan client.aio.live.music.connect(), lalu mengirimkan perintah awal dengan session.set_weighted_prompts() bersama dengan konfigurasi awal menggunakan session.set_music_generation_config, memulai pembuatan musik menggunakan session.play(), dan menyiapkan receive_audio() untuk memproses bagian audio yang diterimanya.
import asyncio
from google import genai
from google.genai import types
client = genai.Client(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 mengirimkan perintah awal dengan session.setWeightedPrompts() bersama dengan konfigurasi awal menggunakan session.setMusicGenerationConfig, memulai pembuatan musik menggunakan session.play(), dan menyiapkan callback onMessage untuk memproses bagian audio yang diterimanya.
import { GoogleGenAI } from "@google/genai";
import Speaker from "speaker";
import { Buffer } from "buffer";
const client = new GoogleGenAI({
apiKey: GEMINI_API_KEY,
apiVersion: "v1alpha" ,
});
async function main() {
const speaker = new Speaker({
channels: 2, // stereo
bitDepth: 16, // 16-bit PCM
sampleRate: 44100, // 44.1 kHz
});
const session = await client.live.music.connect({
model: "models/lyria-realtime-exp",
callbacks: {
onmessage: (message) => {
if (message.serverContent?.audioChunks) {
for (const chunk of message.serverContent.audioChunks) {
const audioBuffer = Buffer.from(chunk.data, "base64");
speaker.write(audioBuffer);
}
}
},
onerror: (error) => console.error("music session error:", error),
onclose: () => console.log("Lyria RealTime stream closed."),
},
});
await session.setWeightedPrompts({
weightedPrompts: [
{ text: "Minimal techno with deep bass, sparse percussion, and atmospheric synths", weight: 1.0 },
],
});
await session.setMusicGenerationConfig({
musicGenerationConfig: {
bpm: 90,
temperature: 1.0,
audioFormat: "pcm16", // important so we know format
sampleRateHz: 44100,
},
});
await session.play();
}
main().catch(console.error);
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
Anda dapat mengarahkan pembuatan musik secara real-time dengan mengirimkan perintah dan memperbarui parameter pembuatan secara real-time.
Membuat perintah Lyria RealTime
Saat streaming aktif, Anda dapat mengirim pesan WeightedPrompt baru kapan saja untuk mengubah musik yang dibuat. Model akan bertransisi dengan lancar berdasarkan input baru.
Perintah harus mengikuti format yang tepat dengan text (perintah sebenarnya), dan weight. weight dapat mengambil nilai apa pun kecuali 0. 1.0
biasanya merupakan titik awal yang baik.
Python
from google.genai import types
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 mengirimkan nilai bobot perantara ke model.
Mengupdate konfigurasi
Anda dapat mengarahkan pembuatan musik dengan memperbarui parameter pembuatan musik secara real-time. Anda tidak dapat memperbarui parameter saja, Anda harus menetapkan seluruh konfigurasi. Jika tidak, kolom lainnya akan direset kembali ke nilai default-nya.
Karena memperbarui bpm atau skala adalah perubahan drastis untuk model, Anda juga perlu memberi tahu model untuk mereset konteksnya menggunakan reset_context() agar mempertimbangkan konfigurasi baru. Tindakan ini tidak akan menghentikan streaming, tetapi akan menjadi transisi yang sulit. Anda tidak perlu melakukannya untuk parameter lainnya.
Python
from google.genai import types
await session.set_music_generation_config(
config=types.LiveMusicGenerationConfig(
bpm=128,
scale=types.Scale.D_MAJOR_B_MINOR,
music_generation_mode=types.MusicGenerationMode.QUALITY
)
)
await session.reset_context();
JavaScript
await session.setMusicGenerationConfig({
musicGenerationConfig: {
bpm: 120,
density: 0.75,
musicGenerationMode: MusicGenerationMode.QUALITY
},
});
await session.reset_context();
Panduan perintah untuk Lyria RealTime
Berikut adalah daftar perintah yang tidak lengkap yang dapat Anda gunakan untuk membuat perintah Lyria RealTime:
- Instruments:
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, ... - Music Genre:
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, ... - Mood/Description:
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 kuat untuk memastikan pemutaran yang lancar. Hal ini membantu memperhitungkan jitter jaringan dan sedikit variasi dalam latensi pembuatan.
- Penulisan perintah yang efektif:
- Berikan gambaran yang jelas. Gunakan kata sifat yang menggambarkan suasana hati, genre, dan instrumentasi.
- Ulangi dan arahkan secara bertahap. Daripada mengubah perintah sepenuhnya, coba tambahkan atau ubah elemen untuk mengubah musik dengan lebih lancar.
- Bereksperimenlah dengan bobot pada
WeightedPromptuntuk memengaruhi seberapa kuat perintah baru memengaruhi pembuatan yang sedang berlangsung.
Detail teknis
Bagian ini menjelaskan spesifikasi cara menggunakan pembuatan musik Lyria RealTime.
Spesifikasi
- Format output: Audio PCM 16-bit Mentah
- Frekuensi sampel: 48 kHz
- Channel: 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 diberikan untuk memadukan pengaruh. Lihat di atas untuk mengetahui detail selengkapnya tentang cara terbaik untuk membuat perintah 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 meningkatkan kepatuhan terhadap perintah, tetapi membuat transisi lebih tiba-tiba.bpm: (int) Rentang:[60, 200]. Menetapkan Beats Per Minute yang Anda inginkan untuk musik yang dibuat. Anda harus menghentikan/memutar atau mereset konteks agar model mempertimbangkan bpm baru.density: (float) Rentang:[0.0, 1.0]. Mengontrol kepadatan not/suara musik. Nilai yang lebih rendah menghasilkan musik yang lebih jarang; nilai yang lebih tinggi menghasilkan musik yang "lebih sibuk".brightness: (float) Rentang:[0.0, 1.0]. Menyesuaikan kualitas nada. Nilai yang lebih tinggi menghasilkan audio yang terdengar "lebih cerah", yang umumnya menekankan frekuensi yang lebih tinggi.scale: (Enum) Menetapkan skala musik (Kunci dan Mode) untuk pembuatan. Gunakan nilai enumScaleyang disediakan oleh SDK. Anda harus menghentikan/memutar atau mereset konteks agar model mempertimbangkan skala baru.mute_bass: (bool) Default:False. Mengontrol apakah model mengurangi bass output.mute_drums: (bool) Default:False. Mengontrol apakah model output mengurangi drum output.only_bass_and_drums: (bool) Default:False. Mengarahkan model untuk mencoba hanya menghasilkan bass dan drum.music_generation_mode: (Enum) Menunjukkan kepada model apakah model harus berfokus padaQUALITY(nilai default) atauDIVERSITYmusik. Mode ini juga dapat ditetapkan keVOCALIZATIONagar model menghasilkan vokal sebagai instrumen lain (tambahkan sebagai perintah baru).
PlaybackControl: Perintah untuk mengontrol aspek pemutaran, seperti memutar, menjeda, menghentikan, atau mereset konteks.
Untuk bpm, density, brightness, dan scale, jika tidak ada nilai yang diberikan, model akan memutuskan apa yang terbaik menurut perintah awal Anda.
Parameter yang lebih klasik seperti temperature (0,0 hingga 3,0, default 1,1), top_k (1 hingga 1000, default 40), dan seed (0 hingga 2.147.483.647, dipilih secara acak secara default) juga dapat disesuaikan di MusicGenerationConfig.
Nilai Enum Skala
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 mampu memandu not yang dimainkan, tetapi tidak membedakan antara kunci relatif. Dengan demikian, setiap enum sesuai dengan mayor 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♭.
Batasan
- Hanya instrumental: Model hanya menghasilkan musik instrumental.
- Keamanan: Perintah diperiksa oleh filter keamanan. Perintah yang memicu filter akan diabaikan. Dalam hal ini, penjelasan akan ditulis di kolom
filtered_promptoutput. - Watermarking: Audio output selalu diberi watermark untuk identifikasi sesuai dengan prinsip AI Bertanggung Jawab kami.
Langkah berikutnya
- Membuat lagu lengkap dan trek vokal dengan Lyria 3,
- Daripada musik, pelajari cara membuat percakapan multi-penutur menggunakan model TTS,
- Temukan cara membuat gambar atau video,
- Daripada membuat musik atau audio, cari tahu cara Gemini dapat memahami file Audio,
- Melakukan percakapan real-time dengan Gemini menggunakan the Live API.
Jelajahi Cookbook untuk mengetahui contoh kode dan tutorial lainnya.