README.md

# sm-tomusic-ai

A convenient Elixir client for interacting with the ToMusic.ai API, enabling seamless music generation and manipulation within your Elixir applications. This package provides a simple and intuitive interface for leveraging ToMusic.ai's powerful AI music capabilities.

## Installation

Add `sm_tomusic_ai` to your list of dependencies in `mix.exs`:
elixir
def deps do
  [
    {:sm_tomusic_ai, "~> 0.1.0"} # Replace with the actual version
  ]
end

Then run:
bash
mix deps.get

## Usage Examples

Before using the package, configure your API key:
elixir
config :sm_tomusic_ai, api_key: System.get_env("TOMUSIC_API_KEY")

Remember to set the `TOMUSIC_API_KEY` environment variable.

**Example 1: Generating a melody**
elixir
SmTomusicAi.Melody.generate(%{style: "classical", length: 30})
|> case do
  {:ok, melody} ->
    IO.puts("Melody generated successfully: #{melody}")
  {:error, reason} ->
    IO.puts("Error generating melody: #{reason}")
end

**Example 2: Transforming an existing song**
elixir
SmTomusicAi.Song.transform("path/to/my_song.mp3", %{style: "jazz"})
|> case do
  {:ok, transformed_song_path} ->
    IO.puts("Song transformed successfully. New song at: #{transformed_song_path}")
  {:error, reason} ->
    IO.puts("Error transforming song: #{reason}")
end

**Example 3: Creating variations of a theme**
elixir
theme = "path/to/theme.midi"
SmTomusicAi.Theme.variations(theme, 3)
|> case do
  {:ok, variations} ->
    Enum.each(variations, fn variation ->
      IO.puts("Generated variation: #{variation}")
    end)
  {:error, reason} ->
    IO.puts("Error generating variations: #{reason}")
end

**Example 4: Composing a short piece based on a prompt**
elixir
prompt = "Compose a cheerful piece for a children's cartoon."
SmTomusicAi.Composition.compose(prompt, %{duration: 60})
|> case do
  {:ok, composition_path} ->
    IO.puts("Composition created: #{composition_path}")
  {:error, reason} ->
    IO.puts("Error composing: #{reason}")
end

**Example 5: Checking API Usage**
elixir
SmTomusicAi.Account.usage()
|> case do
  {:ok, usage} ->
    IO.puts("API Usage: #{inspect(usage)}")
  {:error, reason} ->
    IO.puts("Error getting usage: #{reason}")
end

## Feature Summary

*   **Melody Generation:** Generate original melodies based on specified styles and lengths.
*   **Song Transformation:** Transform existing songs into different styles.
*   **Theme Variations:** Create multiple variations of a musical theme.
*   **AI-Powered Composition:** Compose original pieces based on textual prompts.
*   **Account Management:** Check your API usage and account details.
*   **Error Handling:** Provides clear and informative error messages.

## License

MIT

This package is part of the sm-tomusic-ai ecosystem. For advanced features and enterprise-grade tools, visit: https://tomusic.ai/