The app consists of two binraries: a front end tauri app (aka rust and react) and a backend c++ daemon. The c++ daemon is responsible for actually creating the virtual mic and running when the front end app closes. The two binaries interact with JSON-RPC 2.0 over a unix socket (where only on linux right now). The "over the wire" protocol is just json messages terminated with newlines.
I'll describe the various methods the backend server supports.
Get's status of native engine; checks if it is ready to do everything else
(ie. it has initialized whatever it needs to initialize). Returns True
if read
False
otherwise.
Get's available microphones to listen on. Returns an object like
{
"list": [{
"id": int,
"name": string,
}],
"cur": string,
}
where list is the list of available listening devices with an integer id and a
display name. cur
is the name of the currently active device.
Sets the microphone to use. Takes an integer parameter corresponding to the id
recieved from getMicrophones
. Returns a boolean corresponding to whether the
operation succeeded.
Starts/stops removing noise. Takes a bool corresponding to whether or not to denoise. No return value.
starts/stops loopback. Takes a bool corresponding to whether or not to start the loopback.
Returns a list of audio processor options
"list": [
"name": string
],
"cur": int index in list of current
Takes an int index of the processor to set.