# ferrite/profile.ttl
#
# GENERATED by bin/write-profile.js. Do not edit: the digests are of the
# files on disk, and editing them by hand is how a profile comes to describe
# artefacts that no longer exist. Edit profile.json and run ./build.sh.

@base <https://strandz.it/jigdaw/plugins/ferrite/> .

@prefix jig:   <http://purl.org/stuff/jigdaw/> .
@prefix trn:   <http://purl.org/stuff/transmissions/> .
@prefix pu:    <http://purl.org/stuff/plugin-universe/> .
@prefix lv2:   <http://lv2plug.in/ns/lv2core#> .
@prefix units: <http://lv2plug.in/ns/extensions/units#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix doap:  <http://usefulinc.com/ns/doap#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf:  <http://xmlns.com/foaf/0.1/> .

<>
    a jig:WebPlugin , trn:PluginProfile ;
    rdfs:label "Ferrite" ;
    rdfs:comment "A neural amp model (nam-rs, MIT, ported from and validated against the reference Python and C++ implementations) in series with an impulse response, a cabinet or a room of up to 2.7 seconds, by partitioned FFT convolution. The amp can be switched off to use it as a convolution reverb, and Mix blends the convolved signal with the dry one. Ships a small example .nam and a synthetic (not captured) cabinet IR; both jig:asset resources are meant to be replaced with your own." ;
    trn:vendor "danja" ;
    doap:revision "1.1.0" ;
    doap:developer <http://danny.ayers.name> ;
    foaf:homepage <> ;
    trn:role trn:AudioEffect ;
    trn:accepts trn:Audio ;
    trn:produces trn:Audio ;
    trn:genre "Rock" , "Electronic" ;
    trn:caution "The neural model and the cabinet impulse response are both loaded at the sample rate they were captured or trained at, 48 kHz for the example model here. This plugin does not resample: a host running at a different rate gets a load that reports a mismatch (see the module's own jig_load_nam and jig_load_ir return codes) rather than silently wrong output." ;
    trn:caution "The shipped impulse response is synthetic, generated for this example, not a real cabinet capture." ;
    trn:caution "One amp model, run on the mean of both input channels: an amp is a mono device, and a real capture is too heavy to run twice." ;
    trn:caution "Impulse responses are normalised to unit energy, so a response sets the tone and not the level. Stereo responses are mixed to mono." ;
    trn:caution "Needs WebAssembly SIMD, which every current browser has. The native adapter's interpreter does not, and could not run a real capture in real time if it did." ;
    trn:format trn:Jig , trn:WebAudio ;
    pu:licenceId "Apache-2.0" ;

    jig:audioInputs 1 ;
    jig:inputChannels 2 ;
    jig:audioOutputs 1 ;
    jig:outputChannels 2 ;
    jig:renderQuantum 128 ;
    jig:latencyFrames 0 ;

    jig:module <#module> ;
    jig:processor <#processor> ;
    jig:asset <#nam> , <#ir> ;

    lv2:port <#input> , <#output> , <#amp> , <#mix> .

<#module>
    a jig:Module ;
    jig:location <ferrite.wasm> ;
    jig:mediaType "application/wasm" ;
    jig:abi jig:Abi1 ;
    jig:wasmFeature jig:Simd128 ;
    jig:integrity "sha384-xxym0XvQUpx9Py9vfGjH+TLE9yKN4ePIZ/XQ82vqQfyoetc41LnIpP8QNAumuNoA" .

<#processor>
    a jig:Processor ;
    jig:location <ferrite-processor.js> ;
    jig:mediaType "text/javascript" ;
    jig:registeredName "ferrite" ;
    jig:integrity "sha384-02K0BqijijJue7izxA4+czPmL/MCqWKLwu6BUXx99pSCcucJ0kVz2mbmj90FMcgJ" .

<#nam>
    a jig:Resource ;
    jig:location <wavenet.nam> ;
    jig:mediaType "application/json" ;
    jig:userReplaceable true ;
    jig:integrity "sha384-8wi+iDxwmHA28cbtgjoNsPgLpum/BC9N+0Ltw2TBFi4FXmU+gElB5Z6EJBh9sUQ/" .

<#ir>
    a jig:Resource ;
    jig:location <cab.wav> ;
    jig:mediaType "audio/wav" ;
    jig:userReplaceable true ;
    jig:integrity "sha384-ro0B82vF2PR17Gk+kRU3OsRKJhDFUMTd6zMbYDtsnpaWuUzF0zhDt2v4z7VKWkV+" .

<#input>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "input" ; lv2:name "Input" ;
    lv2:default 1 ; lv2:minimum 0 ; lv2:maximum 4 ;
    jig:paramIndex 0 .

<#output>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "output" ; lv2:name "Output" ;
    lv2:default 1 ; lv2:minimum 0 ; lv2:maximum 2 ;
    jig:paramIndex 1 .

<#amp>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "amp" ; lv2:name "Amp" ;
    lv2:default 1 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 2 ;
    lv2:portProperty lv2:toggled .

<#mix>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "mix" ; lv2:name "Mix" ;
    lv2:default 1 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 3 .
