> ## Documentation Index
> Fetch the complete documentation index at: https://developer.audioshake.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Build Practice Apps

> Create play-along tracks by removing a specific instrument from a mix

Build practice and jam-along experiences by removing a single instrument from a song. Use the `residual` option to get everything *except* the target instrument — perfect for guitarists, bassists, drummers, or any musician who wants to play along with the rest of the band.

## Create a Task

This example removes the guitar from a track. The `residual: true` flag returns everything except the guitar — your ready-to-use backing track:

<CodeGroup>
  ```python build_practice.py theme={null}
  import requests

  API_KEY = "your_api_key"
  HEADERS = {"Content-Type": "application/json", "x-api-key": API_KEY}

  response = requests.post(
      "https://api.audioshake.ai/tasks",
      headers=HEADERS,
      json={
          "assetId": "your_asset_id",
          "targets": [
              {"model": "guitar", "formats": ["wav"], "residual": True}
          ]
      }
  )

  task_id = response.json()["id"]
  print(f"Task created: {task_id}")
  ```

  ```javascript buildPractice.js theme={null}
  const API_KEY = "your_api_key";
  const headers = { "Content-Type": "application/json", "x-api-key": API_KEY };

  const createRes = await fetch("https://api.audioshake.ai/tasks", {
    method: "POST",
    headers,
    body: JSON.stringify({
      assetId: "your_asset_id",
      targets: [
        { model: "guitar", formats: ["wav"], residual: true }
      ]
    })
  });

  const { id: taskId } = await createRes.json();
  console.log(`Task created: ${taskId}`);
  ```

  ```bash curl theme={null}
  curl -X POST "https://api.audioshake.ai/tasks" \
    -H "Content-Type: application/json" \
    -H "x-api-key: $AUDIOSHAKE_API_KEY" \
    -d '{
      "assetId": "your_asset_id",
      "targets": [
        { "model": "guitar", "formats": ["wav"], "residual": true }
      ]
    }'
  ```
</CodeGroup>

[Check Task status](/check-task-status) to monitor progress and download results, or use [webhooks](/api-reference/tasks/webhooks) to be notified when each target completes.

With `residual: true`, you get two outputs — the isolated instrument and the residual (everything else). Use the residual as the backing track.

## Try other instruments

Swap the model to create practice tracks for any instrument:

| Model    | Practice scenario           |
| -------- | --------------------------- |
| `guitar` | Guitar play-along           |
| `bass`   | Bass play-along             |
| `drums`  | Drum play-along             |
| `piano`  | Piano / keys play-along     |
| `vocals` | Vocal practice / sing-along |

## Use cases

* Build interactive practice apps for musicians
* Generate play-along tracks for music education platforms
* Create instrument-specific backing tracks at scale
* Power jam session features in music apps

<CardGroup cols={2}>
  <Card title="Instrument Separation" icon="waveform-lines" href="/separate-stems">
    Extract all stems from a track instead of just one.
  </Card>

  <Card title="Build Karaoke Tracks" icon="microphone-lines" href="/create-karaoke-tracks">
    Combine instrumental + lyrics for karaoke apps.
  </Card>
</CardGroup>
