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

@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 "Mop" ;
    rdfs:comment "Eighteen voice OPL3 FM General MIDI instrument, capped at eight voices by default, based on mop by M. Glargaard. The AdLib Sound Blaster sound of DOS-era games: FM timbres from mop's own bank, a drum kit on channel 10, and every control answering to a MIDI CC." ;
    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" , "Chiptune" , "Soundtrack" ;
    trn:caution "Eight voices by default out of the eighteen the chip has. A ninth note steals the oldest voice rather than being refused; raise Voices toward eighteen for dense arrangements." ;
    trn:caution "Percussion is MIDI channel 10, notes 35 to 81. Pitched notes play on any other channel." ;
    trn:caution "The Program control sets the instrument on every melodic channel at once, which is how presets are auditioned. An incoming program change overrides a single channel without moving the panel." ;
    trn:caution "Every control but Program answers to a MIDI CC as well, one controller per port as the profile's midi:binding declarations say. A host automating a parameter and a controller sending its CC will fight." ;
    trn:caution "Channel volume, expression, pan, sustain and pitch bend arrive as MIDI on each channel and are not panel controls: CC 7, 11, 10 and 64 behave as mop does." ;
    trn:format trn:Jig , trn:WebAudio ;
    pu:licenceId "Zlib" ;
    trn:requires jig:MidiEvents ;

    jig:audioInputs 0 ;
    jig:audioOutputs 1 ;
    jig:outputChannels 2 ;
    jig:renderQuantum 128 ;
    jig:latencyFrames 0 ;
    jig:tailFrames 96000 ;
    jig:stateless true ;

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

    lv2:port <#program> , <#voices> , <#gain> , <#bend_range> , <#tuning> , <#vel_sense> .

<#module>
    a jig:Module ;
    jig:location <mop.wasm> ;
    jig:mediaType "application/wasm" ;
    jig:abi jig:Abi2 ;
    jig:integrity "sha384-s+w6yEmpcFLFUe4NCwxXRBQG35uS0sRUrKvMF3tjXMoZiOTRtfPmzCaimxfKcIG8" .

<#processor>
    a jig:Processor ;
    jig:location <mop-processor.js> ;
    jig:mediaType "text/javascript" ;
    jig:registeredName "mop" ;
    jig:integrity "sha384-av/7Yu+ScObVjsU1h2JjOo6fUFD+zazIpRaROGYxIiUJ7JS1Nrh5MwkmEP3Jggcz" .

<#program>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "program" ; lv2:name "Instrument: Program" ;
    lv2:default 0 ; lv2:minimum 0 ; lv2:maximum 127 ;
    jig:paramIndex 0 ;
    jig:controlGroup "Instrument" ;
    lv2:portProperty lv2:enumeration ;
    lv2:scalePoint
        <#program-0> ,
        <#program-1> ,
        <#program-2> ,
        <#program-3> ,
        <#program-4> ,
        <#program-5> ,
        <#program-6> ,
        <#program-7> ,
        <#program-8> ,
        <#program-9> ,
        <#program-10> ,
        <#program-11> ,
        <#program-12> ,
        <#program-13> ,
        <#program-14> ,
        <#program-15> ,
        <#program-16> ,
        <#program-17> ,
        <#program-18> ,
        <#program-19> ,
        <#program-20> ,
        <#program-21> ,
        <#program-22> ,
        <#program-23> ,
        <#program-24> ,
        <#program-25> ,
        <#program-26> ,
        <#program-27> ,
        <#program-28> ,
        <#program-29> ,
        <#program-30> ,
        <#program-31> ,
        <#program-32> ,
        <#program-33> ,
        <#program-34> ,
        <#program-35> ,
        <#program-36> ,
        <#program-37> ,
        <#program-38> ,
        <#program-39> ,
        <#program-40> ,
        <#program-41> ,
        <#program-42> ,
        <#program-43> ,
        <#program-44> ,
        <#program-45> ,
        <#program-46> ,
        <#program-47> ,
        <#program-48> ,
        <#program-49> ,
        <#program-50> ,
        <#program-51> ,
        <#program-52> ,
        <#program-53> ,
        <#program-54> ,
        <#program-55> ,
        <#program-56> ,
        <#program-57> ,
        <#program-58> ,
        <#program-59> ,
        <#program-60> ,
        <#program-61> ,
        <#program-62> ,
        <#program-63> ,
        <#program-64> ,
        <#program-65> ,
        <#program-66> ,
        <#program-67> ,
        <#program-68> ,
        <#program-69> ,
        <#program-70> ,
        <#program-71> ,
        <#program-72> ,
        <#program-73> ,
        <#program-74> ,
        <#program-75> ,
        <#program-76> ,
        <#program-77> ,
        <#program-78> ,
        <#program-79> ,
        <#program-80> ,
        <#program-81> ,
        <#program-82> ,
        <#program-83> ,
        <#program-84> ,
        <#program-85> ,
        <#program-86> ,
        <#program-87> ,
        <#program-88> ,
        <#program-89> ,
        <#program-90> ,
        <#program-91> ,
        <#program-92> ,
        <#program-93> ,
        <#program-94> ,
        <#program-95> ,
        <#program-96> ,
        <#program-97> ,
        <#program-98> ,
        <#program-99> ,
        <#program-100> ,
        <#program-101> ,
        <#program-102> ,
        <#program-103> ,
        <#program-104> ,
        <#program-105> ,
        <#program-106> ,
        <#program-107> ,
        <#program-108> ,
        <#program-109> ,
        <#program-110> ,
        <#program-111> ,
        <#program-112> ,
        <#program-113> ,
        <#program-114> ,
        <#program-115> ,
        <#program-116> ,
        <#program-117> ,
        <#program-118> ,
        <#program-119> ,
        <#program-120> ,
        <#program-121> ,
        <#program-122> ,
        <#program-123> ,
        <#program-124> ,
        <#program-125> ,
        <#program-126> ,
        <#program-127> .

