mirror of
https://github.com/onyx-and-iris/voicemeeter-api-python.git
synced 2025-08-07 03:21:53 +00:00
Compare commits
4 Commits
15f0fcda69
...
3d56ba99b6
Author | SHA1 | Date | |
---|---|---|---|
3d56ba99b6 | |||
58ec875521 | |||
4c6ec6d989 | |||
feb6ee5821 |
@ -11,10 +11,13 @@ Before any major/minor/patch bump all unit tests will be run to verify they pass
|
|||||||
|
|
||||||
- [x]
|
- [x]
|
||||||
|
|
||||||
## [2.7.0] - 2025-06-15
|
## [2.7.1] - 2025-06-15
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
- Strip.EQ Channel Cell commands added, see [Strip.EQ.Channel.Cell](https://github.com/onyx-and-iris/voicemeeter-api-python?tab=readme-ov-file#stripeqchannelcell)
|
||||||
|
- They are only available for potato version.
|
||||||
|
|
||||||
- Bus.EQ Channel Cell commands added, see [Bus.EQ.Channel.Cell](https://github.com/onyx-and-iris/voicemeeter-api-python?tab=readme-ov-file#buseqchannelcell).
|
- Bus.EQ Channel Cell commands added, see [Bus.EQ.Channel.Cell](https://github.com/onyx-and-iris/voicemeeter-api-python?tab=readme-ov-file#buseqchannelcell).
|
||||||
- Added by [PR #16](https://github.com/onyx-and-iris/voicemeeter-api-python/pull/16)
|
- Added by [PR #16](https://github.com/onyx-and-iris/voicemeeter-api-python/pull/16)
|
||||||
|
|
||||||
|
27
README.md
27
README.md
@ -225,6 +225,24 @@ example:
|
|||||||
vm.strip[0].eq.ab = True
|
vm.strip[0].eq.ab = True
|
||||||
```
|
```
|
||||||
|
|
||||||
|
##### Strip.EQ.Channel.Cell
|
||||||
|
|
||||||
|
The following properties are available.
|
||||||
|
|
||||||
|
- `on`: boolean
|
||||||
|
- `type`: int, from 0 up to 6
|
||||||
|
- `f`: float, from 20.0 up to 20_000.0
|
||||||
|
- `gain`: float, from -36.0 up to 18.0
|
||||||
|
- currently there is a bug with the remote API, only values -12 up to +12 are settable, this will be fixed in an upcoming patch.
|
||||||
|
- `q`: float, from 0.3 up to 100
|
||||||
|
|
||||||
|
example:
|
||||||
|
|
||||||
|
```python
|
||||||
|
vm.strip[0].eq.channel[0].cell[2].on = True
|
||||||
|
vm.strip[1].eq.channel[0].cell[2].f = 5000
|
||||||
|
```
|
||||||
|
|
||||||
Strip EQ parameters are defined for PhysicalStrips, potato version only.
|
Strip EQ parameters are defined for PhysicalStrips, potato version only.
|
||||||
|
|
||||||
##### Strip.Gainlayers
|
##### Strip.Gainlayers
|
||||||
@ -297,10 +315,11 @@ vm.bus[3].eq.on = True
|
|||||||
The following properties are available.
|
The following properties are available.
|
||||||
|
|
||||||
- `on`: boolean
|
- `on`: boolean
|
||||||
- `type`: int
|
- `type`: int, from 0 up to 6
|
||||||
- `f`: float
|
- `f`: float, from 20.0 up to 20_000.0
|
||||||
- `gain`: float
|
- `gain`: float, from -36.0 up to 18.0
|
||||||
- `q`: quality
|
- currently there is a bug with the remote API, only values -12 up to +12 are settable, this will be fixed in an upcoming patch.
|
||||||
|
- `q`: float, from 0.3 up to 100.0
|
||||||
|
|
||||||
example:
|
example:
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "voicemeeter-api"
|
name = "voicemeeter-api"
|
||||||
version = "2.7.0"
|
version = "2.7.1"
|
||||||
description = "A Python wrapper for the Voiceemeter API"
|
description = "A Python wrapper for the Voiceemeter API"
|
||||||
authors = [
|
authors = [
|
||||||
{name = "Onyx and Iris",email = "code@onyxandiris.online"}
|
{name = "Onyx and Iris",email = "code@onyxandiris.online"}
|
||||||
|
@ -95,13 +95,12 @@ class BusEQ(IRemote):
|
|||||||
|
|
||||||
Returns a BusEQ class.
|
Returns a BusEQ class.
|
||||||
"""
|
"""
|
||||||
kls = (cls,)
|
|
||||||
BusEQ_cls = type(
|
BusEQ_cls = type(
|
||||||
'BusEQ',
|
'BusEQ',
|
||||||
kls,
|
(cls,),
|
||||||
{
|
{
|
||||||
'channel': tuple(
|
'channel': tuple(
|
||||||
BusEQCh.make(remote, i, j) for j in range(remote.kind.channels)
|
BusEQCh.make(remote, i, j) for j in range(remote.kind.bus_channels)
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -136,10 +135,9 @@ class BusEQCh(IRemote):
|
|||||||
|
|
||||||
Returns a BusEQCh class.
|
Returns a BusEQCh class.
|
||||||
"""
|
"""
|
||||||
kls = (cls,)
|
|
||||||
BusEQCh_cls = type(
|
BusEQCh_cls = type(
|
||||||
'BusEQCh',
|
'BusEQCh',
|
||||||
kls,
|
(cls,),
|
||||||
{
|
{
|
||||||
'cell': tuple(
|
'cell': tuple(
|
||||||
BusEQChCell(remote, i, j, k) for k in range(remote.kind.cells)
|
BusEQChCell(remote, i, j, k) for k in range(remote.kind.cells)
|
||||||
|
@ -31,7 +31,8 @@ class KindMapClass(metaclass=SingletonType):
|
|||||||
asio: tuple
|
asio: tuple
|
||||||
insert: int
|
insert: int
|
||||||
composite: int
|
composite: int
|
||||||
channels: int
|
strip_channels: int
|
||||||
|
bus_channels: int
|
||||||
cells: int
|
cells: int
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -78,7 +79,8 @@ class BasicMap(KindMapClass):
|
|||||||
asio: tuple = (0, 0)
|
asio: tuple = (0, 0)
|
||||||
insert: int = 0
|
insert: int = 0
|
||||||
composite: int = 0
|
composite: int = 0
|
||||||
channels: int = 0
|
strip_channels: int = 0
|
||||||
|
bus_channels: int = 0
|
||||||
cells: int = 0
|
cells: int = 0
|
||||||
|
|
||||||
|
|
||||||
@ -90,7 +92,8 @@ class BananaMap(KindMapClass):
|
|||||||
asio: tuple = (6, 8)
|
asio: tuple = (6, 8)
|
||||||
insert: int = 22
|
insert: int = 22
|
||||||
composite: int = 8
|
composite: int = 8
|
||||||
channels: int = 8
|
strip_channels: int = 0
|
||||||
|
bus_channels: int = 8
|
||||||
cells: int = 6
|
cells: int = 6
|
||||||
|
|
||||||
|
|
||||||
@ -102,7 +105,8 @@ class PotatoMap(KindMapClass):
|
|||||||
asio: tuple = (10, 8)
|
asio: tuple = (10, 8)
|
||||||
insert: int = 34
|
insert: int = 34
|
||||||
composite: int = 8
|
composite: int = 8
|
||||||
channels: int = 8
|
strip_channels: int = 2
|
||||||
|
bus_channels: int = 8
|
||||||
cells: int = 6
|
cells: int = 6
|
||||||
|
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ class PhysicalStrip(Strip):
|
|||||||
'comp': StripComp(remote, i),
|
'comp': StripComp(remote, i),
|
||||||
'gate': StripGate(remote, i),
|
'gate': StripGate(remote, i),
|
||||||
'denoiser': StripDenoiser(remote, i),
|
'denoiser': StripDenoiser(remote, i),
|
||||||
'eq': StripEQ(remote, i),
|
'eq': StripEQ.make(remote, i),
|
||||||
'device': StripDevice.make(remote, i),
|
'device': StripDevice.make(remote, i),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -268,6 +268,25 @@ class StripDenoiser(IRemote):
|
|||||||
|
|
||||||
|
|
||||||
class StripEQ(IRemote):
|
class StripEQ(IRemote):
|
||||||
|
@classmethod
|
||||||
|
def make(cls, remote, i):
|
||||||
|
"""
|
||||||
|
Factory method for Strip EQ.
|
||||||
|
|
||||||
|
Returns a StripEQ class.
|
||||||
|
"""
|
||||||
|
STRIPEQ_cls = type(
|
||||||
|
'StripEQ',
|
||||||
|
(cls,),
|
||||||
|
{
|
||||||
|
'channel': tuple(
|
||||||
|
StripEQCh.make(remote, i, j)
|
||||||
|
for j in range(remote.kind.strip_channels)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
return STRIPEQ_cls(remote, i)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def identifier(self) -> str:
|
def identifier(self) -> str:
|
||||||
return f'Strip[{self.index}].eq'
|
return f'Strip[{self.index}].eq'
|
||||||
@ -289,6 +308,85 @@ class StripEQ(IRemote):
|
|||||||
self.setter('ab', 1 if val else 0)
|
self.setter('ab', 1 if val else 0)
|
||||||
|
|
||||||
|
|
||||||
|
class StripEQCh(IRemote):
|
||||||
|
@classmethod
|
||||||
|
def make(cls, remote, i, j):
|
||||||
|
"""
|
||||||
|
Factory method for Strip EQ channel.
|
||||||
|
|
||||||
|
Returns a StripEQCh class.
|
||||||
|
"""
|
||||||
|
StripEQCh_cls = type(
|
||||||
|
'StripEQCh',
|
||||||
|
(cls,),
|
||||||
|
{
|
||||||
|
'cell': tuple(
|
||||||
|
StripEQChCell(remote, i, j, k) for k in range(remote.kind.cells)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
return StripEQCh_cls(remote, i, j)
|
||||||
|
|
||||||
|
def __init__(self, remote, i, j):
|
||||||
|
super().__init__(remote, i)
|
||||||
|
self.channel_index = j
|
||||||
|
|
||||||
|
@property
|
||||||
|
def identifier(self) -> str:
|
||||||
|
return f'Strip[{self.index}].eq.channel[{self.channel_index}]'
|
||||||
|
|
||||||
|
|
||||||
|
class StripEQChCell(IRemote):
|
||||||
|
def __init__(self, remote, i, j, k):
|
||||||
|
super().__init__(remote, i)
|
||||||
|
self.channel_index = j
|
||||||
|
self.cell_index = k
|
||||||
|
|
||||||
|
@property
|
||||||
|
def identifier(self) -> str:
|
||||||
|
return f'Strip[{self.index}].eq.channel[{self.channel_index}].cell[{self.cell_index}]'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def on(self) -> bool:
|
||||||
|
return self.getter('on') == 1
|
||||||
|
|
||||||
|
@on.setter
|
||||||
|
def on(self, val: bool):
|
||||||
|
self.setter('on', 1 if val else 0)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def type(self) -> int:
|
||||||
|
return int(self.getter('type'))
|
||||||
|
|
||||||
|
@type.setter
|
||||||
|
def type(self, val: int):
|
||||||
|
self.setter('type', val)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def f(self) -> float:
|
||||||
|
return round(self.getter('f'), 1)
|
||||||
|
|
||||||
|
@f.setter
|
||||||
|
def f(self, val: float):
|
||||||
|
self.setter('f', val)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def gain(self) -> float:
|
||||||
|
return round(self.getter('gain'), 1)
|
||||||
|
|
||||||
|
@gain.setter
|
||||||
|
def gain(self, val: float):
|
||||||
|
self.setter('gain', val)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def q(self) -> float:
|
||||||
|
return round(self.getter('q'), 1)
|
||||||
|
|
||||||
|
@q.setter
|
||||||
|
def q(self, val: float):
|
||||||
|
self.setter('q', val)
|
||||||
|
|
||||||
|
|
||||||
class StripDevice(IRemote):
|
class StripDevice(IRemote):
|
||||||
@classmethod
|
@classmethod
|
||||||
def make(cls, remote, i):
|
def make(cls, remote, i):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user