Skip to content

Commit

Permalink
#57 - Improve SystemEffectBuilder and JackClient
Browse files Browse the repository at this point in the history
  • Loading branch information
SrMouraSilva committed Oct 15, 2017
1 parent 8e7acb6 commit fe55fd3
Show file tree
Hide file tree
Showing 8 changed files with 88 additions and 29 deletions.
8 changes: 6 additions & 2 deletions CHANGES
Expand Up @@ -2,17 +2,21 @@ Version 0.6.0 -- released ?
**********************************
- Add makefile. Now is possible run tests and generate docs easly (`make help`);
- Improve :class:`SystemInput` and :class:`SystemOutputs` documentation;
- Implementing midi support;
- `Issue #57`_ Implementing midi support;
- Now :class:`Effect` list yours `midi_inputs` and `midi_outputs`;
- :class:`SystemEffect` now supports `midi_inputs` and `midi_outputs`;
- :class:`Lv2Effect` now supports `midi_inputs` and `midi_outputs`;
- Created :class:`MidiPort`, :class:`MidiInput`, :class:`MidiOutput`;
- Created :class:`SystemMidiInput`, :class:`SystemMidiOutput`;
- Created :class:`Lv2MidiInput`, :class:`Lv2MidiOutput`;
- :class:`SystemEffectBuilder` now creates :class:`SystemEffect` with your midi outputs and midi inputs;
- Fix autosaver_test creation folder. Now is more easily configure test workspace;
- Refactored :class:`Input`, :class:`Output`: Created :class:`Port` for remove duplicated code;
- Refactored :class:`SystemInput`, :class:`SystemOutput`: Created :class:`SystemPortMixing` for remove duplicated code;
- Refactored :class:`Lv2Input`, :class:`Lv2Output`: Created :class:`Lv2PortMixing` for remove duplicated code.
- Refactored :class:`Lv2Input`, :class:`Lv2Output`: Created :class:`Lv2PortMixing` for remove duplicated code;
- :class:`JackClient` - Add attributes: `audio_inputs`, `audio_outputs`, `midi_inputs`, `midi_outputs`.

.. _Issue #57: https://github.com/PedalPi/PluginsManager/issues/57

Version 0.5.1 -- released 08/16/17
**********************************
Expand Down
9 changes: 7 additions & 2 deletions makefile
@@ -1,16 +1,21 @@
#https://krzysztofzuraw.com/blog/2016/makefiles-in-python-projects.html
.RECIPEPREFIX +=
BROWSER=firefox

default: run

clean: clean-pyc clean-test
clean: clean-pyc clean-test clean-build

clean-build:
rm -rf .eggs
rm -rf build
rm -rf dist

clean-pyc:
find . -name '*.pyc' -exec rm --force {} +
find . -name '*.pyo' -exec rm --force {} +

clean-test:
rm -f .coverage
rm -rf htmlcov
rm -rf test/autosaver_data

Expand Down
30 changes: 29 additions & 1 deletion pluginsmanager/jack/jack_client.py
Expand Up @@ -62,9 +62,37 @@ def shutdown(status, reason):

self.client.activate()

@property
def audio_inputs(self):
"""
:return: A list of audio input :class:`Ports`.
"""
return self.client.get_ports(is_audio=True, is_physical=True, is_input=True)

@property
def audio_outputs(self):
"""
:return: A list of audio output :class:`Ports`.
"""
return self.client.get_ports(is_audio=True, is_physical=True, is_output=True)

@property
def midi_inputs(self):
"""
:return: A list of MIDI input :class:`Ports`.
"""
return self.client.get_ports(is_midi=True, is_physical=True, is_input=True)

@property
def midi_outputs(self):
"""
:return: A list of MIDI output :class:`Ports`.
"""
return self.client.get_ports(is_midi=True, is_physical=True, is_output=True)

