mixer.proto, 8 services. This is the raw per-parameter control surface — the same one Aura Mixer's own UI drives internally. Prefer the Actions API unless you need something it doesn't cover (individual EQ bands, gate/compressor parameters, output normalization, routing, etc.) — see Overview & Setup for connection and auth details, which apply here identically.
🔒 Every RPC below requires Premium
(Open API itself is a Premium-gated feature), so unlike the app's own UI, you'll never hit a silently-degraded Free-tier value through this surface — everything here runs fully unlocked once you're connected at all.
Every setter returns google.protobuf.Empty — these are fire-and-forget, matching how the app's own UI drives them during a knob drag (no synchronous ack). If you need confirmation a value took, read it back via the corresponding getter where one exists, or via ActionsService.StreamState for mute/solo/fader.
Target IDs (channel_id, output_id, group_id, entity_id) are the same opaque project-local IDs described in the Actions reference — get real ones from StreamState, don't guess.
Deliberately unimplemented
Two RPCs exist in the .proto contract but always return UNIMPLEMENTED — they're internal plumbing, not a control surface:
TransportService.SyncActiveChannels
ChannelsService.UploadHrirPairs
(The four MeteringService.Stream* RPCs are unimplemented too, for a different reason — see Limitations in the overview.)
TransportService — engine lifecycle & status
| RPC | Request | Response | Notes |
Start | Empty | Empty | Starts the audio engine (WASAPI capture + render). |
Stop | Empty | Empty | Stops the audio engine. |
Refresh | Empty | Empty | Re-syncs DSP nodes with the current channel/output list. Rarely needed from outside the app. |
ApplySettings | render_device_id (string) | Empty | Sets the render (output) device. Empty string = system default. |
GetStatus | Empty | EngineStatus | is_running, frame_count, sample_rate, dsp_cpu_percent, capture_overruns, render_underruns. |
ResetDiagnosticCounters | Empty | Empty | Zeroes capture_overruns/render_underruns. |
StreamRunState | Empty | stream RunStateEvent{is_running} | Pushes on every start/stop transition; primed with the current state on connect. |
DevicesService — enumeration + live-change stream
| RPC | Request | Response | Notes |
GetCaptureDevices | Empty | DeviceList{devices: [{id, friendly_name}]} | Microphones, loopback, and virtual capture endpoints. |
GetRenderDevices | Empty | DeviceList (same shape) | Speakers/headphones/virtual render endpoints. |
GetActiveAudioProcesses | Empty | ProcessList{processes: [{process_id, process_name, display_name}]} | Processes currently producing audio — the app-loopback picker's data source. |
DetectDeviceChannels | device_id (string) | DeviceChannelInfo{channels, mask} | Native channel count + WASAPI channel mask for a device. |
StreamDeviceEvents | Empty | stream DeviceEvent{kind} | kind is DEVICE_LIST_CHANGED or APP_LOOPBACK_PROCESSES_CHANGED — re-query the relevant list above when either fires. |
ChannelsService — per-channel setters + reads
| RPC | Request | Response | Notes |
SetFader | channel_id, db | Empty | |
SetInputGain | channel_id, db | Empty | Input trim. |
SetPad | channel_id, value (bool) | Empty | −20 dB pad. |
SetPan | channel_id, value (float) | Empty | Range [-100, 100]. |
SetGateParam | channel_id, key, value | Empty | key: thresh/damping/hyst/atk/hold/rel. |
SetCompParam | channel_id, key, value | Empty | key: thresh/ratio/knee/makeup/mix/atk/rel. |
SetFxInsertParam | channel_id, insert_id, key, value | Empty | FX insert rack (reverb, delay, etc.) — insert_id identifies the specific insert instance on that channel. |
SetSpeakerGains | channel_id, gains (repeated float) | Empty | Per-speaker HRTF-fold trim; length-8 array, unused indices ignored. |
SetTrebleSoften | channel_id, value (dB) | Empty | Binaural treble-shelf gain for HRTF channels; negative = cut. |
SetStereoSpatial | channel_id, width, haas_ms, ms_ratio | Empty | |
SetPointSource | channel_id, azimuth, elevation, distance, attenuation | Empty | azimuth in [-180, 180]° (positive = right), distance in metres ≥ 0.1. |
GetCaptureModeInfo | channel_id | CaptureModeInfo{mode} | mode: exclusive/shared-fallback/shared/loopback/apploop/none. |
GetCaptureSampleRate | channel_id | SampleRateInfo{sample_rate} | Native device sample rate; ≠ 48000 means Windows is resampling the input. |
GetAppLoopbackStatus | channel_id | AppLoopbackStatus{present, attached, process_id} | present: false means the channel isn't an app-loopback channel or the engine is stopped. |
BusesService — output-bus setters + monitor gain
| RPC | Request | Response | Notes |
SetOutputFader | output_id, db | Empty | |
SetOutputGain | output_id, db | Empty | Pre-EQ output trim. |
SetOutputMute | output_id, value (bool) | Empty | |
SetOutputDelay | output_id, ms, enabled | Empty | ms clamped to [0, 500]. |
SetOutputLimParam | output_id, key, value | Empty | key: ceiling/release. |
SetOutputNormalizationEnabled | output_id, value (bool) | Empty | LUFS loudness normalization. |
SetOutputNormalizationTarget | output_id, value (target LUFS) | Empty | |
SetOutputNormalizationHeadroom | output_id, value (dBTP) | Empty | |
GetOutputNormalizationGainDb | output_id | FloatValue{value} | Current normalizer gain being applied, e.g. for a "Δ +3.2 dB" readout. |
SetOutputDrift | output_id, mode, manual_ppm | Empty | mode: auto/manual. |
ApplyBusOutput | output_id, device_id | Empty | Assigns the physical WASAPI device this bus renders to. Empty device_id clears the assignment (bus becomes virtual-only). |
SetBusProcessOutput | output_id, device_id, bus_name, enabled | Empty | Enables the hidden per-bus "process output" child process (for OBS/Discord app-capture without a virtual cable). |
SetMonitorGain | value (float) | Empty | Global monitor output gain — not per-bus, no output_id. |
RoutingService — sends, bus-to-bus, VCA
| RPC | Request | Response | Notes |
SetSendDb | channel_id, output_id, db | Empty | Channel→bus send level. |
SetBusRouteDb | src_id, dst_id, db | Empty | Bus→bus routing level. |
SetVcaGain | group_id, db | Empty | Currently a no-op — VCA group membership isn't wired up in the out-of-process engine yet. Present in the contract for forward-compatibility; don't rely on it doing anything right now. |
EqService — shared EQ surface (channel or bus)
| RPC | Request | Response | Notes |
SetEqBand | entity_id, band_index, type, hz, gain, q, band_enabled, eq_enabled | Empty | entity_id is any channel or output-bus id — same EQ node type either way. type: peak/hi_shelf/lo_shelf/hpf/lpf/notch. |
MeteringService — point queries
Point-in-time reads only — see Limitations for why the streaming variants (StreamLevels/StreamLufs/StreamGr/StreamSpectrum) aren't available.
| RPC | Request | Response | Notes |
GetChannelLufs | channel_id | LufsReadout | momentary, short_term, integrated, true_peak_dbtp, loudness_range_lu. All -∞ when silent/stopped. |
GetOutputBusLufs | output_id | LufsReadout | |
GetMainBusLufs | Empty | LufsReadout | |
ResetChannelLufsIntegrated | channel_id | Empty | |
ResetOutputBusLufsIntegrated | output_id | Empty | |
ResetMainBusLufsIntegrated | Empty | Empty | |
GetChannelGr | channel_id | ChannelGrReadout{gate_level_db, gate_gr_db, comp_level_db, comp_gr_db} | Gate/compressor level + gain-reduction. -80/0 when stopped or unknown. |
GetOutputGr | output_id | OutputGrReadout{level_db, lim_gr_db} | Bus level + limiter gain-reduction. |
GetOutputLatencyMetrics | Empty | LatencyMetrics{jitter_us, hw_ms, buf_ms} | All 0 when the engine is stopped. |
DiagnosticsService — reliability signal stream
| RPC | Request | Response | Notes |
StreamSignals | Empty | stream DiagnosticSignal{type, count, detail} | Out-of-band reliability events — type examples: engine_start_fail, exclusive_denied, hotswap_recovered. detail carries sanitized tokens only, never device names. Useful for surfacing engine health in your own UI. |