Lyria RealTime ile anında müzik üretme

Lyria RealTime'ı kullanan Gemini API, son teknoloji ürünü, gerçek zamanlı ve akışlı bir müzik üretme modeline erişim sağlar. Bu API, geliştiricilerin kullanıcıların etkileşimli olarak oluşturabileceği, sürekli yönlendirebileceği ve enstrümantal müzik yapabileceği uygulamalar geliştirmesine olanak tanır.

Lyria RealTime müzik üretimi, WebSocket kullanılarak kalıcı, çift yönlü ve düşük gecikmeli bir akış bağlantısı kullanır.

Lyria RealTime ile neler oluşturulabileceğini deneyimlemek için AI Studio'da Prompt DJ veya MIDI DJ uygulamalarını kullanarak deneyin.

Müzik üretme ve müziği kontrol etme

Lyria RealTime, modelle anlık iletişimi sürdürmek için Websocket'leri kullanması açısından Live API'ye benzer şekilde çalışır.

Aşağıdaki kodda nasıl müzik oluşturulacağı gösterilmektedir:

Python

Bu örnekte, client.aio.live.music.connect() kullanılarak Lyria RealTime oturumu başlatılıyor, ardından session.set_weighted_prompts() ile ilk istem ve session.set_music_generation_config ile ilk yapılandırma gönderiliyor, session.play() kullanılarak müzik üretimi başlatılıyor ve receive_audio(), aldığı ses parçalarını işleyecek şekilde ayarlanıyor.

  import asyncio
  from google import genai
  from google.genai import types

  client = genai.Client(http_options={'api_version': 'v1beta'})

  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ıyor, ardından session.setWeightedPrompts() ile ilk istem ve session.setMusicGenerationConfig kullanılarak ilk yapılandırma gönderiliyor, session.play() kullanılarak müzik oluşturma işlemi başlatılıyor ve alınan ses parçalarını işlemek için onMessage geri çağırma işlevi ayarlanıyor.

import { GoogleGenAI } from "@google/genai";
import Speaker from "speaker";
import { Buffer } from "buffer";

const client = new GoogleGenAI({
  apiKey: GEMINI_API_KEY,
    apiVersion: "v1beta" ,
});

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);

Ardından oturumu başlatmak, duraklatmak, durdurmak veya sıfırlamak için session.play(), session.pause(), session.stop() ve session.reset_context() simgelerini kullanabilirsiniz.

Müziği anlık olarak yönlendirme

İstemler göndererek ve üretim parametrelerini anlık olarak güncelleyerek müzik üretimini anlık olarak yönlendirebilirsiniz.

Prompt Lyria RealTime

Yayın etkin durumdayken, oluşturulan müziği değiştirmek için istediğiniz zaman yeni WeightedPrompt mesajları gönderebilirsiniz. Model, yeni girişe göre sorunsuz bir şekilde geçiş yapar.

İstemler, text (asıl istem) ve weight ile doğru biçimde olmalıdır. weight, 0 hariç herhangi bir değeri alabilir. 1.0 genellikle iyi bir başlangıç noktasıdır.

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 }
    ],
  });

İstemler önemli ölçüde değiştirildiğ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 çapraz geçiş uygulamanız önerilir.

Yapılandırmayı güncelleme

Müzik üretme parametrelerini anında güncelleyerek müzik üretme sürecini yönlendirebilirsiniz. Yalnızca bir parametreyi güncelleyemezsiniz. Diğer alanların varsayılan değerlerine sıfırlanmaması için yapılandırmanın tamamını ayarlamanız gerekir.

BPM'yi veya ölçeği güncellemek model için önemli bir değişiklik olduğundan, yeni yapılandırmayı dikkate alması 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 bu işlemi yapmanız gerekmez.

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();

Lyria RealTime için istem kılavuzu

Lyria RealTime'a istem göndermek için kullanabileceğiniz istemlerin kapsamlı olmayan bir listesini aşağıda bulabilirsiniz:

  • Ödeme 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 istemlerinizle denemeler yapın.

En iyi uygulamalar

  • İstemci uygulamaları, sorunsuz oynatma sağlamak için güçlü bir ses arabelleği oluşturma özelliği uygulamalıdır. Bu, ağ titremesini 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ümanları açıklayan sıfatlar kullanın.
    • İterasyon yapın ve yavaş yavaş yönlendirin. İstemi tamamen değiştirmek yerine, müziği daha sorunsuz bir şekilde dönüştürmek için öğeler eklemeyi veya değiştirmeyi deneyin.
    • Yeni bir istemin devam eden üretimi ne kadar etkileyeceğini belirlemek için WeightedPrompt ağırlığıyla denemeler yapın.

Teknik ayrıntılar

Bu bölümde, Lyria RealTime müzik üretme özelliğinin nasıl kullanılacağıyla ilgili ayrıntılar açıklanmaktadır.

Teknik Özellikler

  • Çıkış biçimi: Ham 16 bit PCM Ses
  • Örnek hızı: 48 kHz
  • Kanallar: 2 (stereo)

Denetimler