<#program-0> rdfs:label "Acoustic Grand Piano" ; rdf:value 0 .

<#program-1> rdfs:label "Bright Acoustic Piano" ; rdf:value 1 .

<#program-2> rdfs:label "Electric Grand Piano" ; rdf:value 2 .

<#program-3> rdfs:label "Honky-tonk Piano" ; rdf:value 3 .

<#program-4> rdfs:label "Electric Piano 1" ; rdf:value 4 .

<#program-5> rdfs:label "Electric Piano 2" ; rdf:value 5 .

<#program-6> rdfs:label "Harpsichord" ; rdf:value 6 .

<#program-7> rdfs:label "Clavinet" ; rdf:value 7 .

<#program-8> rdfs:label "Celesta" ; rdf:value 8 .

<#program-9> rdfs:label "Glockenspiel" ; rdf:value 9 .

<#program-10> rdfs:label "Music Box" ; rdf:value 10 .

<#program-11> rdfs:label "Vibraphone" ; rdf:value 11 .

<#program-12> rdfs:label "Marimba" ; rdf:value 12 .

<#program-13> rdfs:label "Xylophone" ; rdf:value 13 .

<#program-14> rdfs:label "Tubular Bells" ; rdf:value 14 .

<#program-15> rdfs:label "Dulcimer" ; rdf:value 15 .

<#program-16> rdfs:label "Drawbar Organ" ; rdf:value 16 .

<#program-17> rdfs:label "Percussive Organ" ; rdf:value 17 .

<#program-18> rdfs:label "Rock Organ" ; rdf:value 18 .

<#program-19> rdfs:label "Church Organ" ; rdf:value 19 .

<#program-20> rdfs:label "Reed Organ" ; rdf:value 20 .

<#program-21> rdfs:label "Accordion" ; rdf:value 21 .

<#program-22> rdfs:label "Harmonica" ; rdf:value 22 .

<#program-23> rdfs:label "Tango Accordion" ; rdf:value 23 .

<#program-24> rdfs:label "Acoustic Guitar (nylon)" ; rdf:value 24 .

<#program-25> rdfs:label "Acoustic Guitar (steel)" ; rdf:value 25 .

<#program-26> rdfs:label "Electric Guitar (jazz)" ; rdf:value 26 .

<#program-27> rdfs:label "Electric Guitar (clean)" ; rdf:value 27 .

<#program-28> rdfs:label "Electric Guitar (muted)" ; rdf:value 28 .

<#program-29> rdfs:label "Overdriven Guitar" ; rdf:value 29 .

<#program-30> rdfs:label "Distortion Guitar" ; rdf:value 30 .

<#program-31> rdfs:label "Guitar Harmonics" ; rdf:value 31 .

<#program-32> rdfs:label "Acoustic Bass" ; rdf:value 32 .

<#program-33> rdfs:label "Electric Bass (finger)" ; rdf:value 33 .

<#program-34> rdfs:label "Electric Bass (pick)" ; rdf:value 34 .

<#program-35> rdfs:label "Fretless Bass" ; rdf:value 35 .

<#program-36> rdfs:label "Slap Bass 1" ; rdf:value 36 .

<#program-37> rdfs:label "Slap Bass 2" ; rdf:value 37 .

<#program-38> rdfs:label "Synth Bass 1" ; rdf:value 38 .

