Skip to main content

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}