Allow players to assign different radio transceivers to different ears (left/right/center). For example: Squad radio plays in left ear, Platoon radio plays in right ear. This helps players distinguish simultaneous transmissions on different channels; a common feature in milsim communities.
**Current Limitation:**
VON audio panning can only be applied globally via AudioSystem.SetVariableByName(). Any variable set this way affects all VON audio equally because it's applied at the bus level after all voice sources are already mixed into a single Stream node.
When two players transmit simultaneously on different frequencies/transceivers, there's no way to pan one voice left and another voice right. Per-source audio properties cannot be set - only global variables exist. See this example code that demonstrates the current implementation
```
// Global variable affects ALL VON audio
override protected event void OnReceive(int playerId, bool isSenderEditor, BaseTransceiver receiver, int frequency, float quality)
{
// This affects every active VON stream, not just this one
AudioSystem.SetVariableByName("EarRouting", 2.0, EAR_ROUTING_CONFIG); // Left ear
super.OnReceive(playerId, isSenderEditor, receiver, frequency, quality);
// This is not an ideal implementation for our use case!
}
```
**In summary...** OnReceive() callback is called after the audio stream is already configured; no per-source/per-transceiver audio properties exist. Panning would need to happen at decode time, before voices are mixed into the Stream
Any of these solutions would be helpful
# Introduce per-source panning at decode, essentially adding a pan property to BaseTransceiver (e.g., SetAudioPan(float)) that the engine reads when creating each voice stream, before mixing
# Pre-receive callback - potentially a function like
```
OnPreReceive(playerId, receiver, out float pan, out float volume)
```
allowing scripts to specify per-stream values before audio creation
# Per-handle variable support - Expose AudioHandle in OnReceive and add AudioSystem.SetVariableByHandle() to modify individual streams