Lyria RealTime kullanılarak müzik oluşturma

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ğlanan Scale 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?

Daha fazla kod örneği ve eğitim için Çözüm Kitabı'nı inceleyin.