[英]How to read LV2 ttl file in Python?
我有一個LV2插件,我想使用Python提取其元數據-插件名稱,描述,控制和音頻端口列表以及每個端口的規范。
使用LADSPA時,指令非常清晰,盡管很難在Python中實現:我只需要調用ladspa_descriptor()函數。 現在有了LV2,有了.ttl文件,該文件易於訪問,但解析起來更復雜。
有沒有可以簡化此工作的python庫?
LV2文檔生成工具使用RDFLib。 它可能是Python最受歡迎的RDF接口,盡管它不僅解析Turtle,還可以做更多的事情。 如果性能不是問題,但不幸的是速度確實很慢,這是一個不錯的選擇。
如果您需要實際實例化和使用插件,則可能要使用現有的LV2實現。 正如史蒂夫(Steve) 所言 , 利爾夫(Lilv )為此。 它不限於任何靜態默認位置,而是會在LV2_PATH中的所有位置中查找。 您可以在調用Lilv之前將此環境變量設置為所需的變量,並且該變量只會在那些位置出現。 另外,如果您想一次只加載一個捆綁軟件,則可以使用一個函數:lilv_world_load_bundle()。
Lilv包含了基於SWIG的Python綁定,但實際上並不允許您處理數據。 但是,有一個包裝Lilv的項目允許使用scipy數組處理音頻: http ://pyslv2.sourceforge.net/(盡管名稱確實是Lilv綁定,而不是其前身SLV2的綁定)
就是說,如果您只需要從Turtle文件中獲取靜態信息,那么涉及C庫可能比它值得的麻煩更多。 使用標准數據文件的一大優勢是易於使用現有工具。 要獲得插件上的端口數,您只需要計算與模式(插件,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))
這是如何獲取每個插件支持的端口數的方法:
w = lilv.World()
w.load_all()
for p in w.get_all_plugins():
print p.get_name().as_string(), p.get_num_ports()
至少這是我在嘗試找出答案時所得到的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.