Müzik üretimi, aşağıdakileri içeren mesajlar gönderilerek anlık olarak etkilenebilir:

  • WeightedPrompt: Müzikal bir fikri, türü, enstrümanı, ruh halini veya özelliği açıklayan bir metin dizesi. Etkileri karıştırmak için birden fazla istem sağlanabilir. Lyria RealTime'ı en iyi şekilde isteme hakkında daha fazla bilgi için yukarıdaki bölüme bakın.
  • MusicGenerationConfig: Müzik üretme sürecinin yapılandırması (çıktı sesinin özelliklerini etkiler). Parametreler şunları içerir:
    • guidance: (kayan nokta) Aralık: [0.0, 6.0]. Varsayılan: 4.0. Modelin istemlere ne kadar sıkı uyacağını kontrol eder. Daha yüksek yönlendirme, isteme uyumu artırır ancak geçişleri daha ani hale getirir.
    • bpm: (int) Aralık: [60, 200]. Oluşturulan müzik için istediğiniz dakikadaki vuruş sayısını ayarlar. Yeni BPM'yi dikkate alması için modeli durdurmanız/oynatmanız veya bağlamı sıfırlamanız gerekir.
    • density: (kayan nokta) Aralık: [0.0, 1.0]. Müzik notalarının/seslerinin yoğunluğunu kontrol eder. Daha düşük değerler daha seyrek müzik üretirken, daha yüksek değerler daha "yoğun" müzik üretir.
    • brightness: (kayan nokta) Aralık: [0.0, 1.0]. Ses kalitesini ayarlar. Daha yüksek değerler genellikle daha yüksek frekansları vurgulayarak daha "parlak" sesler üretir.
    • scale: (Enum) Üretim için müzik ölçeğini (Anahtar ve Mod) ayarlar. SDK tarafından sağlanan Scale enum değerlerini kullanın. Yeni ölçeği dikkate alabilmesi için modeli durdurmanız/oynatmanız veya bağlamı sıfırlamanız gerekiyor.
    • mute_bass: (bool) Varsayılan: False. Modelin çıkışlardaki bas frekanslarını azaltıp azaltmayacağını kontrol eder.
    • mute_drums: (bool) Varsayılan: False. Modelin çıktılarının azaltılıp azaltılmayacağını kontrol eder.
    • only_bass_and_drums: (bool) Varsayılan: False. Modeli yalnızca bas ve davul sesleri üretecek şekilde yönlendirin.
    • music_generation_mode: (Enum) Modelin müziğin QUALITY (varsayılan değer) veya DIVERSITY bölümüne odaklanması gerekip gerekmediğini belirtir. Modelin seslendirmeleri başka bir enstrüman olarak üretmesine izin vermek için VOCALIZATION olarak da ayarlanabilir (bunları yeni komutlar olarak ekleyin).
  • PlaybackControl: Oynatma, duraklatma, durdurma veya bağlamı sıfırlama gibi oynatma özelliklerini kontrol etmeye yönelik komutlar.

bpm, density, brightness ve scale için, herhangi bir değer sağlanmazsa, model ilk yönlendirmelerinize göre en uygun olanı belirleyecektir.

temperature (0.0 ila 3.0, varsayılan 1.1), top_k (1 ila 1000, varsayılan 40) ve seed (0 ila 2 147 483 647, varsayılan olarak rastgele seçilir) gibi daha klasik parametreler de MusicGenerationConfig bölümünde özelleştirilebilir.

Ölçek Numaralandırma Değerleri

Modelin kabul edebileceği tüm ölçek değerleri şunlardır:

Enum Değeri Ölçek / Anahtar
C_MAJOR_A_MINOR Do majör / La minör
D_FLAT_MAJOR_B_FLAT_MINOR Re♭ majör / Si♭ minör
D_MAJOR_B_MINOR Re majör / Si minör
E_FLAT_MAJOR_C_MINOR Mi♭ majör / Do minör
E_MAJOR_D_FLAT_MINOR Mi majör / Do♯/Re♭ minör
F_MAJOR_D_MINOR Fa majör / Re minör
G_FLAT_MAJOR_E_FLAT_MINOR Sol majör / Mi minör
G_MAJOR_E_MINOR Sol majör / Mi minör
A_FLAT_MAJOR_F_MINOR La♭ majör / Fa minör
A_MAJOR_G_FLAT_MINOR A majör / F♯/G♭ minör
B_FLAT_MAJOR_G_MINOR Si♭ majör / Sol minör
B_MAJOR_A_FLAT_MINOR Si majör / Sol♯/La♭ minör
SCALE_UNSPECIFIED Varsayılan / Model karar verir

Model, çalınan notaları yönlendirebiliyor ancak göreceli tonlar arasında ayrım yapmıyor. Dolayısıyla her bir enum, hem ilgili majör hem de ilgili minöre karşılık gelir. Örneğin, C_MAJOR_A_MINOR piyanonun tüm beyaz tuşlarına, F_MAJOR_D_MINOR ise B bemol hariç tüm beyaz tuşlarına karşılık gelir.

Sınırlamalar

  • Sadece enstrümantal: Model yalnızca enstrümantal müzik üretir.
  • Güvenlik: Uyarılar güvenlik filtreleri tarafından kontrol edilir. Filtreleri tetikleyen istemler göz ardı edilecek ve bu durumda çıktıdaki filtered_prompt alanına bir açıklama yazılacaktır.
  • Filigranlama: Çıkış ses dosyaları, Sorumlu Yapay Zeka ilkelerimize uygun olarak tanımlama amacıyla her zaman filigranlanır.

Sırada ne var?

  • Tam şarkılar ve vokal parçaları oluşturun.Lyria 3.5,
  • Müzik yerine, TTS modellerini kullanarak çok konuşmacılı konuşma oluşturmayı öğrenin.
  • Resim veya video oluşturmayı öğrenin.
  • Yeni nesil müzik veya ses dosyaları yerine, İkizler burcunun nasıl bir yol izleyebileceğini öğrenin.Ses dosyalarını anlamak,
  • Live API'yi kullanarak Gemini ile anlık sohbet edin.

Daha fazla kod örneği ve eğitim için Yemek Kitabı'nı inceleyin.