adk_audio/traits/music.rs
1//! Music generation provider trait and request types.
2
3use async_trait::async_trait;
4
5use crate::error::AudioResult;
6use crate::frame::AudioFrame;
7
8/// Request parameters for music generation.
9#[derive(Debug, Clone, Default)]
10pub struct MusicRequest {
11 /// Text prompt describing the desired music.
12 pub prompt: String,
13 /// Desired duration in seconds.
14 pub duration_secs: u32,
15 /// Optional genre hint.
16 pub genre: Option<String>,
17 /// Optional tempo in beats per minute.
18 pub bpm: Option<u32>,
19 /// Optional musical key (e.g. "C major").
20 pub key: Option<String>,
21 /// Optional audio to continue from.
22 pub continuation_audio: Option<AudioFrame>,
23 /// Whether to generate instrumental-only (no vocals).
24 pub instrumental: bool,
25}
26
27/// Unified trait for music generation providers.
28#[async_trait]
29pub trait MusicProvider: Send + Sync {
30 /// Generate music from a text prompt.
31 async fn generate(&self, request: &MusicRequest) -> AudioResult<AudioFrame>;
32
33 /// List supported genre strings.
34 fn supported_genres(&self) -> &[String];
35}