Gemini API, sử dụng Lyria RealTime, cung cấp quyền truy cập vào một mô hình tạo nhạc trực tuyến, theo thời gian thực và hiện đại. API này cho phép nhà phát triển xây dựng các ứng dụng mà người dùng có thể tạo, điều hướng liên tục và biểu diễn nhạc cụ theo cách tương tác.
Để trải nghiệm những gì có thể tạo bằng Lyria RealTime, hãy thử trên AI Studio bằng các ứng dụng Prompt DJ hoặc MIDI DJ!
Cách hoạt động của tính năng tạo nhạc
Tính năng tạo nhạc RealTime của Lyria sử dụng kết nối phát trực tuyến ổn định, hai chiều, có độ trễ thấp bằng cách sử dụng WebSocket.
Tạo và điều khiển nhạc
Lyria RealTime hoạt động giống như Live API (API trực tiếp) về mặt sử dụng websocket để duy trì hoạt động giao tiếp theo thời gian thực với mô hình. Tuy nhiên, điều này vẫn chưa hoàn toàn giống nhau vì bạn không thể trò chuyện với mô hình và bạn phải sử dụng một định dạng cụ thể để nhắc mô hình.
Mã sau đây minh hoạ cách tạo nhạc:
Python
Ví dụ này khởi chạy phiên Lyria RealTime bằng cách sử dụng client.aio.live.music.connect()
, sau đó gửi lời nhắc ban đầu bằng session.set_weighted_prompts()
cùng với cấu hình ban đầu bằng session.set_music_generation_config
, bắt đầu tạo nhạc bằng session.play()
và thiết lập receive_audio()
để xử lý các đoạn âm thanh nhận được.
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
Ví dụ này khởi chạy phiên Lyria RealTime bằng cách sử dụng client.live.music.connect()
, sau đó gửi lời nhắc ban đầu bằng session.setWeightedPrompts()
cùng với cấu hình ban đầu bằng session.setMusicGenerationConfig
, bắt đầu tạo nhạc bằng session.play()
và thiết lập lệnh gọi lại onMessage
để xử lý các đoạn âm thanh nhận được.
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();
Sau đó, bạn có thể sử dụng session.play()
, session.pause()
, session.stop()
và session.reset_context()
để bắt đầu, tạm dừng, dừng hoặc đặt lại phiên.
Điều khiển nhạc theo thời gian thực
Lệnh gọi Lyria RealTime
Khi luồng đang hoạt động, bạn có thể gửi tin nhắn WeightedPrompt
mới bất cứ lúc nào để thay đổi bản nhạc được tạo. Mô hình sẽ chuyển đổi suôn sẻ dựa trên dữ liệu đầu vào mới.
Lời nhắc cần tuân theo định dạng phù hợp với text
(lời nhắc thực tế) và weight
. weight
có thể nhận bất kỳ giá trị nào ngoại trừ 0
. 1.0
thường là một điểm khởi đầu tốt.
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 }
],
});
Xin lưu ý rằng quá trình chuyển đổi mô hình có thể hơi đột ngột khi thay đổi đáng kể các lời nhắc. Vì vậy, bạn nên triển khai một số loại hiệu ứng chuyển màu bằng cách gửi các giá trị trọng số trung gian đến mô hình.
Cập nhật cấu hình
Bạn cũng có thể cập nhật các thông số tạo nhạc theo thời gian thực. Bạn không thể chỉ cập nhật một thông số mà cần phải đặt toàn bộ cấu hình, n��u không các trư��ng khác sẽ được đặt lại về giá trị mặc định.
Vì việc cập nhật bpm hoặc thang âm là một thay đổi lớn đối với mô hình, nên bạn cũng cần yêu cầu mô hình đặt lại ngữ cảnh bằng cách sử dụng reset_context()
để tính đến cấu hình mới. Việc này sẽ không làm dừng luồng phát, nhưng sẽ là một quá trình chuyển đổi khó khăn. Bạn không cần làm điều này cho các tham số khác.
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();
Hướng dẫn về câu lệnh cho Lyria RealTime
Dưới đây là danh sách không đầy đủ các câu lệnh bạn có thể sử dụng để nhắc Lyria RealTime:
- Nhạc cụ:
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, ...
- Thể loại nhạc:
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, ...
- Tâm trạng/Nội dung mô tả:
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, ...
Đây chỉ là một số ví dụ, Lyria RealTime có thể làm được nhiều việc hơn thế. Thử nghiệm với câu lệnh của riêng bạn!
Các phương pháp hay nhất
- Ứng dụng khách phải triển khai tính năng lưu vào bộ đệm âm thanh mạnh mẽ để đảm bảo phát mượt mà. Điều này giúp tính đến độ trễ mạng và sự thay đổi nhỏ về độ trễ tạo.
- Câu lệnh hiệu quả:
- Hãy cung cấp thông tin mô tả. Sử dụng tính từ mô tả tâm trạng, thể loại và cách phối nhạc.
- Lặp lại và điều hướng dần dần. Thay vì thay đổi hoàn toàn câu lệnh, hãy thử thêm hoặc sửa đổi các phần tử để chuyển đổi âm nhạc một cách mượt mà hơn.
- Thử nghiệm với trọng số trên
WeightedPrompt
để ảnh hưởng đến mức độ tác động của một lời nhắc mới đối với quá trình tạo đang diễn ra.
Chi tiết kỹ thuật
Phần này mô tả thông tin cụ thể về cách sử dụng tính năng tạo nhạc RealTime của Lyria.
Thông số kỹ thuật
- Định dạng đầu ra: Âm thanh PCM thô 16 bit
- Tốc độ lấy mẫu: 48 kHz
- Kênh: 2 (âm thanh nổi)
Các chế độ kiểm soát
Bạn có thể ảnh hưởng đến quá trình tạo nhạc theo thời gian thực bằng cách gửi thông báo chứa:
WeightedPrompt
: Chuỗi văn bản mô tả ý tưởng, thể loại, nhạc cụ, tâm trạng hoặc đặc điểm âm nhạc. Bạn có thể cung cấp nhiều câu lệnh để kết hợp các yếu tố ảnh hưởng. Hãy xem phần trên để biết thêm thông tin chi tiết về cách tốt nhất để nhắc Livia RealTime.MusicGenerationConfig
: Cấu hình cho quá trình tạo nhạc, ảnh hưởng đến các đặc điểm của âm thanh đầu ra. Các tham số bao gồm:guidance
: (float) Phạm vi:[0.0, 6.0]
. Mặc định:4.0
. Kiểm soát mức độ nghiêm ngặt mà mô hình tuân theo lời nhắc. Hướng dẫn cao hơn giúp người dùng tuân thủ lời nhắc, nhưng khiến quá trình chuyển đổi trở nên đột ngột hơn.bpm
: (int) Phạm vi:[60, 200]
. Đặt số nhịp/phút mà bạn muốn cho bản nhạc được tạo. Bạn cần dừng/phát hoặc đặt lại ngữ cảnh cho mô hình để tính đến bpm mới.density
: (float) Phạm vi:[0.0, 1.0]
. Kiểm soát mật độ của các nốt nhạc/âm thanh. Giá trị thấp hơn tạo ra âm nhạc thưa thớt hơn; giá trị cao hơn tạo ra âm nhạc "bận rộn" hơn.brightness
: (float) Phạm vi:[0.0, 1.0]
. Điều chỉnh chất lượng tông màu. Giá trị cao hơn sẽ tạo ra âm thanh "sáng" hơn, thường nhấn mạnh các tần số cao hơn.scale
: (Enum) Đặt thang âm nhạc (Khoá và Chế độ) cho quá trình tạo. Sử dụng các giá trị enumScale
do SDK cung cấp. Bạn cần dừng/phát hoặc đặt lại ngữ cảnh cho mô hình để tính đến tỷ lệ mới.mute_bass
: (bool) Mặc định:False
. Kiểm soát xem mô hình có giảm âm trầm của đầu ra hay không.mute_drums
: (bool) Mặc định:False
. Kiểm soát xem đầu ra của mô hình có làm giảm trống của đầu ra hay không.only_bass_and_drums
: (bool) Mặc định:False
. Hướng dẫn mô hình để chỉ cố gắng xuất ra âm trầm và trống.
PlaybackControl
: Các lệnh để kiểm soát các khía cạnh phát, chẳng hạn như phát, tạm dừng, dừng hoặc đặt lại ngữ cảnh.
Đối với bpm
, density
, brightness
và scale
, nếu bạn không cung cấp giá trị nào, thì mô hình sẽ quyết định giá trị phù hợp nhất theo lời nhắc ban đầu của bạn.
Các thông số cổ điển hơn như temperature
(0,0 đến 3,0, mặc định là 1,1), top_k
(1 đến 1000, mặc định là 40) và seed
(0 đến 2 147 483 647, được chọn ngẫu nhiên theo mặc định) cũng có thể tuỳ chỉnh trong MusicGenerationConfig
.
Điều chỉnh theo tỷ lệ các giá trị enum
Sau đây là tất cả các giá trị tỷ lệ mà mô hình có thể chấp nhận:
Giá trị enum | Tỷ lệ / Khoá |
---|---|
C_MAJOR_A_MINOR |
C trưởng / A thứ |
D_FLAT_MAJOR_B_FLAT_MINOR |
D♭ trưởng / B♭ thứ |
D_MAJOR_B_MINOR |
D trưởng / B thứ |
E_FLAT_MAJOR_C_MINOR |
Mi giáng trưởng / Si thứ |
E_MAJOR_D_FLAT_MINOR |
Mi trưởng / C♯/D♭ thứ |
F_MAJOR_D_MINOR |
Fa trưởng / Rê thứ |
G_FLAT_MAJOR_E_FLAT_MINOR |
G♭ trưởng / E♭ thứ |
G_MAJOR_E_MINOR |
G trưởng / E thứ |
A_FLAT_MAJOR_F_MINOR |
La giáng trưởng / Fa thứ |
A_MAJOR_G_FLAT_MINOR |
La trưởng / Fa thăng/G♭ thứ |
B_FLAT_MAJOR_G_MINOR |
Si giáng trưởng / Sol thứ |
B_MAJOR_A_FLAT_MINOR |
B trưởng / G♯/A♭ thứ |
SCALE_UNSPECIFIED |
Mặc định / Mô hình quyết định |
Mô hình này có thể hướng dẫn các nốt được phát, nhưng không phân biệt được các phím tương đối. Do đó, mỗi enum tương ứng với cả phiên bản chính và phiên bản phụ tương đối. Ví dụ: C_MAJOR_A_MINOR
sẽ tương ứng với tất cả các phím trắng của một cây đàn piano và F_MAJOR_D_MINOR
sẽ là tất cả các phím trắng ngoại trừ phím B phẳng.
Các điểm hạn chế
- Chỉ nhạc cụ: Mô hình này chỉ tạo nhạc cụ.
- An toàn: Lời nhắc được kiểm tra bằng bộ lọc an toàn. Lời nhắc kích hoạt bộ lọc sẽ bị bỏ qua trong trường hợp này, lời giải thích sẽ được ghi vào trường
filtered_prompt
của đầu ra. - Tạo hình mờ: Âm thanh đầu ra luôn được tạo hình mờ để nhận dạng theo các nguyên tắc về AI có trách nhiệm.
Bước tiếp theo
- Thay vì âm nhạc, hãy tìm hiểu cách tạo cuộc trò chuyện có nhiều người nói bằng mô hình TTS,
- Khám phá cách tạo hình ảnh hoặc video,
- Thay vì tạo nhạc hoặc âm thanh, hãy tìm hiểu cách Gemini có thể hiểu Tệp âm thanh,
- Trò chuyện với Gemini theo thời gian thực bằng cách sử dụng Live API.
Khám phá Sách dạy nấu ăn để biết thêm các ví dụ và hướng dẫn về mã.