Chris@0: Chris@0: Chris@0: Chris@0: Chris@0:
Chris@0:Note: This service is not currently available. This page is Chris@11: retained for historical interest.
Chris@11: Chris@0:Chris@0: This server hosts a SPARQL Chris@0: end-point able to perform audio processing tasks to answer a particular query. Chris@0: It builds on top of N3 and Chris@0: Transaction Logic. More details to come. Chris@0:
Chris@0: Chris@0:Chris@0: Henry therefore implements a Music-related Semantic Web agent: Chris@0: an agent processing machine-readable web content and audio content Chris@0: to publish new data. Chris@0:
Chris@0: Chris@0:Chris@0: Henry was initally intended to be a small application Chris@0: on top of a SWI-Prolog N3 parser, Chris@0: interpreting parsed N3 rules as entailment rules within the SWI-Prolog Chris@0: Semantic Web server. Chris@0:
Chris@0: Chris@0:Chris@0: Now, Henry provides the ability to easily register new audio processing builtin predicates (which may be discovered at querying time). Chris@0: Henry works on top of a quad-store m and a binary store b. Chris@0:
Chris@0: Chris@0:Chris@0: A simplistic version of the Chris@0: behavior of Henry is the following. Chris@0: When processing a SPARQL query q, Henry gets through the following steps: Chris@0:
Chris@0: This implementation is still in the early stages, and still a bit experimental, it may perfectly die horribly :-) A look at Chris@0: the issue tracker may give insights on what is still buggy. Chris@0: Also, the server running this service is quite.... slow :) Chris@0:
Chris@0: Chris@0: Chris@0: Chris@0:Chris@0: There is a raw SPARQL end point at
http://dbtune.org/henry/sparql/. Chris@0: Chris@0:
Chris@0: A web interface is also available. Get in the Query database page, make sure you choose SPARQL Chris@0: as your query language, and check that the entailment is set to n3 (it should be the default, anyway). Chris@0:
Chris@0: Chris@0:Chris@0: A query involving only builtins (no N3 rules) is the following. It computes MFCC models for two tracks and compute Chris@0: their Kullback-Leiber divergence: Chris@0:
Chris@0:Chris@0: select ?d Chris@0: where Chris@0: { Chris@0: <http://dbtune.org/audio/Den-Nostalia.ogg> <http://purl.org/ontology/dsp/cache> ?local. Chris@0: ?local <http://purl.org/ontology/dsp/aspl_decode> ?sig. Chris@0: ?sig <http://purl.org/ontology/vamp/qm-mfccparameters> (?means1 ?vars1). Chris@0: Chris@0: <http://dbtune.org/audio/Both-Axel.ogg> <http://purl.org/ontology/dsp/cache> ?local2 . Chris@0: ?local2 <http://purl.org/ontology/dsp/aspl_decode> ?sig2. Chris@0: ?sig2 <http://purl.org/ontology/vamp/qm-mfccparameters> (?means2 ?vars2). Chris@0: Chris@0: ((?means1 ?vars1) (?means2 ?vars2)) <http://purl.org/ontology/dsp/mfcc_kldiv> ?d Chris@0: } Chris@0:Chris@0: Chris@0:
Chris@0: This is a pretty huge query! Chris@0: But, using a simple N3 rule, we can reduce that to the following query: Chris@0:
Chris@0: Chris@0:Chris@0: PREFIX sim: <http://purl.org/ontology/similarity/> Chris@0: SELECT ?sim Chris@0: WHERE Chris@0: { Chris@0: (<http://dbtune.org/audio/Den-Nostalia.ogg> <http://dbtune.org/audio/Both-Axel.ogg>) sim:div ?sim Chris@0: } Chris@0:Chris@0: Chris@0:
Chris@0: Another example is the following, computing key change events as specified by the Audio Features Chris@0: ontology. Chris@0: using the key Chris@0: detection Vamp plugin in the Queen Mary plugin set and this N3 Chris@0: rule: Chris@0:
Chris@0:Chris@0: select ?start ?key where { Chris@0: <http://dbtune.org/audio/Both-Axel.ogg> mo:encodes ?sig. Chris@0: ?sig mo:time ?time. Chris@0: ?time tl:timeline ?tl. Chris@0: _:evt a af:KeyChange; Chris@0: event:time [tl:at ?start; tl:timeline ?tl] ; Chris@0: af:new_key ?key } Chris@0:Chris@0: Chris@0: Chris@0: Chris@0:
Chris@0: All the code is open source and available in our Google code project. Chris@0:
Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: Chris@0: