# retune/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/retune/> .

@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 midi:  <http://lv2plug.in/ns/ext/midi#> .
@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 "Retune" ;
    rdfs:comment "Retunes a note stream to a Scala (.scl) scale by sending each held note on its own channel (2 to 16) behind a per-note pitch bend, so any synth that follows per-channel pitch bend can play microtonally." ;
    trn:vendor "danja" ;
    doap:revision "1.0.0" ;
    doap:developer <http://danny.ayers.name> ;
    foaf:homepage <> ;
    trn:role trn:MidiProcessor ;
    trn:accepts trn:Midi ;
    trn:produces trn:Midi ;
    trn:caution "The receiving synth must apply pitch bend per channel at the configured Bend range, in a one channel per note mode. Incoming pitch bend, channel aftertouch and system messages are dropped." ;
    trn:caution "The scale is a jig:asset the person replaces with a .scl file of their own; it is saved with the session. Ported from the Downspout VST3 of the same name, whose .kbm keyboard maps and MPE zone setup are also not supported here." ;
    trn:caution "Declares no jig:module and so no jig:abi. A host that loads a module directly, such as the native adapter, cannot load this plugin; a JavaScript AudioWorklet host can." ;
    trn:format trn:Jig ;
    pu:licenceId "MIT" ;
    trn:requires jig:MidiEvents ;
    trn:requires jig:MidiOut ;

    jig:audioInputs 0 ;
    jig:audioOutputs 0 ;
    jig:renderQuantum 128 ;
    jig:latencyFrames 0 ;

    jig:processor <#processor> ;
    jig:asset <#scl> ;

    lv2:port <#root> , <#bend_range> .

<#processor>
    a jig:Processor ;
    jig:location <retune-processor.js> ;
    jig:mediaType "text/javascript" ;
    jig:registeredName "retune" ;
    jig:integrity "sha384-ICCAFIa8XaTu/WJM1w4EIkWXW5dQEJ0ss0gwLJoLXAP/e1cDTTi7c37uPGSOV7oC" .

<#scl>
    a jig:Resource ;
    jig:location <12-tet.scl> ;
    jig:mediaType "text/plain" ;
    jig:userReplaceable true ;
    jig:integrity "sha384-NBMk7m8Hi57SJqLGKuk5KMSCbWCdXvj0JpvzGewmULsgHeeW55I/QLbX21rEG3hs" .

<#root>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "root" ; lv2:name "Root note" ;
    lv2:default 60 ; lv2:minimum 0 ; lv2:maximum 127 ;
    jig:paramIndex 0 .

<#bend_range>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "bend_range" ; lv2:name "Bend range (semitones)" ;
    lv2:default 2 ; lv2:minimum 1 ; lv2:maximum 24 ;
    jig:paramIndex 1 .