<#program-39> rdfs:label "Synth Bass 2" ; rdf:value 39 .

<#program-40> rdfs:label "Violin" ; rdf:value 40 .

<#program-41> rdfs:label "Viola" ; rdf:value 41 .

<#program-42> rdfs:label "Cello" ; rdf:value 42 .

<#program-43> rdfs:label "Contrabass" ; rdf:value 43 .

<#program-44> rdfs:label "Tremolo Strings" ; rdf:value 44 .

<#program-45> rdfs:label "Pizzicato Strings" ; rdf:value 45 .

<#program-46> rdfs:label "Orchestral Harp" ; rdf:value 46 .

<#program-47> rdfs:label "Timpani" ; rdf:value 47 .

<#program-48> rdfs:label "String Ensemble 1" ; rdf:value 48 .

<#program-49> rdfs:label "String Ensemble 2" ; rdf:value 49 .

<#program-50> rdfs:label "Synth Strings 1" ; rdf:value 50 .

<#program-51> rdfs:label "Synth Strings 2" ; rdf:value 51 .

<#program-52> rdfs:label "Choir Aahs" ; rdf:value 52 .

<#program-53> rdfs:label "Voice Oohs" ; rdf:value 53 .

<#program-54> rdfs:label "Synth Voice" ; rdf:value 54 .

<#program-55> rdfs:label "Orchestra Hit" ; rdf:value 55 .

<#program-56> rdfs:label "Trumpet" ; rdf:value 56 .

<#program-57> rdfs:label "Trombone" ; rdf:value 57 .

<#program-58> rdfs:label "Tuba" ; rdf:value 58 .

<#program-59> rdfs:label "Muted Trumpet" ; rdf:value 59 .

<#program-60> rdfs:label "French Horn" ; rdf:value 60 .

<#program-61> rdfs:label "Brass Section" ; rdf:value 61 .

<#program-62> rdfs:label "Synth Brass 1" ; rdf:value 62 .

<#program-63> rdfs:label "Synth Brass 2" ; rdf:value 63 .

<#program-64> rdfs:label "Soprano Sax" ; rdf:value 64 .

<#program-65> rdfs:label "Alto Sax" ; rdf:value 65 .

<#program-66> rdfs:label "Tenor Sax" ; rdf:value 66 .

<#program-67> rdfs:label "Baritone Sax" ; rdf:value 67 .

<#program-68> rdfs:label "Oboe" ; rdf:value 68 .

<#program-69> rdfs:label "English Horn" ; rdf:value 69 .

<#program-70> rdfs:label "Bassoon" ; rdf:value 70 .

<#program-71> rdfs:label "Clarinet" ; rdf:value 71 .

<#program-72> rdfs:label "Piccolo" ; rdf:value 72 .

<#program-73> rdfs:label "Flute" ; rdf:value 73 .

<#program-74> rdfs:label "Recorder" ; rdf:value 74 .

<#program-75> rdfs:label "Pan Flute" ; rdf:value 75 .

<#program-76> rdfs:label "Blown Bottle" ; rdf:value 76 .

<#program-77> rdfs:label "Shakuhachi" ; rdf:value 77 .

<#program-78> rdfs:label "Whistle" ; rdf:value 78 .

<#program-79> rdfs:label "Ocarina" ; rdf:value 79 .

<#program-80> rdfs:label "Lead 1 (square)" ; rdf:value 80 .

<#program-81> rdfs:label "Lead 2 (sawtooth)" ; rdf:value 81 .

<#program-82> rdfs:label "Lead 3 (calliope)" ; rdf:value 82 .

<#program-83> rdfs:label "Lead 4 (chiff)" ; rdf:value 83 .

<#program-84> rdfs:label "Lead 5 (charang)" ; rdf:value 84 .

<#program-85> rdfs:label "Lead 6 (voice)" ; rdf:value 85 .

<#program-86> rdfs:label "Lead 7 (fifths)" ; rdf:value 86 .

<#program-87> rdfs:label "Lead 8 (bass + lead)" ; rdf:value 87 .

<#program-88> rdfs:label "Pad 1 (new age)" ; rdf:value 88 .

<#program-89> rdfs:label "Pad 2 (warm)" ; rdf:value 89 .

<#program-90> rdfs:label "Pad 3 (polysynth)" ; rdf:value 90 .

<#program-91> rdfs:label "Pad 4 (choir)" ; rdf:value 91 .

<#program-92> rdfs:label "Pad 5 (bowed)" ; rdf:value 92 .

<#program-93> rdfs:label "Pad 6 (metallic)" ; rdf:value 93 .

<#program-94> rdfs:label "Pad 7 (halo)" ; rdf:value 94 .

