我有一个LV2插件,我想使用Python来提取它的元数据-插件的名称、描述、控件和音频端口的列表以及每个端口的规范。
使用LADSPA,指令非常清晰,尽管在Python语言中实现有点困难:我只需要调用ladspa_descriptor()函数。现在有了LV2,它有一个.ttl文件,访问起来很简单,但解析起来比较复杂。
有没有什么python库可以让这项工作变得简单?
发布于 2012-08-16 08:38:12
LV2文档生成工具使用RDFLib。它可能是Python最流行的RDF接口,尽管它所做的远不止是解析Turtle。如果性能不是问题,但不幸的是速度非常慢,那么这是一个很好的选择。
如果您实际需要实例化和使用插件,那么您可能希望使用现有的LV2实现。正如史蒂夫提到的,Lilv就是为了这个目的。它不限于任何静态默认位置,而是将在LV2_PATH中查找所有位置。在调用Lilv之前,您可以将此环境变量设置为您想要的任何值,它将只在这些位置进行查找。或者,如果您希望一次只加载一个包,可以使用一个函数: lilv_world_load_bundle()。
Lilv中包含了基于SWIG的Python绑定,但它们并没有真正允许您处理数据。然而,有一个包装Lilv的项目允许使用scipy数组处理音频:http://pyslv2.sourceforge.net/ (尽管名称如此,但它们实际上是Lilv绑定,而不是它的前身SLV2的绑定)
也就是说,如果您只需要从Turtle文件中获取静态信息,那么涉及C库可能会带来更多麻烦。使用标准数据文件的最大优点之一是易于与现有工具一起使用。要获得插件上的端口数,只需计算与模式匹配的三元组的数量(plugin,lv2:port,*)。以下是一个输出插件端口数的示例Python脚本,给定要读取的文件和作为命令行参数的插件URI:
#!/usr/bin/env python
import rdflib
import sys
lv2 = rdflib.Namespace('http://lv2plug.in/ns/lv2core#')
path = sys.argv[1]
plugin = rdflib.URIRef(sys.argv[2])
model = rdflib.ConjunctiveGraph()
model.parse(path, format='n3')
num_ports = 0
for i in model.triples(plugin, lv2.port, None]):
num_ports += 1
print('%s has %u ports' % (plugin, num_ports))发布于 2013-01-28 13:54:54
下面是如何获取每个插件支持的端口数:
w = lilv.World()
w.load_all()
for p in w.get_all_plugins():
print p.get_name().as_string(), p.get_num_ports()至少这是我试图弄清楚的全部。
https://stackoverflow.com/questions/11834876
复制相似问题