DEV Community

Rohith Pavithran
Rohith Pavithran

Posted on

Free Voice Music Curator: Ditch Premium Music Fees with ElevenLabs & Google AI

DEV Weekend Challenge: Passion Edition Submission

This is a submission for Weekend Challenge: Passion Edition

What I Built

I built the Free Voice Music Curator, an intelligent full-stack audio player powered entirely by public APIs, legal Creative Commons music, and zero paid subscription walls.

Inspired by the challenge prompt of passion, I wanted to capture the absolute devotion fans and hobbyists pour into their musical worlds. However, classic web-streaming apps are trapped behind heavy OAuth logic or aggressive paid premium tiers. The Free Voice Music Curator solves this by allowing users to command a local audio player using natural voice strings (via ElevenLabs), which are dynamically parsed by Google AI to pull over 500,000 legal, free-streaming tracks from Jamendo.

🟢 The Free-Tier Architecture

[ ElevenLabs Agent ] ➔ Webhook ➔ [ Backend Server ] ➔ Jamendo REST API
                                        │
                                        ▼
                        [ HTML5 Audio Player Engine ] ➔ (Plays raw .mp3 stream)
Enter fullscreen mode Exit fullscreen mode

Demo

The application is fully configured and ready!

  • Live Development Webhook: https://ais-dev-vtsuihfhfsyunprfhoszsh-559194232025.asia-east1.run.app/api/webhook/elevenlabs
  • Production Webhook Simulator: Included directly inside the UI console so you can fire direct preset configurations (e.g., 💤 Lofi Study, 🏎️ Synthwave, 🎸 Acoustic) to watch the system respond in real time.

Code

The interface features a gorgeous deep interstellar slate and emerald canvas (bg-slate-900 / text-emerald-400) alongside modern typography pairings (Space Grotesk and Inter).

Here is the clean Python Core Engine snippet used to process the incoming webhook metadata securely:

import random
import requests
import vlc  # Install via: pip install python-vlc

class FreeVoiceMusicCurator:
    def __init__(self, client_id):
        self.client_id = client_id
        self.base_url = "https://api.jamendo.com/v3.0/tracks/"

    def get_curated_stream_urls(self, target_genre=None, target_artist=None, limit=10):
        print(f"Querying free cloud library for: Genre={target_genre}, Artist={target_artist}...")

        params = {
            "client_id": self.client_id,
            "format": "json",
            "limit": 50,
            "audioformat": "mp32",
            "order": "popularity_total"
        }

        if target_genre:
            params["tags"] = target_genre.lower()
        if target_artist:
            params["artist_name"] = target_artist.lower()

        try:
            response = requests.get(self.base_url, params=params)
            data = response.json()
            tracks = data.get("results", [])

            stream_targets = []
            for track in tracks:
                stream_url = track.get("audio")
                if stream_url:
                    stream_targets.append({
                        "title": track.get("name"),
                        "artist": track.get("artist_name"),
                        "url": stream_url
                    })

            random.shuffle(stream_targets)
            return stream_targets[:limit]
        except Exception as e:
            print(f"API Fetch Error: {e}")
            return []
Enter fullscreen mode Exit fullscreen mode

How I Built It

The execution pipeline flows fluidly across three modern technical frameworks:

  1. Intelligent Conversational Agent (ElevenLabs): I built a blank agent powered by a custom webhook tool named play_free_genre_music. It listens for spoken triggers like "Play some high-energy synthwave beats" and extracts clean textual params (prompt, genre, artist).
  2. Contextual AI Translation Engine (Google AI Studio): The backend leverages the gemini-3.5-flash model to analyze the full natural-language transcripts, scrubbing out specific moods, obscure tags, or strict artist names, complete with a local rule-based keyword fallback parser to guarantee zero downtime.
  3. Responsive Web Player Platform: Built an HTML5 audio context interface complete with a live API resource monitor (tracking Jamendo's 35,000 free monthly request tier cap) and real-time scrolling telemetry log panels recording every single serverless event transcript.

Prize Categories

This application is being submitted to the following prize categories:

  • Best Use of ElevenLabs: For mapping custom voice conversational tools to a local audio state architecture seamlessly.
  • Best Use of Google AI: Using Gemini to turn messy, natural speech commands into highly structured metadata payloads.

Top comments (0)