Agent skill

Flutter Soloud Output Capture

by alnitak in alnitak/flutter_soloud

Teaches how to record the fluttersoloud engine's mixed master output as a Stream<Uint8List (raw PCM or Opus/Vorbis/FLAC/WAV) using startMixerOutputStream/stopMixerOutputStream, including the WAV…

MITAuto-check passedMobile

Install Flutter Soloud Output Capture

skills CLI
$ npx skills add alnitak/flutter_soloud --skill flutter-soloud-output-capture -a claude-code

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

GitHub CLI
$ gh skill install alnitak/flutter_soloud flutter-soloud-output-capture --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-output-capture .claude/skills/flutter-soloud-output-capture && 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-output-capture
GitHub stars
425
Token cost
~2k tokens
SKILL.md length
738 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
MIT

At a glance

Teaches how to record the fluttersoloud engine's mixed master output as a Stream<Uint8List (raw PCM or Opus/Vorbis/FLAC/WAV) using startMixerOutputStream/stopMixerOutputStream, including the WAV…

  • The user wants to record
  • SKILL.md covers Minimal example, The API shape, Traps and Capturing from a worker isolate, plus 2 more sections
  • Calls dart
  • Stream what the app is playing (the final mix

What it does

Flutter Soloud Output Capture is an agent skill from alnitak/flutter_soloud. Teaches how to record the fluttersoloud engine's mixed master output as a Stream<Uint8List (raw PCM or Opus/Vorbis/FLAC/WAV) using startMixerOutputStream/stopMixerOutputStream, including the WAV header fix-up and capturing from a worker isolate via SoLoudIsolate. Use when the user wants to record, save, or stream what the app is playing (the final mix, NOT microphone input — fluttersoloud does not capture mic), e.g. "save the mix to a .wav file", "record the game audio", "stream the engine output over the network".

Its SKILL.md is about 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. It works with Flutter and Dart. 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 wants to record
  • Stream what the app is playing (the final mix
  • NOT microphone input — fluttersoloud does not capture mic)

Example prompts

  • “save the mix to a .wav file”
  • “record the game audio”
  • “stream the engine output over the network”
  • “/flutter-soloud-output-capture”

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

    No URLs in SKILL.md.

    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 Output Capture loads about 2k tokens when it runs. Until then it costs about 138 tokens; SKILL.md has 738 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~138
When it runs · the whole SKILL.md, loaded when a task matches
~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). 738 words, ~1,978 tokens.

