mirror of
https://github.com/onyx-and-iris/xair-api-python.git
synced 2026-04-18 13:33:31 +00:00
initial commit
initial commit
This commit is contained in:
262
README.md
Normal file
262
README.md
Normal file
@@ -0,0 +1,262 @@
|
||||
[](https://github.com/onyx-and-iris/xair-api-python/blob/dev/LICENSE)
|
||||
[](https://github.com/psf/black)
|
||||
# Mair Remote
|
||||
|
||||
This package offers a python interface to the Midas MR18 digital rack mixer.
|
||||
All testing was done using a Midas MR18 but I've been informed that the software for XR18 is identical.
|
||||
Midas are not affiliated with/nor do they support this package in any way.
|
||||
|
||||
## Prerequisites
|
||||
- Python 3.9+
|
||||
|
||||
## Installation
|
||||
```
|
||||
git clone https://github.com/onyx-and-iris/mair-api-python
|
||||
cd mair-api-python
|
||||
```
|
||||
|
||||
Just the interface:
|
||||
```
|
||||
pip install .
|
||||
```
|
||||
|
||||
With development dependencies:
|
||||
```
|
||||
pip install -e .['development']
|
||||
```
|
||||
|
||||
## Usage
|
||||
### Connection
|
||||
An ini file named config.ini, placed into the current working directory of your code may be used to configure the mixers ip. It's contents should resemble:
|
||||
```
|
||||
[connection]
|
||||
ip=<ip address>
|
||||
```
|
||||
Alternatively you may state it explicitly as an argument to mair.connect()
|
||||
|
||||
### Example 1
|
||||
```python
|
||||
import mair
|
||||
|
||||
def main():
|
||||
with mair.connect(kind_id, ip=ip) as mixer:
|
||||
mixer.strip[8].config.name = 'sm7b'
|
||||
mixer.strip[8].config.on = True
|
||||
print(f'strip 09 ({mixer.strip[8].config.name}) has been set to {mixer.strip[8].config.on}')
|
||||
|
||||
if __name__ == '__main__':
|
||||
kind_id = 'MR18'
|
||||
ip = '<ip address>'
|
||||
|
||||
main()
|
||||
```
|
||||
|
||||
## API
|
||||
Currently the following devices are support:
|
||||
- `XR18`
|
||||
- `MR18`
|
||||
|
||||
However, this interface can be expanded upon to support other devices.
|
||||
|
||||
### MAirRemote (higher level)
|
||||
`mixer.lr`
|
||||
|
||||
A class representing Main LR channel
|
||||
|
||||
`mixer.strip`
|
||||
|
||||
A Strip tuple containing a class for each input strip channel
|
||||
|
||||
`mixer.bus`
|
||||
|
||||
A Bus tuple containing a class for each output bus channel
|
||||
|
||||
`mixer.dca`
|
||||
|
||||
A DCA tuple containing a class for each DCA group
|
||||
|
||||
`mixer.fxsend`
|
||||
|
||||
An FXSend tuple containing a class for each FX Send channel
|
||||
|
||||
`mixer.fxreturn`
|
||||
|
||||
An FXReturn tuple containing a class for each FX Return channel
|
||||
|
||||
`mixer.aux`
|
||||
|
||||
A class representing aux channel
|
||||
|
||||
`mixer.rtn`
|
||||
|
||||
An RTN tuple containing a class for each rtn channel
|
||||
|
||||
`mixer.config`
|
||||
|
||||
A class representing the main config settings
|
||||
|
||||
|
||||
### `LR`
|
||||
Contains the subclasses:
|
||||
(`Config`, `Dyn`, `Insert`, `EQ`, `Mix`)
|
||||
|
||||
### `Strip`
|
||||
Contains the subclasses:
|
||||
(`Config`, `Preamp`, `Gate`, `Dyn`, `Insert`, `GEQ`, `EQ`, `Mix`, `Group`, `Automix`)
|
||||
|
||||
### `Bus`
|
||||
Contains the subclasses:
|
||||
(`Config`, `Dyn`, `Insert`, `EQ`, `Mix`, `Group`)
|
||||
|
||||
### `FXSend`
|
||||
Contains the subclasses:
|
||||
(`Config`, `Mix`, `Group`)
|
||||
|
||||
### `Aux`
|
||||
Contains the subclasses:
|
||||
(`Config`, `Preamp`, `EQ`, `Mix`, `Group`)
|
||||
|
||||
### `Rtn`
|
||||
Contains the subclasses:
|
||||
(`Config`, `Preamp`, `EQ`, `Mix`, `Group`)
|
||||
|
||||
|
||||
### `Subclasses`
|
||||
For each subclass the corresponding properties are available.
|
||||
|
||||
`Config`
|
||||
- `name`: string
|
||||
- `color`: int, from 0, 16
|
||||
- `inputsource`: int
|
||||
- `usbreturn`: int
|
||||
|
||||
`Preamp`
|
||||
- `on`: bool
|
||||
- `usbtrim`: float, from -18.0 to 18.0
|
||||
- `usbinput`: bool
|
||||
- `invert`: bool
|
||||
- `highpasson`: bool
|
||||
- `highpassfilter`: int, from 20 to 400
|
||||
|
||||
`Gate`
|
||||
- `on`: bool
|
||||
- `mode`: str, one of ('gate', 'exp2', 'exp3', 'exp4', 'duck')
|
||||
- `threshold`: float, from -80.0 to 0.0
|
||||
- `range`: int, from 3 to 60
|
||||
- `attack`: int, from 0 to 120
|
||||
- `hold`: float, from 0.02 to 2000
|
||||
- `release`: int, from 5 to 4000
|
||||
- `keysource`, from 0 to 22
|
||||
- `filteron`: bool
|
||||
- `filtertype`: int, from 0 to 8
|
||||
- `filterfreq`: float, from 20 to 20000
|
||||
|
||||
`Dyn`
|
||||
- `on`: bool
|
||||
- `mode`: str, one of ('comp', 'exp')
|
||||
- `det`: str, one of ('peak', 'rms')
|
||||
- `env`: str, one of ('lin', 'log')
|
||||
- `threshold`: float, from -60.0 to 0.0
|
||||
- `ratio`: int, from 0 to 11
|
||||
- `knee`: int, from 0 to 5
|
||||
- `mgain`: float, from 0.0 to 24.0
|
||||
- `attack`: int, from 0 to 120
|
||||
- `hold`: float, from 0.02 to 2000
|
||||
- `release`: int, from 5 to 4000
|
||||
- `mix`: int, from 0 to 100
|
||||
- `keysource`: int, from 0 to 22
|
||||
- `auto`: bool
|
||||
- `filteron`: bool
|
||||
- `filtertype`: int, from 0 to 8
|
||||
- `filterfreq`: float, from 20 to 20000
|
||||
|
||||
`Insert`
|
||||
- `on`: bool
|
||||
- `sel`: int
|
||||
|
||||
`GEQ`
|
||||
The following method names preceded by `slider_`
|
||||
- `20`, `25`, `31_5`, `40`, `50`, `63`, `80`, `100`, `125`, `160`,
|
||||
- `200`, `250`, `315`, `400`, `500`, `630`, `800`, `1k`, `1k25`, `1k6`, `2k`,
|
||||
- `2k5`, `3k15`, `4k`, `5k`, `6k3`, `8k`, `10k`, `12k5`, `16k`, `20k`: float, from -15.0 to 15.0
|
||||
|
||||
for example: `slider_20`, `slider_6k3` etc..
|
||||
|
||||
`EQ`
|
||||
- `on`: bool
|
||||
- `mode`: str, one of ('peq', 'geq', 'teq')
|
||||
|
||||
For the subclasses: `low`, `low2`, `lomid`, `himid`, `high2`, `high` the following properties are available:
|
||||
- `type`: int, from 0 to 5
|
||||
- `frequency`: float, from 20.0 to 20000.0
|
||||
- `gain`: float, -15.0 to 15.0
|
||||
- `quality`: float, from 0.3 to 10.0
|
||||
|
||||
for example: `eq.low2.type`
|
||||
|
||||
`Mix`
|
||||
- `on`: bool
|
||||
- `fader`: float, -inf, to 10.0
|
||||
- `lr`: bool
|
||||
|
||||
`Group`
|
||||
- `dca`: int, from 0 to 15
|
||||
- `mute`: int, from 0 to 15
|
||||
|
||||
`Automix`
|
||||
- `group`: int, from 0 to 2
|
||||
- `weight`: float, from -12.0 to 12.0
|
||||
|
||||
|
||||
### `DCA`
|
||||
- `on`: bool
|
||||
- `name`: str
|
||||
- `color`: int, from 0 to 15
|
||||
|
||||
|
||||
### `Config`
|
||||
The following method names preceded by `chlink`
|
||||
- `1_2`, `3_4`, `5_6`, `7_8`, `9_10`, `11_12`, `13_14`, `15_16`
|
||||
|
||||
The following method names preceded by `buslink`
|
||||
- `1_2`, `3_4`, `5_6`
|
||||
|
||||
for example: `chlink1_2`, `buslink5_6` etc..
|
||||
|
||||
- `link_eq`: bool
|
||||
- `link_dyn`: bool
|
||||
- `link_fader_mute`: bool
|
||||
- `amixenable`: bool
|
||||
- `amixlock`: bool
|
||||
- `mute_group`: bool
|
||||
|
||||
For the subclass `monitor` the following properties are available
|
||||
- `level`: float, -inf to 10.0
|
||||
- `source`: int, from 0 to 14
|
||||
- `chmode` bool
|
||||
- `busmode` bool
|
||||
- `dim` bool
|
||||
- `mono` bool
|
||||
- `mute` bool
|
||||
- `dimfpl` bool
|
||||
|
||||
for example: `config.monitor.chmode`
|
||||
|
||||
|
||||
### `Tests`
|
||||
First make sure you installed the [development dependencies](https://github.com/onyx-and-iris/mair-api-python#installation)
|
||||
|
||||
To run the tests from tests directory:
|
||||
|
||||
WARNING: First save your settings and make sure your equipment is safe from damage.
|
||||
Run tests at your own risk.
|
||||
|
||||
`nosetests --r test -v`.
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details
|
||||
|
||||
## Special Thanks
|
||||
|
||||
Peter Dikant for writing the base class
|
||||
Reference in New Issue
Block a user