# Tomusic.AI-1
A lightweight Elixir library for interacting with the tomusic.ai API, providing tools for music analysis and generation. This package facilitates seamless integration with the tomusic.ai platform for Elixir applications.
## Installation
Add `tomusic_ai_1` to your list of dependencies in `mix.exs`:
elixir
def deps do
[
{:tomusic_ai_1, "~> 1.0.0"}
]
end
Then, run `mix deps.get` to fetch the dependencies.
## Usage
Ensure you have configured your API key using application environment variables:
elixir
config :tomusic_ai_1,
api_key: System.get_env("TOMUSIC_AI_API_KEY")
Here are some example usage scenarios:
**1. Analyzing Music Structure:**
elixir
alias TomusicAI1.Analysis
song_data = %{title: "My Song", artist: "Some Artist", audio_url: "http://example.com/song.mp3"}
case Analysis.analyze_structure(song_data) do
{:ok, structure} ->
IO.puts "Song structure analysis successful:"
IO.inspect structure
{:error, reason} ->
IO.puts "Error analyzing song structure: #{reason}"
end
**2. Generating a Melody based on Mood:**
elixir
alias TomusicAI1.Generation
mood = "happy"
case Generation.generate_melody(mood) do
{:ok, melody} ->
IO.puts "Generated melody:"
IO.inspect melody
{:error, reason} ->
IO.puts "Error generating melody: #{reason}"
end
**3. Transcribing Audio to Sheet Music:**
elixir
alias TomusicAI1.Transcription
audio_file_path = "/path/to/audio.wav"
case Transcription.transcribe(audio_file_path) do
{:ok, sheet_music} ->
IO.puts "Transcription successful:"
IO.puts sheet_music
{:error, reason} ->
IO.puts "Error transcribing audio: #{reason}"
end
**4. Using Pipes for Sequential Operations:**
elixir
alias TomusicAI1.Analysis
alias TomusicAI1.Generation
song_data = %{title: "Another Song", artist: "Another Artist", audio_url: "http://example.com/another_song.mp3"}
song_data
|> Analysis.analyze_structure()
|> case do
{:ok, structure} ->
structure
|> Map.get(:key) # Example: Access the detected key
|> Generation.generate_melody() # Example: Generate melody based on key
|> IO.inspect()
{:error, reason} ->
IO.puts "Error: #{reason}"
end
**5. Handling Different Error Scenarios:**
elixir
alias TomusicAI1.Analysis
song_data = %{title: "Broken Song", artist: "Bad Artist", audio_url: "invalid_url"}
case Analysis.analyze_structure(song_data) do
{:ok, structure} ->
IO.puts "Analysis successful (unexpectedly):"
IO.inspect structure
{:error, :invalid_url} ->
IO.puts "Invalid URL provided."
{:error, :api_unavailable} ->
IO.puts "Tomusic.ai API is currently unavailable."
{:error, reason} ->
IO.puts "An unknown error occurred: #{reason}"
end
## Feature Summary
* **Music Structure Analysis:** Analyze the structure of a given song based on audio data.
* **Melody Generation:** Generate melodies based on specified moods or parameters.
* **Audio Transcription:** Transcribe audio files into sheet music notation.
* **Error Handling:** Provides robust error handling for various API and data issues.
* **Simple Integration:** Easy to integrate into existing Elixir projects.
## License
MIT
This package is part of the tomusic.ai-1 ecosystem. For advanced features and enterprise-grade tools, visit: https://tomusic.ai/