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

@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 "Pulse" ;
    rdfs:comment "Eight voice subtractive synthesiser with saw, square and triangle oscillators, a one-pole lowpass and an attack-release envelope." ;
    trn:vendor "danja" ;
    doap:revision "1.0.0" ;
    doap:developer <http://danny.ayers.name> ;
    foaf:homepage <> ;
    trn:role trn:Instrument , trn:AudioInstrument ;
    trn:accepts trn:Midi ;
    trn:produces trn:Audio ;
    trn:genre "Electronic" , "Ambient" ;
    trn:caution "Eight voices. A ninth note steals the oldest voice rather than being refused." ;
    trn:format trn:WebAudio ;
    pu:licenceId "Apache-2.0" ;
    trn:requires jig:MidiEvents ;

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

    jig:module <#module> ;
    jig:processor <#processor> ;

    lv2:port <#waveform> , <#attack> , <#release> , <#cutoff> , <#gain> .

<#module>
    a jig:Module ;
    jig:location <pulse.wasm> ;
    jig:mediaType "application/wasm" ;
    jig:abi jig:Abi1 ;
    jig:integrity "sha384-g3DvRxgIQlAOtAs4igRA3txWG2twyHsPR5zgZxM2iods9jcnIcPebid0qCDgohrE" .

<#processor>
    a jig:Processor ;
    jig:location <pulse-processor.js> ;
    jig:mediaType "text/javascript" ;
    jig:registeredName "pulse" ;
    jig:integrity "sha384-fZtQJjxQJqbNP/ksoVliyrPmWTLZFNt1kK5zNatone/A4HU/cXI0gfQ3kJn9ff7k" .

<#waveform>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "waveform" ; lv2:name "Waveform" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 2 ;
    jig:paramIndex 0 ;
    lv2:portProperty lv2:enumeration ;
    lv2:scalePoint
        <#waveform-0> ,
        <#waveform-1> ,
        <#waveform-2> .

<#waveform-0> rdfs:label "Saw" ; rdf:value 0 .

<#waveform-1> rdfs:label "Square" ; rdf:value 1 .

<#waveform-2> rdfs:label "Triangle" ; rdf:value 2 .

<#attack>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "attack" ; lv2:name "Attack" ;
    lv2:default 5 ; lv2:minimum 0.5 ; lv2:maximum 500 ;
    jig:paramIndex 1 ;
    units:unit units:ms .

<#release>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "release" ; lv2:name "Release" ;
    lv2:default 200 ; lv2:minimum 1 ; lv2:maximum 4000 ;
    jig:paramIndex 2 ;
    units:unit units:ms .

<#cutoff>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "cutoff" ; lv2:name "Cutoff" ;
    lv2:default 6000 ; lv2:minimum 100 ; lv2:maximum 18000 ;
    jig:paramIndex 3 ;
    units:unit units:hz .

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