Class: ElevenlabsClient::Endpoints::Music

Inherits:
Object
  • Object
show all
Defined in:
lib/elevenlabs_client/endpoints/music.rb

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Music

Returns a new instance of Music.



6
7
8
# File 'lib/elevenlabs_client/endpoints/music.rb', line 6

def initialize(client)
  @client = client
end

Instance Method Details

#compose(options = {}) ⇒ String Also known as: compose_music

POST /v1/music Compose music and return binary audio data Documentation: https://elevenlabs.io/docs/api-reference/music/compose

Options Hash (options):

  • :prompt (String)

    Text description of the music to generate

  • :composition_plan (Hash)

    Detailed composition structure (optional)

  • :music_length_ms (Integer)

    Length of music in milliseconds (optional)

  • :model_id (String)

    Model to use for generation (default: "music_v1")

  • :output_format (String)

    Audio format (e.g., "mp3_44100_128")

Parameters:

  • (defaults to: {})

    Music composition parameters

Returns:

  • Binary audio data



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/elevenlabs_client/endpoints/music.rb', line 21

def compose(options = {})
  endpoint = "/v1/music"
  request_body = build_music_request_body(options)
  
  query_params = {}
  query_params[:output_format] = options[:output_format] if options[:output_format]
  
  endpoint_with_query = query_params.empty? ? endpoint : "#{endpoint}?#{URI.encode_www_form(query_params)}"
  
  @client.post_binary(endpoint_with_query, request_body)
end

#compose_detailed(options = {}) ⇒ String Also known as: compose_music_detailed

POST /v1/music/detailed Compose music and return detailed response with metadata and audio Documentation: https://elevenlabs.io/docs/api-reference/music/compose-detailed

Options Hash (options):

  • :prompt (String)

    Text description of the music to generate

  • :composition_plan (Hash)

    Detailed composition structure (optional)

  • :music_length_ms (Integer)

    Length of music in milliseconds (optional)

  • :model_id (String)

    Model to use for generation (default: "music_v1")

  • :output_format (String)

    Audio format (e.g., "mp3_44100_128")

Parameters:

  • (defaults to: {})

    Music composition parameters

Returns:

  • Multipart response with JSON metadata and binary audio



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/elevenlabs_client/endpoints/music.rb', line 68

def compose_detailed(options = {})
  endpoint = "/v1/music/detailed"
  request_body = build_music_request_body(options)
  
  query_params = {}
  query_params[:output_format] = options[:output_format] if options[:output_format]
  
  endpoint_with_query = query_params.empty? ? endpoint : "#{endpoint}?#{URI.encode_www_form(query_params)}"
  
  # Use post_with_custom_headers to handle multipart response
  @client.post_with_custom_headers(
    endpoint_with_query,
    request_body,
    { "Accept" => "multipart/mixed" }
  )
end

#compose_stream(options = {}, &block) ⇒ nil Also known as: compose_music_stream

POST /v1/music/stream Compose music with streaming audio response Documentation: https://elevenlabs.io/docs/api-reference/music/compose-stream

Options Hash (options):

  • :prompt (String)

    Text description of the music to generate

  • :composition_plan (Hash)

    Detailed composition structure (optional)

  • :music_length_ms (Integer)

    Length of music in milliseconds (optional)

  • :model_id (String)

    Model to use for generation (default: "music_v1")

  • :output_format (String)

    Audio format (e.g., "mp3_44100_128")

Parameters:

  • (defaults to: {})

    Music composition parameters

  • Block to handle streaming audio chunks

Returns:

  • Audio is streamed via the block



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/elevenlabs_client/endpoints/music.rb', line 45

def compose_stream(options = {}, &block)
  endpoint = "/v1/music/stream"
  request_body = build_music_request_body(options)
  
  query_params = {}
  query_params[:output_format] = options[:output_format] if options[:output_format]
  
  endpoint_with_query = query_params.empty? ? endpoint : "#{endpoint}?#{URI.encode_www_form(query_params)}"
  
  @client.post_streaming(endpoint_with_query, request_body, &block)
end

#create_plan(options = {}) ⇒ Hash Also known as: create_music_plan

POST /v1/music/plan Create a composition plan for music generation Documentation: https://elevenlabs.io/docs/api-reference/music/create-plan

Options Hash (options):

  • :prompt (String)

    Text description of the music style/structure

  • :music_length_ms (Integer)

    Desired length of music in milliseconds

  • :source_composition_plan (Hash)

    Base plan to modify (optional)

  • :model_id (String)

    Model to use for plan generation (default: "music_v1")

Parameters:

  • (defaults to: {})

    Plan creation parameters

Returns:

  • JSON response containing the composition plan



95
96
97
98
99
100
101
102
103
104
105
# File 'lib/elevenlabs_client/endpoints/music.rb', line 95

def create_plan(options = {})
  endpoint = "/v1/music/plan"
  request_body = {
    prompt: options[:prompt],
    music_length_ms: options[:music_length_ms],
    source_composition_plan: options[:source_composition_plan],
    model_id: options[:model_id] || "music_v1"
  }.compact
  
  @client.post(endpoint, request_body)
end