AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified Zlib Self-run

Forge Audio Pool

skill-nebulavenus-forge-gpu-forge-audio-pool · by Nebulavenus

Add fire-and-forget audio playback with a source pool and volume fading for click-free start/stop transitions.

No reviews yet
0 installs
26 views
0.0% view→install

Install

$ agentstack add skill-nebulavenus-forge-gpu-forge-audio-pool

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-nebulavenus-forge-gpu-forge-audio-pool)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
5mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Forge Audio Pool? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

forge-audio-pool

Add fire-and-forget sound effect playback using ForgeAudioPool and smooth volume transitions using the fade envelope on ForgeAudioSource. Based on [Audio Lesson 02](../../../lessons/audio/02-sound-effects/).

When to use

  • Playing the same sound multiple times with overlap (polyphony)
  • One-shot sound effects that should auto-clean-up when finished
  • Starting or stopping sounds without audible clicks (fade-in / fade-out)
  • Ambient loops that toggle smoothly with a volume ramp

Source pool pattern

#include "audio/forge_audio.h"

/* In app_state */
ForgeAudioPool pool;
ForgeAudioBuffer sfx_buffer;

/* In SDL_AppInit */
forge_audio_pool_init(&pool);
forge_audio_load_wav("assets/audio/impact.wav", &sfx_buffer);

/* Fire-and-forget: each call allocates a new slot (up to 32) */
int slot = forge_audio_pool_play(&pool, &sfx_buffer, 1.0f, false);
if (slot = 0) {
    ForgeAudioSource *src = forge_audio_pool_get(&pool, slot);
    forge_audio_source_fade_in(src, 0.3f);
}

/* Update fades on all pool sources each frame */
for (int i = 0; i < FORGE_AUDIO_POOL_MAX_SOURCES; i++) {
    if (pool.sources[i].playing) {
        forge_audio_source_fade_update(&pool.sources[i], dt);
    }
}

Ambient loop with fade toggle

For a single looping source managed outside the pool (direct fade control):

/* In app_state */
ForgeAudioSource ambient;
bool ambient_active;

/* Toggle on key press */
if (ambient_active) {
    forge_audio_source_fade_out(&ambient, fade_duration);
    ambient_active = false;
} else {
    if (!ambient.playing) forge_audio_source_reset(&ambient);
    forge_audio_source_fade_in(&ambient, fade_duration);
    ambient_active = true;
}

Common mistakes

  • Forgetting fade_update — The fade does not advance automatically.

Call forge_audio_source_fade_update(src, dt) once per frame for every source that might be fading.

  • Calling fade_update per mix call — Call it per frame, not per mix

invocation. The rate is in units per second, scaled by dt.

  • Not zeroing the mix bufferforge_audio_pool_mix() is additive.

Always memset(out, 0, ...) before the first mix call each frame.

  • Ignoring pool_play return value — Returns -1 when full. Decide whether

to drop the sound or steal an existing slot.

API reference

| Function | Purpose | |---|---| | forge_audio_pool_init | Zero all 32 slots | | forge_audio_pool_play | Play buffer in first idle slot → index or -1 | | forge_audio_pool_get | Get source pointer at index → ForgeAudioSource* or NULL | | forge_audio_pool_mix | Mix active sources, reclaim finished | | forge_audio_pool_stop_all | Stop everything | | forge_audio_pool_active_count | Count of playing sources | | forge_audio_source_fade | Start fade toward target over duration | | forge_audio_source_fade_in | 0→1 fade, starts playback | | forge_audio_source_fade_out | Current→0 fade, auto-stops | | forge_audio_source_fade_update | Advance fade by dt seconds |

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.