| name | audio-systems |
| version | 2.0.0 |
| description | Game audio systems, music, spatial audio, sound effects, and voice implementation.
Build immersive audio experiences with professional middleware integration.
|
| sasmp_version | 1.3.0 |
| bonded_agent | 04-audio-sound-design |
| bond_type | PRIMARY_BOND |
| parameters | [{"name":"middleware","type":"string","required":false,"validation":{"enum":["wwise","fmod","unity_audio","unreal_audio","custom"]}},{"name":"audio_type","type":"string","required":false,"validation":{"enum":["sfx","music","voice","ambient","ui"]}}] |
| retry_policy | {"enabled":true,"max_attempts":3,"backoff":"exponential"} |
| observability | {"log_events":["start","complete","error"],"metrics":["active_voices","cpu_usage","memory_usage"]} |
Audio & Sound Systems
Audio Architecture
┌─────────────────────────────────────────────────────────────┐
│ GAME AUDIO PIPELINE │
├─────────────────────────────────────────────────────────────┤
│ SOURCES: SFX | Music | Voice | Ambient │
│ ↓ │
│ MIDDLEWARE: Wwise / FMOD / Engine Audio │
│ ↓ │
│ PROCESSING: 3D Spatial | Reverb | EQ | Compression │
│ ↓ │
│ MIXING: Master → Submixes → Individual Tracks │
│ ↓ │
│ OUTPUT: Speakers / Headphones (Stereo/Surround/Binaural) │
└─────────────────────────────────────────────────────────────┘
Audio Programming
Unity Audio Manager
public class AudioManager : MonoBehaviour
{
public static AudioManager Instance { get; private set; }
[System.Serializable]
public class SoundBank
{
public string id;
public AudioClip[] clips;
[Range(0f, 1f)] public float volume = 1f;
[Range(0.1f, 3f)] public float pitchVariation = 0.1f;
}
[SerializeField] private SoundBank[] _soundBanks;
[SerializeField] private int _poolSize = 20;
private Dictionary<string, SoundBank> _bankLookup;
Queue<AudioSource> _sourcePool;
{
(Instance != ) { Destroy(gameObject); ; }
Instance = ;
DontDestroyOnLoad(gameObject);
InitializePool();
BuildLookup();
}
{
(!_bankLookup.TryGetValue(id, bank)) ;
(bank.clips.Length == ) ;
source = GetPooledSource();
source.transform.position = position;
source.clip = bank.clips[Random.Range(, bank.clips.Length)];
source.volume = bank.volume;
source.pitch = + Random.Range(-bank.pitchVariation, bank.pitchVariation);
source.Play();
StartCoroutine(ReturnToPool(source, source.clip.length));
}
{
(_sourcePool.Count > ) _sourcePool.Dequeue();
CreateNewSource();
}
{ }
{ }
{ }
{ }
}