def close(self):
"""
Deactive and closes the jack client
Deactivate and closes the jack client
"""
self.client.deactivate()
self.client.close()
2 changes: 1 addition & 1 deletion pluginsmanager/model/input.py
Expand Up @@ -43,7 +43,7 @@ class Input(Port, metaclass=ABCMeta):
>>> my_awesome_effect.inputs[symbol] == effect_input
True
For connections between effects, view :class:`pluginsmanager.connection.Connection`.
For connections between effects, view :class:`pluginsmanager.model.connection.Connection`.
:param Effect effect: Effect of input
"""
Expand Down
26 changes: 26 additions & 0 deletions pluginsmanager/model/midi_input.py
Expand Up @@ -18,6 +18,32 @@


class MidiInput(MidiPort, metaclass=ABCMeta):
"""
MidiInput is the medium in which the midi input port will go into
effect to be processed.
For obtains the inputs::
>>> cctonode
<Lv2Effect object as 'CC2Note' active at 0x7efe5480af28>
>>> cctonode.midi_inputs
(<Lv2MidiInput object as MIDI In at 0x7efe54535dd8>,)
>>> midi_input = cctonode.midi_inputs[0]
>>> midi_input
<Lv2MidiInput object as MIDI In at 0x7efe54535dd8>
>>> symbol = midi_input.symbol
>>> symbol
'midiin'
>>> cctonode.midi_inputs[symbol] == midi_input
True
For connections between effects, view :class:`pluginsmanager.model.connection.Connection`.
:param Effect effect: Effect of midi input
"""

@property
def index(self):
Expand Down
25 changes: 12 additions & 13 deletions pluginsmanager/model/midi_output.py
Expand Up @@ -20,29 +20,28 @@

class MidiOutput(Port, metaclass=ABCMeta):
"""
Output is the medium in which the audio processed by the effect is returned.
Effects usually have a one (mono) or two outputs (stereo L + stereo R). .
MidiOutput is the medium in which the midi output processed
by the effect is returned.
For obtains the outputs::
>>> my_awesome_effect
<Lv2Effect object as 'Calf Reverb' active at 0x7fd58d874ba8>
>>> my_awesome_effect.outputs
(<Lv2Output object as Out L at 0x7fd58c58a438>, <Lv2Output object as Out R at 0x7fd58c58d550>)
>>> cctonode
<Lv2Effect object as 'CC2Note' active at 0x7efe5480af28>
>>> cctonode.outputs
(<Lv2MidiOutput object as MIDI Out at 0x7efe5420eeb8>,)
>>> output = my_awesome_effect.outputs[0]
>>> output
>>> midi_output = cctonode.midi_outputs[0]
>>> midi_output
<Lv2Output object as Out L at 0x7fd58c58a438>
>>> symbol = my_awesome_effect.outputs[0].symbol
>>> symbol = midi_output.symbol
>>> symbol
'output_l'
'midiout'
>>> my_awesome_effect.outputs[symbol] == output
>>> cctonode.midi_outputs[symbol] == midi_output
True
For connections between effects, view :class:`.pluginsmanager.mod_host.connection.Connection`.
For connections between effects, view :class:`.pluginsmanager.model.connection.Connection`.
:param Effect effect: Effect that contains the output
"""
Expand Down
2 changes: 1 addition & 1 deletion pluginsmanager/model/output.py
Expand Up @@ -42,7 +42,7 @@ class Output(Port, metaclass=ABCMeta):
>>> my_awesome_effect.outputs[symbol] == output
True
For connections between effects, view :class:`.pluginsmanager.mod_host.connection.Connection`.
For connections between effects, view :class:`.pluginsmanager.model.connection.Connection`.
:param Effect effect: Effect that contains the output
"""
Expand Down
15 changes: 6 additions & 9 deletions pluginsmanager/model/system/system_effect_builder.py
Expand Up @@ -15,6 +15,7 @@
from pluginsmanager.model.system.system_effect import SystemEffect



class SystemEffectBuilder(object):
"""
Automatic system physical ports detection
Expand All @@ -26,13 +27,9 @@ def __init__(self, jack_client):
self.client = jack_client

def build(self):
inputs = []
outputs = []

for port in self.client.client.get_ports(is_audio=True, is_physical=True):
if port.is_input:
inputs.append(port.shortname)
else:
outputs.append(port.shortname)
inputs = (port.shortname for port in self.client.audio_inputs)
outputs = (port.shortname for port in self.client.audio_outputs)
midi_inputs = (port.shortname for port in self.client.midi_inputs)
midi_outputs = (port.shortname for port in self.client.midi_outputs)

return SystemEffect('system', tuple(outputs), tuple(inputs))
return SystemEffect('system', outputs, inputs, midi_outputs, midi_inputs)

0 comments on commit fe55fd3

Please sign in to comment.