Download SKILL.mdSave it as .claude/skills/flutter-soloud-output-capture/SKILL.md (or your agent's skills folder).
name
flutter-soloud-output-capture
description
Teaches how to record the flutter_soloud engine's mixed master output as a Stream<Uint8List> (raw PCM or Opus/Vorbis/FLAC/WAV) using startMixerOutputStream/stopMixerOutputStream, including the WAV header fix-up and capturing from a worker isolate via SoLoudIsolate. Use when the user wants to record, save, or stream what the app is playing (the final mix, NOT microphone input — flutter_soloud does not capture mic), e.g. "save the mix to a .wav file", "record the game audio", "stream the engine output over the network".
version
1

Mixer output capture

flutter_soloud taps the master mixer output: everything the engine mixes (all voices, buses, and active global filters) is copied into a native circular buffer and delivered to Dart as a broadcast Stream<Uint8List> of audio chunks. This is a capture of the output the engine produces — it is not an input device. flutter_soloud has no microphone recording; for mic input use another package. Capture runs on all platforms; on web it requires the WebAssembly build (--wasm).

Minimal example

Record 5 seconds of the mix to a raw PCM file:

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

Future<void> recordMix(String outputPath) async {
  await SoLoud.instance.init();

  final sink = File(outputPath).openWrite();
  final stream = SoLoud.instance.startMixerOutputStream(
    format: MixerOutputFormat.pcmS16le,
  );
  final sub = stream.listen(sink.add);

  final sound = await SoLoud.instance.loadAsset('assets/music.mp3');
  SoLoud.instance.play(sound);
  await Future<void>.delayed(const Duration(seconds: 5));

  // Stop first: the tail of the buffer is flushed into the stream
  // synchronously on stop, so listeners still attached get the last bytes.
  SoLoud.instance.stopMixerOutputStream();
  await sub.cancel();
  await sink.close();
}

The API shape

All on SoLoud.instance (and mirrored on SoLoudIsolate.instance, see below):

  • Stream<Uint8List> startMixerOutputStream({MixerOutputFormat format = MixerOutputFormat.pcmF32le, int sampleRate = -1, int channels = -1, int bufferSizeBytes = 1024 * 1024, int notificationThresholdBytes = 4096, int chunkPCMFrames = -1}) — starts capture and returns a broadcast stream. sampleRate/channels of -1 follow the engine config. Throws SoLoudNotInitializedException if the engine is not initialized. Calling it while already capturing returns the existing stream.
  • void stopMixerOutputStream() — stops capture, flushes remaining buffer bytes into the stream synchronously, then closes the stream.
  • bool get isMixerOutputStreamRunning — whether capture is active.
  • Uint8List getMixerOutputWavHeader() — the finalized 44-byte WAV header; only meaningful with MixerOutputFormat.wav after stopping (returns an empty list otherwise).
  • enum MixerOutputFormat — pcmF32le (default, pcmS8, pcmS16le, pcmS32le, opus, vorbis, flac, wav. Helpers: isPcm, bytesPerSample (0 for compressed), bytesPerFrame(channels).

How this differs from what models assume from other packages:

  • There is no record()/startRecording() and no AudioRecorder — the API is named after the mixer output. You are recording playback, not a device.
  • No onAudio/dataAvailable callback like the Web Audio ScriptProcessorNode/AudioWorklet — the result is an ordinary Dart Stream; you listen to it.
  • Unlike just_audio/audioplayers there is no file-target convenience API ("record to path"). You always write the chunks yourself.
  • The chunk size is driven by notificationThresholdBytes (compressed formats, and PCM when chunkPCMFrames is -1) or by chunkPCMFrames (PCM only, fixed-size chunks of exactly chunkPCMFrames * channels * bytesPerSample bytes; must be -1 or >= 2048). There is no per-chunk timestamp or duration metadata — just bytes.
  • Compressed formats (opus, vorbis, flac) require the plugin to be built with the Xiph libraries; wav and the PCM formats are always available.
Show full SKILL.md (411 more words)Show less

Traps

  • Not microphone input. If the user asks to record the mic, this API is the wrong tool regardless of how it is named. flutter_soloud has no input capture.
  • WAV header is a placeholder until stop. With MixerOutputFormat.wav the stream starts with a 44-byte header whose RIFF/data size fields are zero. After stopMixerOutputStream(), call getMixerOutputWavHeader() and overwrite the first 44 bytes of the file, or players report duration 0 / refuse to play:
    dart
    SoLoud.instance.stopMixerOutputStream();
    await sub.cancel();
    await sink.close();
    final header = SoLoud.instance.getMixerOutputWavHeader();
    if (header.length == 44) {
      final raf = File(path).openSync(mode: FileMode.writeOnlyAppend)
        ..setPositionSync(0)
        ..writeFromSync(header);
      await raf.close();
    }
  • Cancel the subscription after stop, not before. stop() flushes the buffer tail into the stream with synchronous delivery; cancelling first loses the final chunk (which for compressed formats carries the encoder tail).
  • chunkPCMFrames is PCM-only. Passing it with opus/vorbis/flac/wav trips an assert in debug builds. Compressed formats always use notificationThresholdBytes.
  • Main-isolate stalls create capture gaps. The native side waits for Dart to advance the read position; a 500 ms synchronous block on the listening isolate produces a ~500 ms gap between chunks. Don't do heavy synchronous work (file sync writes on huge chunks, JSON parsing) in the listener; enlarge bufferSizeBytes to absorb bursts, or capture from a worker isolate (below).
  • Init ordering. startMixerOutputStream before await SoLoud.instance.init() throws SoLoudNotInitializedException. deinit() auto-stops capture and closes the stream.
  • Filters are baked in. Active global filters (e.g. pitchShiftFilter) apply to the captured output — the capture is post-mix, post-filter.

Capturing from a worker isolate

The engine is a C++ singleton that can only be initialized on the main isolate. For heavy consumers (encoding, network streaming), run the capture loop in a spawned isolate via SoLoudIsolate.instance, which exposes startMixerOutputStream, stopMixerOutputStream, isMixerOutputStreamRunning, getMixerOutputWavHeader, plus readSamplesFromFile/readSamplesFromMem. SoLoudIsolate has no init/deinit, no loading, no playback — those stay on the main isolate.

dart
// Main isolate first:
await SoLoud.instance.init();
// ... then inside the spawned isolate (entry point needs
// @pragma('vm:entry-point')):
final stream = SoLoudIsolate.instance.startMixerOutputStream(
  format: MixerOutputFormat.pcmS16le,
  chunkPCMFrames: 2048,
);
final sub = stream.listen((chunk) { /* encode / send */ });
// on shutdown message:
await sub.cancel();
SoLoudIsolate.instance.stopMixerOutputStream();

SoLoudIsolate is marked @experimental; silence lints with // ignore_for_file: experimental_member_use where needed.

More depth

  • Demo recording the mix to a file with format picker and WAV header patching: example/lib/mixer_capture/mixer_capture.dart in the flutter_soloud repo.
  • Demo of capture in a spawned isolate (including surviving a blocked main isolate): example/lib/mixer_capture/isolate_capture_test.dart.
  • Doc page: docs/advanced/mixer_output_capture.mdx (mixer output capture guide).

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-output-capture of alnitak/flutter_soloud.

Open the folder on GitHubat commit 289697e

Compare with similar skills

Flutter Soloud Output Capture 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 Output Capture compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Flutter Soloud Output Capture this skillalnitak/flutter_soloud425—~2kAutomated safety check: PassMIT
Engine Whats Newflutter/flutter179k—~978Automated safety check: PassBSD-3-Clause
Flutter Cherry Pickflutter/flutter179k—~1.8kAutomated safety check: PassBSD-3-Clause
Upgrade Browserflutter/flutter179k—~1.1kAutomated safety check: PassBSD-3-Clause
Bump Dartflutter/flutter179k—~1.2kAutomated safety check: PassBSD-3-Clause
Run Devicelab With Ledflutter/flutter179k—~786Automated safety check: PassBSD-3-Clause

Similar skills

  • Engine Whats New

    flutter/flutter

    Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).

    179k GitHub stars~978 tokensUpdated today
    MobileAuto-check passed
  • Flutter Cherry Pick

    flutter/flutter

    How to land a formal cherry-pick of a merged PR for the flutter/flutter repo stable or beta channel.

    179k GitHub stars~1.8k tokensUpdated today
    MobileAuto-check passed
  • Upgrade Browser

    flutter/flutter

    Upgrade browser versions (Chrome or Firefox) in the Flutter Web Engine and/or Framework tests.

    179k GitHub stars~1.1k tokensUpdated today
    MobileAuto-check passed
  • Bump Dart

    flutter/flutter

    Do not trigger automatically; only run when a user runs /bump-dart.

    179k GitHub stars~1.2k tokensUpdated today
    MobileAuto-check passed
  • Run Devicelab With Led

    flutter/flutter

    Run DeviceLab tests for Flutter PRs using LUCI's led CLI tool.

    179k GitHub stars~786 tokensUpdated today
    MobileAuto-check passed
  • Shepherd PRs

    flutter/flutter

    Automate shepherding, checking status, updating branches, and landing open PRs or approved third-party contributor PRs in the flutter/flutter repository using the gh CLI.

    179k GitHub stars~1.7k tokensUpdated today
    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 2 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 2 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 2 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 2 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 2 days ago
    Auto-check passed
  • Flutter Soloud 3D Audio

    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.

    425 GitHub stars~2.2k tokensUpdated 2 days ago
    Auto-check passed

Works with

Categories

Questions about Flutter Soloud Output Capture

What does Flutter Soloud Output Capture do?

Teaches how to record the fluttersoloud engine's mixed master output as a Stream<Uint8List (raw PCM or Opus/Vorbis/FLAC/WAV) using startMixerOutputStream/stopMixerOutputStream, including the WAV…. Flutter Soloud Output Capture is an agent skill from alnitak/flutter_soloud. Teaches how to record the fluttersoloud engine's mixed master output as a Stream<Uint8List (raw PCM or Opus/Vorbis/FLAC/WAV) using startMixerOutputStream/stopMixerOutputStream, including the WAV header fix-up and capturing from a worker isolate via SoLoudIsolate.

When should I use Flutter Soloud Output Capture?

Flutter Soloud Output Capture fits situations like: the user wants to record; stream what the app is playing (the final mix; NOT microphone input — fluttersoloud does not capture mic).

How do I install Flutter Soloud Output Capture in Claude Code?

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

How do I install Flutter Soloud Output Capture in Codex?

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

Can I use Flutter Soloud Output Capture 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-output-capture -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-output-capture, .gemini/skills/flutter-soloud-output-capture, .github/skills/flutter-soloud-output-capture and .opencode/skills/flutter-soloud-output-capture in your project.

What does Flutter Soloud Output Capture need to run?

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

Does Flutter Soloud Output Capture access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Flutter Soloud Output Capture 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 Output Capture use?

Flutter Soloud Output Capture 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 Output Capture use?

About 2k tokens (SKILL.md is roughly 7.9k 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 Output Capture?

Skills that share tags, products or a category with Flutter Soloud Output Capture: Engine Whats New (flutter/flutter, 179k stars), Flutter Cherry Pick (flutter/flutter, 179k stars), Upgrade Browser (flutter/flutter, 179k stars) and Bump Dart (flutter/flutter, 179k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Flutter Soloud Output Capture?

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.