Agent skill

Flutter Soloud 3D Audio

by alnitak in alnitak/flutter_soloud

Teaches positional (3D) audio in fluttersoloud — play3d/play3dClocked/play3dScheduled, listener position/orientation/velocity, per-source attenuation and Doppler, and the per-frame update pattern.

MITAuto-check passedMobile

Install Flutter Soloud 3D Audio

skills CLI
$ npx skills add alnitak/flutter_soloud --skill flutter-soloud-3d-audio -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install alnitak/flutter_soloud flutter-soloud-3d-audio --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/alnitak/flutter_soloud.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/flutter-soloud-3d-audio .claude/skills/flutter-soloud-3d-audio && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
flutter-soloud-3d-audio
GitHub stars
425
Token cost
~2.2k tokens
SKILL.md length
880 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
MIT

At a glance

Teaches positional (3D) audio in fluttersoloud — play3d/play3dClocked/play3dScheduled, listener position/orientation/velocity, per-source attenuation and Doppler, and the per-frame update pattern.

  • The user asks for spatial audio
  • SKILL.md covers Minimal example, The API shape, Per-frame update pattern and Traps, plus 2 more sections
  • Calls dart
  • Positional sound effects

What it does

Flutter Soloud 3D Audio is an agent skill from alnitak/flutter_soloud. Teaches positional (3D) audio in fluttersoloud — play3d/play3dClocked/play3dScheduled, listener position/orientation/velocity, per-source attenuation and Doppler, and the per-frame update pattern. Use when the user asks for spatial audio, positional sound effects, distance-based volume falloff, sounds attached to game entities, Doppler effects, or left/right panning based on world position.

Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile, covering Cross-platform mobile apps and Music and audio generation. It works with Flutter. The repository describes itself as: Flutter low-level audio plugin using SoLoud C++ library and FFI. The licence is MIT.

When your agent uses it

  • The user asks for spatial audio
  • Positional sound effects
  • Distance-based volume falloff
  • Sounds attached to game entities

Example prompts

  • “Use the flutter-soloud-3d-audio skill to teach positional (3D) audio in fluttersoloud — play3d/play3dClocked/play3dScheduled, listener…”
  • “/flutter-soloud-3d-audio”

What it can do on your machine

Read from SKILL.md and the folder at commit 289697e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • dart

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • solhsa.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Flutter Soloud 3D Audio loads about 2.2k tokens when it runs. Until then it costs about 105 tokens; SKILL.md has 880 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~105
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from alnitak/flutter_soloud at commit 289697e, republished under its MIT licence (© alnitak). 880 words, ~2,169 tokens.

