簡體   English   中英

如何在Python中讀取LV2 ttl文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM