利用mod host对lv2音频插件进行pythonic管理。
PedalPi-PluginsManager的Python项目详细描述
用mod-host对lv2音频插件进行pythonic管理。
- 文档:
- http://pedalpi-pluginsmanager.readthedocs.io/
- 代码:
- https://github.com/PedalPi/PluginsManager
- python包索引:
- https://pypi.org/project/PedalPi-PluginsManager
- 许可证:
- Apache License 2.0
安装
插件管理器具有在安装库之前必须安装的依赖项。 依赖项包括lv2ls来检查已安装的音频插件 以及PortAudio以获取有关通过PyAudio的音频接口的信息。
在基于debian的系统上,运行:
sudo apt-get install -y portaudio19-dev python-all-dev lilv-utils --no-install-recommends
当然,要让pluginsmanager管理lv2音频插件,必须安装 要管理的音频插件。Guitarix和Calf Studio项目提供了一些音频插件。 要安装它们:
pip install PedalPi-PluginsManager
示例
注意
下载并安装mod-host。有关详细信息,请检查ModHost section。
开始音频处理
# In this example, is starting a Zoom g3 series audio interface jackd -R -P70 -t2000 -dalsa -dhw:Series -p256 -n3 -r44100 -s & mod-host
玩吧!
frompluginsmanager.banks_managerimportBanksManagerfrompluginsmanager.observer.mod_host.mod_hostimportModHostfrompluginsmanager.model.bankimportBankfrompluginsmanager.model.pedalboardimportPedalboardfrompluginsmanager.model.connectionimportConnectionfrompluginsmanager.model.lv2.lv2_effect_builderimportLv2EffectBuilderfrompluginsmanager.model.system.system_effectimportSystemEffect
创建银行
# BanksManager manager the banksmanager=BanksManager()bank=Bank('Bank 1')manager.append(bank)
正在连接mod_主机。mod_主机进程必须已经运行
mod_host=ModHost('localhost')mod_host.connect()manager.register(mod_host)
创建踏板
pedalboard=Pedalboard('Rocksmith')bank.append(pedalboard)# or# bank.pedalboards.append(pedalboard)
装载踏板。踏板的所有更改都在mod_host中复制
mod_host.pedalboard=pedalboard
在踏板上添加效果
builder=Lv2EffectBuilder()reverb=builder.build('http://calf.sourceforge.net/plugins/Reverb')fuzz=builder.build('http://guitarix.sourceforge.net/plugins/gx_fuzz_#fuzz_')reverb2=builder.build('http://calf.sourceforge.net/plugins/Reverb')pedalboard.append(reverb)pedalboard.append(fuzz)pedalboard.append(reverb2)# or# pedalboard.effects.append(reverb2)
对于自动获取声卡输入和输出,请使用systemeffectbuilder。 它需要一个使用JACK-Client的jackclient实例。
frompluginsmanager.jack.jack_clientimportJackClientclient=JackClient()frompluginsmanager.model.system.system_effect_builderimportSystemEffectBuildersys_effect=SystemEffectBuilder(client).build()
对于手动输入和输出声卡定义,请使用:
sys_effect=SystemEffect('system',['capture_1','capture_2'],['playback_1','playback_2'])
注意
不在任何踏板中添加系统效果。
连接:
pedalbaord.connect(sys_effect.outputs[0],reverb.inputs[0])pedalbaord.connect(reverb.outputs[0],fuzz.inputs[0])pedalbaord.connect(reverb.outputs[1],fuzz.inputs[0])pedalbaord.connect(fuzz.outputs[0],reverb2.inputs[0])pedalbaord.connect(reverb.outputs[0],reverb2.inputs[0])pedalbaord.connect(reverb2.outputs[0],sys_effect.inputs[0])pedalbaord.connect(reverb2.outputs[0],sys_effect.inputs[1])
使用ConnectionList:
连接pedalboard.connections.append(Connection(sys_effect.outputs[0],reverb.inputs[0]))pedalboard.connections.append(Connection(reverb.outputs[0],fuzz.inputs[0]))pedalboard.connections.append(Connection(reverb.outputs[1],fuzz.inputs[0]))pedalboard.connections.append(Connection(fuzz.outputs[0],reverb2.inputs[0]))pedalboard.connections.append(Connection(reverb.outputs[0],reverb2.inputs[0]))pedalboard.connections.append(Connection(reverb2.outputs[0],sys_effect.inputs[0]))pedalboard.connections.append(Connection(reverb2.outputs[0],sys_effect.inputs[1]))
设置效果状态(启用/禁用旁路)和参数值
fuzz.toggle()# or# fuzz.active = not fuzz.activefuzz.params[0].value=fuzz.params[0].minimum/fuzz.params[0].maximumfuzz.outputs[0].disconnect(reverb2.inputs[0])# or# pedalboard.connections.remove(Connection(fuzz.outputs[0], reverb2.inputs[0]))# or# index = pedalboard.connections.index(Connection(fuzz.outputs[0], reverb2.inputs[0]))# del pedalboard.connections[index]reverb.toggle()
移除效果和连接:
pedalboard.effects.remove(fuzz)forconnectioninlist(pedalboard.connections):pedalboard.disconnect(connection)# or#pedalboard.connections.remove(connection)foreffectinlist(pedalboard.effects):pedalboard.effects.remove(effect)# or# for index in reversed(range(len(pedalboard.effects))):# del pedalboard.effects[index]
观察者
ModHost是一个观察者(请参见UpdatesObserver)。 它被告知所有的变化 出现在某个模型实例中(BanksManager,Bank, Pedalboard,Effect,Param,…), 允许它透明地与mod-host进程通信。
可以创建观察者!有些想法是:
- Allow the use of other hosts (such as Carla);
- Automatically persist changes;
- Automatically update a human-machine interface (such as LEDs and displays that inform the state of the effects).
如何实施和实施的观察员名单 可以在Observer section中访问库。