Download SKILL.mdSave it as .claude/skills/flutter-soloud-3d-audio/SKILL.md (or your agent's skills folder).
name
flutter-soloud-3d-audio
description
Teaches positional (3D) audio in flutter_soloud — play3d/play3dClocked/play3dScheduled, listener position/orientation/velocity, per-source attenuation and Doppler, and the per-frame update pattern. Use when the user asks for spatial audio, positional sound effects, distance-based volume falloff, sounds attached to game entities, Doppler effects, or left/right panning based on world position.
version
1

flutter_soloud wraps the SoLoud C++ engine's built-in 3D audio. Every voice started with play3d has a 3D position and velocity; a single global "listener" (usually your camera or player) hears them. The coordinate system is right-handed (Y up, X right, Z toward the viewer). Unlike audioplayers/just_audio there is no asset "player" object per sound: you get a SoundHandle per playing instance and mutate its 3D state through SoLoud.instance setters. Also unlike the web Audio API, SoLoud does not move anything for you — positions and velocities are snapshots you must update yourself each tick.

Minimal example

dart
import 'package:flutter_soloud/flutter_soloud.dart';

Future<void> main() async {
  await SoLoud.instance.init();

  final sound = await SoLoud.instance.loadAsset('assets/sfx/whoosh.mp3');

  // Listener at origin, looking down -Z, head up along +Y.
  SoLoud.instance.set3dListenerParameters(
    0, 0, 0, // position
    0, 0, -1, // at (looking direction)
    0, 1, 0, // up
    0, 0, 0, // velocity (needed for Doppler)
  );

  // Play at (10, 0, -5) moving toward the listener at 5 units/s.
  final handle = SoLoud.instance.play3d(
    sound,
    10, 0, -5, // posX, posY, posZ (positional!)
    velX: -5, // velocity, for Doppler
    looping: true,
  );

  // Required to hear distance falloff — default attenuation is NONE.
  SoLoud.instance.set3dSourceAttenuation(handle, 2, 1); // linear
  SoLoud.instance.set3dSourceMinMaxDistance(handle, 1, 50);
}

The API shape

All methods are on SoLoud.instance (singleton), all positions/velocities are double in your world units. Playback methods return SoundHandle synchronously (not a Future) — different from the Future<...>-returning patterns in other packages.

Playback (all throw SoLoudNotInitializedException if you skipped init):

  • SoundHandle play3d(AudioSource sound, double posX, double posY, double posZ, {double velX = 0, double velY = 0, double velZ = 0, int busId = 0, double volume = 1, bool paused = false, bool looping = false, Duration loopingStartAt = Duration.zero, Duration? loopingEndAt, int? loopingStartOffsetAt, int? loopingEndOffsetAt, double scale = 1}) — one-shot, lowest latency; start is quantized to output-buffer boundaries.
  • SoundHandle play3dClocked(AudioSource sound, Duration soundTime, double posX, double posY, double posZ, {...}) — pass your app's monotonically increasing "physics time"; the engine spaces rapid-fire sounds sample-accurately so they don't clump at the next buffer boundary. Costs ~2 buffers of latency. Use for machine-gun / rhythmic 3D SFX.
  • SoundHandle play3dScheduled(AudioSource sound, Duration atTime, double posX, double posY, double posZ, {Duration? duration, ...}) — starts at an absolute engine time (SoLoud.instance.getEngineTime()), sample-accurate; duration auto-stops it at atTime + duration.

Listener (one global listener; default position is (0,0,0)):

  • set3dListenerParameters(posX, posY, posZ, atX, atY, atZ, upX, upY, upZ, velocityX, velocityY, velocityZ) — 12 positional doubles, no named parameters.
  • set3dListenerPosition(x, y, z) / set3dListenerAt(x, y, z) / set3dListenerUp(x, y, z) / set3dListenerVelocity(x, y, z) — individual setters. at is the look direction; up is the head-up vector.

Per-source (take the SoundHandle returned by play3d*):

  • set3dSourceParameters(handle, posX, posY, posZ, velocityX, velocityY, velocityZ) — positional doubles.
  • set3dSourcePosition(handle, x, y, z) / set3dSourceVelocity(handle, x, y, z).
  • set3dSourceMinMaxDistance(handle, minDistance, maxDistance) — defaults are 1 and 1000000. Inside min the sound is at full volume; beyond max it no longer gets quieter.
  • set3dSourceAttenuation(handle, int attenuationModel, double attenuationRolloffFactor) — models: 0 NO_ATTENUATION, 1 INVERSE_DISTANCE, 2 LINEAR_DISTANCE, 3 EXPONENTIAL_DISTANCE. Default is 0 (none) with rolloff 1.
  • set3dSourceDopplerFactor(handle, double dopplerFactor) — 0 disables, 1 normal, >1 exaggerated.

Global Doppler tuning:

  • set3dSoundSpeed(double speed) / double get3dSoundSpeed() — default 343 (meters/second in dry air at ~20 °C). SoLoud doesn't know your unit scale, so if 1 world unit ≠ 1 meter, scale the sound speed accordingly or Doppler will be wrong.

Per-frame update pattern

Nothing moves unless you move it. In your game loop / Ticker / onTick:

dart
void update(double dt) {
  // Listener follows the camera/player every frame.
  SoLoud.instance.set3dListenerParameters(
    cam.x, cam.y, cam.z,
    cam.forwardX, cam.forwardY, cam.forwardZ,
    cam.upX, cam.upY, cam.upZ,
    cam.velX, cam.velY, cam.velZ, // for Doppler
  );

  // Each moving emitter updates position AND velocity.
  for (final e in movingEmitters) {
    SoLoud.instance.set3dSourceParameters(
      e.handle, e.x, e.y, e.z, e.vx, e.vy, e.vz,
    );
  }
}
Show full SKILL.md (441 more words)Show less

Traps

  • Default attenuation is 0 (NO_ATTENUATION). If you play3d and never call set3dSourceAttenuation, you get left/right panning from position but no volume falloff with distance — the #1 "3D doesn't work" report. Pick a model (linear 2 is a good default for games) and set sensible min/max distances (e.g. 1–50 for meter-scale worlds; leaving max at the 1000000 default makes falloff imperceptible).
  • Positions are snapshots. A sound stays where play3d put it until you call set3dSourcePosition/set3dSourceParameters. No automatic binding to a game object; update every tick while the voice is alive.
  • Velocity doesn't move the source; it only feeds Doppler. You must supply both the position delta (via position updates) and the velocity vector yourself. Same for the listener. Zero velocity = no Doppler.
  • at and up must not be parallel (and should be roughly orthogonal and normalized). If both are e.g. (0,1,0) the listener orientation is degenerate and panning/orientation glitches or collapses.
  • set3dListenerParameters takes 12 positional doubles — no named arguments, and the source setters are positional too. Don't pass named args copied from the web docs; it won't compile.
  • play3d returns SoundHandle synchronously. No await. The async part is init() and loadAsset/loadFile.
  • Handle lifetime: once a non-looping sound finishes, its handle is invalid; per-source setters on a dead handle silently do nothing. Track sound.soundEvents / allInstancesFinished if you reuse handles.
  • Voice limit: default max active voices is 16 (setMaxActiveVoiceCount to change). At the limit, the oldest instance of the same sound is stolen; if none of that sound is playing, the new play silently produces a handle addressing no voice.
  • play3d start is buffer-quantized. Rapidly triggered SFX (gunfire) clump to buffer boundaries — use play3dClocked (or play3dScheduled with getEngineTime()) for sample-accurate spacing.
  • Doppler scale mismatch: set3dSoundSpeed default 343 assumes meters. If your world is in pixels or generic units, audible Doppler warble at game speeds means your velocities are huge relative to 343 — raise the sound speed or scale down.
  • Unit consistency: attenuation distances, listener/source positions, and sound speed all share the same implicit unit. Mixing meters for distances and pixels for positions gives nonsense falloff.

More depth

  • Working test exercising the full API (listener, source, attenuation, Doppler, sound speed): example/tests/tests/three_d_audio.dart. The example app (example/lib/) has no dedicated 3D demo screen.
  • Upstream SoLoud 3D concepts (attenuation models, Doppler math): https://solhsa.com/soloud/concepts3d.html

Keeping this skill current

This skill ships inside the flutter_soloud package, so upgrading flutter_soloud can carry a newer revision of it than the copy installed in the project. To check, run:

sh
dart run flutter_soloud:skills --check

It reports the installed and bundled skill versions and exits non-zero when an update is available. Offer to update with dart run flutter_soloud:skills (which touches only the skills, never pubspec or build files).

© alnitak, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/flutter-soloud-3d-audio of alnitak/flutter_soloud.

Open the folder on GitHubat commit 289697e

Compare with similar skills

Flutter Soloud 3D Audio next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Flutter Soloud 3D Audio compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Flutter Soloud 3D Audio this skillalnitak/flutter_soloud425—~2.2kAutomated safety check: PassMIT
Add Flutter Docusaurus Localematthiasn/lotti1.2k—~1.2kAutomated safety check: PassGPL-3.0
Tm Launcher DesignFar-Se/tabame372—~3.1kAutomated safety check: PassMIT
Flutter Initbear2u/my-skills933—~2.5kAutomated safety check: PassNone
Mobile App UI Designceorkm/mobile-app-ui-design403—~2kAutomated safety check: PassNone
Marionette Flutter Drive Appleancodepl/marionette_mcp482—~11kAutomated safety check: PassApache-2.0

Similar skills

  • Add, complete, or audit a locale across a Flutter application's ARB catalogs and a localized Docusaurus manual, including generated localization code, locale selectors, native platform declarations…

    1.2k GitHub stars~1.2k tokensUpdated today
    MobileAuto-check passed
  • Tm Launcher Design

    Far-Se/tabame

    Create or revise Tabame's Flutter launcher designs: frames, search bars, result rows, palettes, typography, and action dialogs.

    372 GitHub stars~3.1k tokensUpdated 2 days ago
    MobileAuto-check passed
  • Flutter Init

    bear2u/my-skills

    A skill your agent uses when user wants to create a new Flutter project (Todo/Habit/Note/Expense/Custom domain) with Clean Architecture, Riverpod 3.0, Drift, and modern Flutter stack

    933 GitHub stars~2.5k tokensUpdated 3 mo ago
    MobileAuto-check passed
  • Mobile App UI Design

    ceorkm/mobile-app-ui-design

    Design high-quality mobile app UI/UX screens, flows, and components.

    403 GitHub stars~2k tokensUpdated 3 mo ago
    MobileAuto-check passed
  • Marionette Flutter Drive App

    leancodepl/marionette_mcp

    Set up and drive a running Flutter app (debug or profile) with Marionette — an AI agent's hands and eyes for the app.

    482 GitHub stars~11k tokensUpdated 4 days ago
    MobileAuto-check passed
  • Flutter Screenshot

    JustLookAtNow/pt_mate

    Capture and show two Flutter UI screenshots for this project: one landscape/large-screen preview and one portrait/mobile preview, without using Flutter Web.

    503 GitHub stars~511 tokensUpdated 4 days ago
    MobileAuto-check passed

More from alnitak/flutter_soloud

All 14 skills in this repo
  • Flutter SoLoud Audio Filters

    alnitak/flutter_soloud

    Explains how to add and tune flutter_soloud's 13 audio filters at global, per-sound and mixing-bus level, including activation order and parameter fades.

    425 GitHub stars~2.1k tokensUpdated 3 days ago
    Auto-check passed
  • flutter_soloud Mixing Buses

    alnitak/flutter_soloud

    Teaches flutter_soloud mixing buses for routing groups of sounds through shared sub-mixes with collective volume and filters, such as separate music, SFX and UI sliders.

    425 GitHub stars~1.7k tokensUpdated 3 days ago
    Auto-check passed
  • flutter_soloud Setup

    alnitak/flutter_soloud

    Walks through adding the flutter_soloud audio engine to a Flutter app, with per-platform setup, initialization, binary-size and logging options, and output device switching.

    425 GitHub stars~3.6k tokensUpdated 3 days ago
    Auto-check: notes
  • Teaches the push buffer-stream API of flutter_soloud for playing audio that arrives in chunks, such as icecast radio, WebSocket PCM feeds or streaming TTS, instead of a complete file.

    425 GitHub stars~2.5k tokensUpdated 3 days ago
    Auto-check passed
  • Shows how to build audio visualizers in Flutter with flutter_soloud, using live FFT and wave data or offline waveform extraction, plus volume readings for level meters.

    425 GitHub stars~2.5k tokensUpdated 3 days ago
    Auto-check passed
  • flutter_soloud Idioms

    alnitak/flutter_soloud

    Explains the mental model for the flutter_soloud audio plugin: the SoLoud.instance singleton, AudioSource versus SoundHandle, synchronous play and platform limits.

    425 GitHub stars~2.3k tokensUpdated 3 days ago
    Auto-check passed

Works with

Categories

Questions about Flutter Soloud 3D Audio

What does Flutter Soloud 3D Audio do?

Teaches positional (3D) audio in fluttersoloud — play3d/play3dClocked/play3dScheduled, listener position/orientation/velocity, per-source attenuation and Doppler, and the per-frame update pattern. Flutter Soloud 3D Audio is an agent skill from alnitak/flutter_soloud. Teaches positional (3D) audio in fluttersoloud — play3d/play3dClocked/play3dScheduled, listener position/orientation/velocity, per-source attenuation and Doppler, and the per-frame update pattern.

When should I use Flutter Soloud 3D Audio?

Flutter Soloud 3D Audio fits situations like: the user asks for spatial audio; positional sound effects; distance-based volume falloff; sounds attached to game entities.

How do I install Flutter Soloud 3D Audio in Claude Code?

Run `npx skills add alnitak/flutter_soloud --skill flutter-soloud-3d-audio -a claude-code`. Or copy the skill folder (skills/flutter-soloud-3d-audio in alnitak/flutter_soloud) into .claude/skills/flutter-soloud-3d-audio in your project. Claude Code loads it when a task matches its description.

How do I install Flutter Soloud 3D Audio in Codex?

Run `npx skills add alnitak/flutter_soloud --skill flutter-soloud-3d-audio -a codex`. Or copy the skill folder (skills/flutter-soloud-3d-audio in alnitak/flutter_soloud) into .agents/skills/flutter-soloud-3d-audio in your project. Codex loads it when a task matches its description.

Can I use Flutter Soloud 3D Audio in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add alnitak/flutter_soloud --skill flutter-soloud-3d-audio -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/flutter-soloud-3d-audio, .gemini/skills/flutter-soloud-3d-audio, .github/skills/flutter-soloud-3d-audio and .opencode/skills/flutter-soloud-3d-audio in your project.

What does Flutter Soloud 3D Audio need to run?

Going by SKILL.md and its folder, Flutter Soloud 3D Audio needs the command-line tools its instructions call (dart).

Does Flutter Soloud 3D Audio access the network?

SKILL.md names 1 domain. As links in the text: solhsa.com. This is read from the text; nothing was executed.

Is Flutter Soloud 3D Audio safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Flutter Soloud 3D Audio use?

Flutter Soloud 3D Audio is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Flutter Soloud 3D Audio use?

About 2.2k tokens (SKILL.md is roughly 8.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Flutter Soloud 3D Audio?

Skills that share tags, products or a category with Flutter Soloud 3D Audio: Add Flutter Docusaurus Locale (matthiasn/lotti, 1.2k stars), Tm Launcher Design (Far-Se/tabame, 372 stars), Flutter Init (bear2u/my-skills, 933 stars) and Mobile App UI Design (ceorkm/mobile-app-ui-design, 403 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Flutter Soloud 3D Audio?

alnitak (a GitHub user) maintains it in alnitak/flutter_soloud, which has 425 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 6, 2026.

Source: alnitak/flutter_soloud on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.