1

LV2 プラグインがあり、Python を使用してそのメタデータ (プラグイン名、説明、コントロール ポートとオーディオ ポートのリスト、および各ポートの仕様) を抽出したいと考えています。

LADSPA を使用した場合、手順はかなり明確でしたが、Python で実装するのは少し困難でした。必要なのは、ladspa_descriptor() 関数を呼び出すことだけでした。現在、LV2 には .ttl ファイルがあり、アクセスは簡単ですが、解析はより複雑です。

この仕事を簡単にするPythonライブラリはありますか?

4

2 に答える 2

2

LV2ドキュメント生成ツールはRDFLibを使用します。これはおそらくPythonで最も人気のあるRDFインターフェースですが、Turtleを解析するだけではありません。パフォーマンスが問題にならない場合は良い選択ですが、残念ながら本当に遅いです。

プラグインを実際にインスタンス化して使用する必要がある場合は、既存のLV2実装を使用することをお勧めします。スティーブが言ったように、Lilvはこれのためです。静的なデフォルトの場所に限定されませんが、LV2_PATH内のすべての場所を調べます。Lilvを呼び出す前に、この環境変数を任意に設定でき、それらの場所でのみ検索されます。または、一度に1つのバンドルのみを具体的にロードする場合は、そのための関数lilv_world_load_bundle()があります。

LilvにはSWIGベースのPythonバインディングが含まれていますが、実際にデータを処理できるようになるまでには至っていません。ただし、scipy配列を使用してオーディオを処理できるようにするLilvをラップするプロジェクトがあります:http://pyslv2.sourceforge.net/(名前にもかかわらず、それらは実際にはLilvバインディングであり、その前身のSLV2のバインディングではありません)

とは言うものの、Turtleファイルから静的な情報を取得するだけでよい場合、Cライブラリを使用することはおそらくそれが価値があるよりも厄介です。標準データファイルを使用することの大きな利点の1つは、既存のツールでの使いやすさです。プラグインのポート数を取得するには、パターン(plugin、lv2:port、*)に一致するトリプルの数を数える必要があります。読み取るファイルとコマンドライン引数としてプラグインURIを指定して、プラグインのポート数を出力するPythonスクリプトの例を次に示します。

#!/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))
于 2012-08-16T00:38:11.700 に答える
1

これは、各プラグインがサポートするポートの数を取得する方法です:

w = lilv.World()
w.load_all()
for p in w.get_all_plugins():
    print p.get_name().as_string(), p.get_num_ports()

少なくとも、これを理解しようとしているときに得たのはこれだけです。

于 2013-01-28T05:54:53.553 に答える