Lyria RealTime'ı kullanan Gemini API, en son teknolojiye sahip, gerçek zamanlı, akışlı müzik oluşturma modeline erişim sağlar. Geliştiricilerin, kullanıcıların enstrümantal müzik parçalarını etkileşimli olarak oluşturabileceği, sürekli olarak yönlendirebileceği ve çalabileceği uygulamalar oluşturmasına olanak tanır.
Lyria RealTime ile neler geliştirilebileceğini deneyimlemek için AI Studio'da Prompt DJ veya MIDI DJ uygulamalarını deneyin.
Müzik oluşturma özelliğinin işleyiş şekli
Lyria RealTime müzik oluşturma, WebSocket'i kullanarak kalıcı, iki yönlü, düşük gecikmeli bir akış bağlantısı kullanır.
Müzik oluşturma ve kontrol etme
Lyria RealTime, modelle gerçek zamanlı iletişim sağlamak için web soketlerini kullandığından Live API'ye biraz benzer şekilde çalışır. Ancak modelle konuşamadığınız ve onu istemek için belirli bir biçim kullanmanız gerektiği için bu durum tam olarak aynı değildir.
Aşağıdaki kodda müziğin nasıl oluşturulacağı gösterilmektedir:
Python
Bu örnekte, client.aio.live.music.connect()
kullanılarak Lyria RealTime oturumu başlatılır, ardından session.set_weighted_prompts()
ile ilk istem ve session.set_music_generation_config
ile ilk yapılandırma gönderilir, session.play()
kullanılarak müzik oluşturma işlemi başlatılır ve receive_audio()
, aldığı ses parçalarını işlemek üzere ayarlanır.
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
Bu örnekte, client.live.music.connect()
kullanılarak Lyria RealTime oturumu başlatılır, ardından session.setWeightedPrompts()
ile ilk istem ve session.setMusicGenerationConfig
ile ilk yapılandırma gönderilir, session.play()
kullanılarak müzik oluşturma işlemi başlatılır ve alınan ses parçalarını işlemek için bir onMessage
geri çağırma işlevi ayarlanır.
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();
Ardından oturumu başlatmak, duraklatmak, durdurmak veya sıfırlamak için session.play()
, session.pause()
, session.stop()
ve session.reset_context()
düğmelerini kullanabilirsiniz.
Müzikleri anında yönlendirme
Prompt Lyria RealTime
Akış etkinken, oluşturulan müziği değiştirmek için dilediğiniz zaman yeni WeightedPrompt
mesajları gönderebilirsiniz. Model, yeni girişe göre sorunsuz bir şekilde geçiş yapar.
İstemlerin, text
(gerçek istem) ve weight
ile doğru biçime uyması gerekir. weight
, 0
hariç herhangi bir değer alabilir. 1.0
genellikle iyi bir başlangıç noktasıdır.
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 }
],
});
İstemler önemli ölçüde değiştiğinde model geçişlerinin biraz ani olabileceğini unutmayın. Bu nedenle, modele ara ağırlık değerleri göndererek bir tür geçiş efekti uygulamanız önerilir.
Yapılandırmayı güncelleme
Müzik oluşturma parametrelerini gerçek zamanlı olarak da güncelleyebilirsiniz. Yalnızca bir parametreyi güncelleyemezsiniz. Yapılandırmanın tamamını ayarlamanız gerekir. Aksi takdirde diğer alanlar varsayılan değerlerine sıfırlanır.
BMP veya ölçeğin güncellenmesi model için önemli bir değişiklik olduğundan, yeni yapılandırmayı hesaba katması için reset_context()
kullanarak bağlamını sıfırlamasını da söylemeniz gerekir. Bu işlem, yayını durdurmaz ancak geçiş zor olur. Diğer parametreler için bunu yapmanız gerekmez.
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();
Lyria RealTime için istem kılavuzu
Lyria RealTime'ı istemek için kullanabileceğiniz istemlerin kapsamlı olmayan bir listesini aşağıda bulabilirsiniz:
- Araçlar:
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, ...
- Müzik Türü:
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, ...
- Ruh hali/Açıklama:
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, ...
Bunlar yalnızca birkaç örnektir. Lyria RealTime çok daha fazlasını yapabilir. Kendi istemlerinizi deneyebilirsiniz.
En iyi uygulamalar
- İstemci uygulamaları, sorunsuz oynatma sağlamak için güçlü bir ses arabelleğe alma özelliği uygulamalıdır. Bu, ağdaki titreşimi ve oluşturma gecikmesindeki küçük farklılıkları hesaba katmaya yardımcı olur.
- Etkili istemler:
- Açıklayıcı olun. Ruh halini, türü ve enstrümantasyonu açıklayan sıfatlar kullanın.
- İterasyon yapın ve yavaş yavaş yönlendirin. İsteminizi tamamen değiştirmek yerine, müziğin daha yumuşak bir şekilde değişmesini sağlamak için öğe eklemeyi veya mevcut öğeleri değiştirmeyi deneyin.
- Yeni bir istemin devam eden oluşturma işlemini ne kadar güçlü bir şekilde etkilediğini belirlemek için
WeightedPrompt
ağırlığını deneyebilirsiniz.
Teknik ayrıntılar
Bu bölümde, Lyria RealTime müzik oluşturma özelliğinin nasıl kullanılacağıyla ilgili ayrıntılar açıklanmaktadır.
Özellikler
- Çıkış biçimi: Ham 16 bit PCM ses
- Örnek hızı: 48 kHz
- Kanal sayısı: 2 (stereo)
Denetimler
Müzik oluşturma işlemi, aşağıdakileri içeren mesajlar gönderilerek anlık olarak etkilenebilir:
WeightedPrompt
: Müzikal bir fikri, türü, enstrümanı, modu veya özelliği tanımlayan bir metin dizesi. Etkileri birleştirmek için birden fazla istem sağlanabilir. Lyra RealTime'ı en iyi şekilde isteme hakkında daha fazla bilgi için yukarıya bakın.MusicGenerationConfig
: Müzik oluşturma işleminin yapılandırması. Çıkış sesinin özelliklerini etkiler. Parametreler şunlardır:guidance
: (kayan nokta) Aralık:[0.0, 6.0]
. Varsayılan:4.0
. Modelin istemlere ne kadar sıkı bir şekilde uyacağını kontrol eder. Daha fazla rehberlik, istemlere uymayı iyileştirir ancak geçişleri daha ani hale getirir.bpm
: (int) Aralık:[60, 200]
. Oluşturulan müzik için istediğiniz BPM'yi ayarlar. Yeni bpm'yi hesaba katması için modelin bağlamını durdurmanız/oynatmanız veya sıfırlamanız gerekir.density
: (kayan nokta) Aralık:[0.0, 1.0]
. Nota/ses yoğunluğunun kontrolünü sağlar. Düşük değerler daha seyrek müzik, yüksek değerler ise daha "yoğun" müzik oluşturur.brightness
: (kayan nokta) Aralık:[0.0, 1.0]
. Ton kalitesini ayarlar. Daha yüksek değerler, genellikle daha yüksek frekansları vurgulayarak "daha parlak" sesler oluşturur.scale
: (Enum) Oluşturma için müzik skalasını (Anahtar ve Mod) ayarlar. SDK tarafından sağlananScale
enum değerlerini kullanın. Yeni ölçeği dikkate alması için modelin bağlamını durdurmanız/oynatmanız veya sıfırlamanız gerekir.mute_bass
: (bool) Varsayılan:False
. Modelin çıkışların bas seviyesini azaltıp azaltmayacağını kontrol eder.mute_drums
: (bool) Varsayılan:False
. Model çıktılarının çıkışların tamburlarını azaltıp azaltmayacağını kontrol eder.only_bass_and_drums
: (bool) Varsayılan:False
. Modeli yalnızca bas ve davul sesi çıkaracak şekilde yönlendirin.
PlaybackControl
: Oynat, duraklat, durdur veya bağlamı sıfırla gibi oynatma özelliklerini kontrol etmek için kullanılan komutlar.
bpm
, density
, brightness
ve scale
için herhangi bir değer sağlanmazsa model, ilk istemlerinize göre en iyi seçeneğe karar verir.
temperature
(0,0 ile 3,0 arasında, varsayılan 1,1), top_k
(1 ile 1.000 arasında, varsayılan 40) ve seed
(0 ile 2.147.483.647 arasında, varsayılan olarak rastgele seçilir) gibi daha klasik parametreler de MusicGenerationConfig
'da özelleştirilebilir.
Ölçeklendirme enum değerleri
Modelin kabul edebileceği tüm ölçek değerleri aşağıda verilmiştir:
Enum Değeri | Ölçek / Anahtar |
---|---|
C_MAJOR_A_MINOR |
Do majör / La minör |
D_FLAT_MAJOR_B_FLAT_MINOR |
Re bemol majör / Si bemol minör |
D_MAJOR_B_MINOR |
D majör / B minör |
E_FLAT_MAJOR_C_MINOR |
Mi bemol majör / Do minör |
E_MAJOR_D_FLAT_MINOR |
E majör / C♯/D♭ minör |
F_MAJOR_D_MINOR |
F majör / D minör |
G_FLAT_MAJOR_E_FLAT_MINOR |
G♭ majör / E♭ minör |
G_MAJOR_E_MINOR |
G majör / E minör |
A_FLAT_MAJOR_F_MINOR |
A♭ majör / F minör |
A_MAJOR_G_FLAT_MINOR |
A majör / F♯/G♭ minör |
B_FLAT_MAJOR_G_MINOR |
Si bemol majör / Sol minör |
B_MAJOR_A_FLAT_MINOR |
B majör / G♯/A♭ minör |
SCALE_UNSPECIFIED |
Varsayılan / Model karar verir |
Model, çalınan notlara rehberlik edebilir ancak göreli anahtarları ayırt edemez. Bu nedenle her enum hem göreli ana hem de alt sürüme karşılık gelir. Örneğin, C_MAJOR_A_MINOR
bir piyanonun tüm beyaz tuşlarına, F_MAJOR_D_MINOR
ise B bemol dışındaki tüm beyaz tuşlara karşılık gelir.
Sınırlamalar
- Yalnızca enstrümantal: Model yalnızca enstrümantal müzik oluşturur.
- Güvenlik: İstemler güvenlik filtreleri tarafından kontrol edilir. Filtreleri tetikleyen istemler yoksayılır. Bu durumda, çıkışın
filtered_prompt
alanına bir açıklama yazılır. - Filigran: Çıkıştaki ses, Sorumlu Yapay Zeka ilkelerimize uygun olarak her zaman tanımlama amacıyla filigranlanır.
Sırada ne var?
- Müzik yerine TTS modellerini kullanarak birden fazla konuşmacının yer aldığı sohbetleri nasıl oluşturacağınızı öğrenin.
- Resim veya video oluşturmayı öğrenin.
- Müzik veya ses oluşturmak yerine Gemini'nin ses dosyalarını nasıl anlayabildiğini öğrenin.
- Live API'yi kullanarak Gemini ile anlık sohbet edin.
Daha fazla kod örneği ve eğitim için Çözüm Kitabı'nı inceleyin.