<#program-95> rdfs:label "Pad 8 (sweep)" ; rdf:value 95 .

<#program-96> rdfs:label "FX 1 (rain)" ; rdf:value 96 .

<#program-97> rdfs:label "FX 2 (soundtrack)" ; rdf:value 97 .

<#program-98> rdfs:label "FX 3 (crystal)" ; rdf:value 98 .

<#program-99> rdfs:label "FX 4 (atmosphere)" ; rdf:value 99 .

<#program-100> rdfs:label "FX 5 (brightness)" ; rdf:value 100 .

<#program-101> rdfs:label "FX 6 (goblins)" ; rdf:value 101 .

<#program-102> rdfs:label "FX 7 (echoes)" ; rdf:value 102 .

<#program-103> rdfs:label "FX 8 (sci-fi)" ; rdf:value 103 .

<#program-104> rdfs:label "Sitar" ; rdf:value 104 .

<#program-105> rdfs:label "Banjo" ; rdf:value 105 .

<#program-106> rdfs:label "Shamisen" ; rdf:value 106 .

<#program-107> rdfs:label "Koto" ; rdf:value 107 .

<#program-108> rdfs:label "Kalimba" ; rdf:value 108 .

<#program-109> rdfs:label "Bagpipe" ; rdf:value 109 .

<#program-110> rdfs:label "Fiddle" ; rdf:value 110 .

<#program-111> rdfs:label "Shanai" ; rdf:value 111 .

<#program-112> rdfs:label "Tinkle Bell" ; rdf:value 112 .

<#program-113> rdfs:label "Agogo" ; rdf:value 113 .

<#program-114> rdfs:label "Steel Drums" ; rdf:value 114 .

<#program-115> rdfs:label "Woodblock" ; rdf:value 115 .

<#program-116> rdfs:label "Taiko Drum" ; rdf:value 116 .

<#program-117> rdfs:label "Melodic Tom" ; rdf:value 117 .

<#program-118> rdfs:label "Synth Drum" ; rdf:value 118 .

<#program-119> rdfs:label "Reverse Cymbal" ; rdf:value 119 .

<#program-120> rdfs:label "Guitar Fret Noise" ; rdf:value 120 .

<#program-121> rdfs:label "Breath Noise" ; rdf:value 121 .

<#program-122> rdfs:label "Seashore" ; rdf:value 122 .

<#program-123> rdfs:label "Bird Tweet" ; rdf:value 123 .

<#program-124> rdfs:label "Telephone Ring" ; rdf:value 124 .

<#program-125> rdfs:label "Helicopter" ; rdf:value 125 .

<#program-126> rdfs:label "Applause" ; rdf:value 126 .

<#program-127> rdfs:label "Gunshot" ; rdf:value 127 .

<#voices>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "voices" ; lv2:name "Instrument: Voices" ;
    lv2:default 8 ; lv2:minimum 1 ; lv2:maximum 18 ;
    jig:paramIndex 1 ;
    jig:controlGroup "Instrument" ;
    midi:binding <#voices-cc> .

<#voices-cc> a midi:Controller ; midi:controllerNumber 70 .

<#gain>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "gain" ; lv2:name "Output: Gain" ;
    lv2:default 0.8 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 2 ;
    jig:controlGroup "Output" ;
    midi:binding <#gain-cc> .

<#gain-cc> a midi:Controller ; midi:controllerNumber 71 .

<#bend_range>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "bend_range" ; lv2:name "Pitch: Bend Range" ;
    lv2:default 2 ; lv2:minimum 0 ; lv2:maximum 12 ;
    jig:paramIndex 3 ;
    jig:controlGroup "Pitch" ;
    units:unit units:semitone12TET ;
    midi:binding <#bend_range-cc> .

<#bend_range-cc> a midi:Controller ; midi:controllerNumber 72 .

<#tuning>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "tuning" ; lv2:name "Pitch: Tuning" ;
    lv2:default 0 ; lv2:minimum -100 ; lv2:maximum 100 ;
    jig:paramIndex 4 ;
    jig:controlGroup "Pitch" ;
    midi:binding <#tuning-cc> .

<#tuning-cc> a midi:Controller ; midi:controllerNumber 73 .

<#vel_sense>
    a lv2:InputPort , lv2:ControlPort ;
    lv2:symbol "vel_sense" ; lv2:name "Response: Velocity" ;
    lv2:default 1 ; lv2:minimum 0 ; lv2:maximum 1 ;
    jig:paramIndex 5 ;
    jig:controlGroup "Response" ;
    midi:binding <#vel_sense-cc> .

<#vel_sense-cc> a midi:Controller ; midi:controllerNumber 74 .
