From 129148359190339517c573dd00431a2a3534e79a Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 10 Mar 2012 02:27:16 +0000 Subject: Add a near-complete description of MIDI in RDF and corresponding URI #defines. --- lv2/lv2plug.in/ns/ext/midi/manifest.ttl | 2 +- lv2/lv2plug.in/ns/ext/midi/midi.h | 67 +++++++ lv2/lv2plug.in/ns/ext/midi/midi.ttl | 320 ++++++++++++++++++++++++++++++-- 3 files changed, 371 insertions(+), 18 deletions(-) create mode 100644 lv2/lv2plug.in/ns/ext/midi/midi.h (limited to 'lv2/lv2plug.in') diff --git a/lv2/lv2plug.in/ns/ext/midi/manifest.ttl b/lv2/lv2plug.in/ns/ext/midi/manifest.ttl index a8e194e..87823e8 100644 --- a/lv2/lv2plug.in/ns/ext/midi/manifest.ttl +++ b/lv2/lv2plug.in/ns/ext/midi/manifest.ttl @@ -4,6 +4,6 @@ a lv2:Specification ; lv2:minorVersion 1 ; - lv2:microVersion 4 ; + lv2:microVersion 5 ; rdfs:seeAlso . diff --git a/lv2/lv2plug.in/ns/ext/midi/midi.h b/lv2/lv2plug.in/ns/ext/midi/midi.h new file mode 100644 index 0000000..60b6ffa --- /dev/null +++ b/lv2/lv2plug.in/ns/ext/midi/midi.h @@ -0,0 +1,67 @@ +/* + Copyright 2012 David Robillard + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +/** + @file midi.h + C definitions for the LV2 MIDI extension . +*/ + +#ifndef LV2_MIDI_H +#define LV2_MIDI_H + +#define LV2_MIDI_URI "http://lv2plug.in/ns/ext/midi" + +#define LV2_MIDI__ActiveSense LV2_MIDI_URI "#ActiveSense" +#define LV2_MIDI__Aftertouch LV2_MIDI_URI "#Aftertouch" +#define LV2_MIDI__Bender LV2_MIDI_URI "#Bender" +#define LV2_MIDI__ChannelPressure LV2_MIDI_URI "#ChannelPressure" +#define LV2_MIDI__Chunk LV2_MIDI_URI "#Chunk" +#define LV2_MIDI__Clock LV2_MIDI_URI "#Clock" +#define LV2_MIDI__Continue LV2_MIDI_URI "#Continue" +#define LV2_MIDI__Controller LV2_MIDI_URI "#Controller" +#define LV2_MIDI__MidiEvent LV2_MIDI_URI "#MidiEvent" +#define LV2_MIDI__NoteOff LV2_MIDI_URI "#NoteOff" +#define LV2_MIDI__NoteOn LV2_MIDI_URI "#NoteOn" +#define LV2_MIDI__ProgramChange LV2_MIDI_URI "#ProgramChange" +#define LV2_MIDI__QuarterFrame LV2_MIDI_URI "#QuarterFrame" +#define LV2_MIDI__Reset LV2_MIDI_URI "#Reset" +#define LV2_MIDI__SongPosition LV2_MIDI_URI "#SongPosition" +#define LV2_MIDI__SongSelect LV2_MIDI_URI "#SongSelect" +#define LV2_MIDI__Start LV2_MIDI_URI "#Start" +#define LV2_MIDI__Stop LV2_MIDI_URI "#Stop" +#define LV2_MIDI__SystemCommon LV2_MIDI_URI "#SystemCommon" +#define LV2_MIDI__SystemExclusive LV2_MIDI_URI "#SystemExclusive" +#define LV2_MIDI__SystemMessage LV2_MIDI_URI "#SystemMessage" +#define LV2_MIDI__SystemRealtime LV2_MIDI_URI "#SystemRealtime" +#define LV2_MIDI__Tick LV2_MIDI_URI "#Tick" +#define LV2_MIDI__TuneRequest LV2_MIDI_URI "#TuneRequest" +#define LV2_MIDI__VoiceMessage LV2_MIDI_URI "#VoiceMessage" +#define LV2_MIDI__benderValue LV2_MIDI_URI "#benderValue" +#define LV2_MIDI__byteNumber LV2_MIDI_URI "#byteNumber" +#define LV2_MIDI__chunk LV2_MIDI_URI "#chunk" +#define LV2_MIDI__controllerNumber LV2_MIDI_URI "#controllerNumber" +#define LV2_MIDI__controllerValue LV2_MIDI_URI "#controllerValue" +#define LV2_MIDI__noteNumber LV2_MIDI_URI "#noteNumber" +#define LV2_MIDI__pressure LV2_MIDI_URI "#pressure" +#define LV2_MIDI__programNumber LV2_MIDI_URI "#programNumber" +#define LV2_MIDI__property LV2_MIDI_URI "#property" +#define LV2_MIDI__songNumber LV2_MIDI_URI "#songNumber" +#define LV2_MIDI__songPosition LV2_MIDI_URI "#songPosition" +#define LV2_MIDI__status LV2_MIDI_URI "#status" +#define LV2_MIDI__statusMask LV2_MIDI_URI "#statusMask" +#define LV2_MIDI__velocity LV2_MIDI_URI "#velocity" + +#endif /* LV2_MIDI_H */ diff --git a/lv2/lv2plug.in/ns/ext/midi/midi.ttl b/lv2/lv2plug.in/ns/ext/midi/midi.ttl index 64edf0e..d359cba 100644 --- a/lv2/lv2plug.in/ns/ext/midi/midi.ttl +++ b/lv2/lv2plug.in/ns/ext/midi/midi.ttl @@ -1,5 +1,5 @@ # LV2 MIDI Extension -# Copyright 2008-2011 David Robillard +# Copyright 2008-2012 David Robillard # Copyright 2006 Lars Luthman # # Permission to use, copy, modify, and/or distribute this software for any @@ -14,14 +14,16 @@ # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -@prefix dcs: . @prefix atom: . +@prefix dcs: . @prefix doap: . @prefix ev: . @prefix foaf: . @prefix lv2: . @prefix midi: . +@prefix rdf: . @prefix rdfs: . +@prefix xsd: . a foaf:Person ; @@ -39,21 +41,30 @@ _:larsl a lv2:Specification ; doap:license ; doap:name "LV2 MIDI" ; - doap:shortdesc "A data type for raw MIDI." ; + doap:shortdesc "A normalised definition of raw MIDI." ; doap:maintainer ; doap:developer _:larsl ; doap:release [ + doap:revision "1.5" ; + doap:created "2012-02-19" ; + dcs:blame ; + dcs:changeset [ + dcs:item [ + rdfs:label "Add class definitions for various message types." ; + ] ; + ] ; + ] , [ doap:revision "1.4" ; doap:created "2011-11-21" ; doap:file-release ; dcs:blame ; dcs:changeset [ dcs:item [ - rdfs:label "Update packaging." + rdfs:label "Update packaging." ; ] , [ - rdfs:label "Improve documentation." - ] - ] + rdfs:label "Improve documentation." ; + ] ; + ] ; ] , [ doap:revision "1.2" ; doap:created "2011-05-26" ; @@ -61,11 +72,11 @@ _:larsl dcs:blame ; dcs:changeset [ dcs:item [ - rdfs:label "Add build system for installation." + rdfs:label "Add build system for installation." ; ] , [ - rdfs:label "Switch to ISC license." - ] - ] + rdfs:label "Switch to ISC license." ; + ] ; + ] ; ] , [ doap:revision "1.0" ; doap:created "2010-10-04" ; @@ -73,21 +84,102 @@ _:larsl dcs:blame ; dcs:changeset [ dcs:item [ - rdfs:label "Initial release." - ] - ] + rdfs:label "Initial release." ; + ] ; + ] ; ] ; lv2:documentation """

This extension defines a data type for a MIDI message, midi:MidiEvent, which -is normalized for fast and convenient processing by plugins. It is -particularly useful as the payload of an Musical Instrument Digital Interface, a ubiquitous binary standard for +controlling digital music devices.

+ +

For plugins that process MIDI (or other situations where MIDI is sent via a +generic transport) the main type defined here, midi:MidiEvent, can be mapped to +an integer and used as the type of an LV2 Atom or Event.

+ +

This specification also defines a complete machine readable description of +the MIDI standard (except for standard controller numbers). These descriptions +are detailed enough to express any MIDI message in RDF. Message types are +described down to the byte level, so all the information required to convert +between binary MIDI and RDF MIDI is present. This specification thus serves as +both a human and machine readable description of the MIDI specification.

""" . +midi:ActiveSense + a rdfs:Class ; + rdfs:subClassOf midi:SystemRealtime ; + rdfs:label "Active sense message. " ; + midi:status "FE"^^xsd:hexBinary . + +midi:Aftertouch + a rdfs:Class ; + rdfs:subClassOf midi:VoiceMessage ; + rdfs:label "Aftertouch (note pressure) message." ; + midi:statusMask "A0"^^xsd:hexBinary ; + midi:chunk [ + midi:byteNumber 0 ; + midi:property midi:noteNumber ; + ] , [ + midi:byteNumber 1 ; + midi:property midi:pressure ; + ] . + +midi:Bender + a rdfs:Class ; + rdfs:subClassOf midi:VoiceMessage ; + rdfs:label "Bender (pitch wheel) message." ; + midi:statusMask "E0"^^xsd:hexBinary ; + midi:chunk [ + midi:byteNumber 0 , + 1 ; + midi:property midi:benderValue ; + ] . + +midi:ChannelPressure + a rdfs:Class ; + rdfs:subClassOf midi:VoiceMessage ; + rdfs:label "Channel pressure message." ; + midi:statusMask "D0"^^xsd:hexBinary ; + midi:chunk [ + midi:byteNumber 0 ; + midi:property midi:pressure ; + ] . + +midi:Chunk + a rdfs:Class ; + rdfs:comment "A series of contiguous bytes (usually one) in a message." . + +midi:Clock + a rdfs:Class ; + rdfs:subClassOf midi:SystemRealtime ; + rdfs:label "Clock message. " ; + midi:status "F8"^^xsd:hexBinary . + +midi:Continue + a rdfs:Class ; + rdfs:subClassOf midi:SystemRealtime ; + rdfs:label "Continue message. " ; + midi:status "FB"^^xsd:hexBinary . + +midi:Controller + a rdfs:Class ; + rdfs:subClassOf midi:VoiceMessage ; + rdfs:label "Controller change message." ; + midi:statusMask "B0"^^xsd:hexBinary ; + midi:chunk [ + midi:byteNumber 0 ; + midi:property midi:controllerNumber ; + ] , [ + midi:byteNumber 1 ; + midi:property midi:controllerValue ; + ] . + midi:MidiEvent a rdfs:Class ; - rdfs:label "LV2 MIDI message." ; + rdfs:label "MIDI message." ; rdfs:subClassOf ev:Event , atom:Atom ; lv2:documentation """ @@ -113,3 +205,197 @@ restrictions to simplify handling:

messages, and the reader may assume that all events are valid. """ . + +midi:NoteOff + a rdfs:Class ; + rdfs:subClassOf midi:VoiceMessage ; + rdfs:label "Note off message." ; + midi:statusMask "80"^^xsd:hexBinary ; + midi:chunk [ + midi:byteNumber 0 ; + midi:property midi:noteNumber ; + ] , [ + midi:byteNumber 1 ; + midi:property midi:velocity ; + ] . + +midi:NoteOn + a rdfs:Class ; + rdfs:subClassOf midi:VoiceMessage ; + rdfs:label "Note on message." ; + midi:statusMask "90"^^xsd:hexBinary ; + midi:chunk [ + midi:byteNumber 0 ; + midi:property midi:noteNumber ; + ] , [ + midi:byteNumber 1 ; + midi:property midi:velocity ; + ] . + +midi:ProgramChange + a rdfs:Class ; + rdfs:subClassOf midi:VoiceMessage ; + rdfs:label "Program change message." ; + midi:statusMask "C0"^^xsd:hexBinary ; + midi:chunk [ + midi:byteNumber 0 ; + midi:property midi:programNumber ; + ] . + +midi:QuarterFrame + a rdfs:Class ; + rdfs:subClassOf midi:SystemCommon ; + rdfs:label "MTC quarter frame message." ; + midi:status "F1"^^xsd:hexBinary . + +midi:Reset + a rdfs:Class ; + rdfs:subClassOf midi:SystemRealtime ; + rdfs:label "Reset message. " ; + midi:status "FF"^^xsd:hexBinary . + +midi:SongPosition + a rdfs:Class ; + rdfs:subClassOf midi:SystemCommon ; + rdfs:label "Song position pointer message." ; + midi:status "F2"^^xsd:hexBinary ; + midi:chunk [ + midi:byteNumber 0 , + 1 ; + midi:property midi:songPosition ; + ] . + +midi:SongSelect + a rdfs:Class ; + rdfs:subClassOf midi:SystemCommon ; + rdfs:label "Song select message." ; + midi:status "F3"^^xsd:hexBinary . + +midi:Start + a rdfs:Class ; + rdfs:subClassOf midi:SystemRealtime ; + rdfs:label "Start message. " ; + midi:status "FA"^^xsd:hexBinary . + +midi:Stop + a rdfs:Class ; + rdfs:subClassOf midi:SystemRealtime ; + rdfs:label "Stop message. " ; + midi:status "FC"^^xsd:hexBinary . + +midi:SystemCommon + a rdfs:Class ; + rdfs:subClassOf midi:SystemMessage ; + rdfs:label "System common message." . + +midi:SystemExclusive + a rdfs:Class ; + rdfs:subClassOf midi:SystemMessage ; + rdfs:label "System exclusive message." ; + midi:statusMask "F0"^^xsd:hexBinary . + +midi:SystemMessage + a rdfs:Class ; + rdfs:subClassOf midi:MidiEvent ; + rdfs:label "System message." ; + midi:statusMask "F0"^^xsd:hexBinary . + +midi:SystemRealtime + a rdfs:Class ; + rdfs:subClassOf midi:SystemMessage ; + rdfs:label "System realtime message." . + +midi:Tick + a rdfs:Class ; + rdfs:subClassOf midi:SystemRealtime ; + rdfs:label "Tick message. " ; + midi:status "F9"^^xsd:hexBinary . + +midi:TuneRequest + a rdfs:Class ; + rdfs:subClassOf midi:SystemCommon ; + rdfs:label "Tune request message." ; + midi:status "F6"^^xsd:hexBinary . + +midi:VoiceMessage + a rdfs:Class ; + rdfs:subClassOf midi:MidiEvent ; + rdfs:label "Voice message." ; + midi:statusMask "F0"^^xsd:hexBinary . + +midi:benderValue + a rdf:Property ; + rdfs:range xsd:short ; + rdfs:comment "The value of a pitch bender (-8192 to 8192)." . + +midi:byteNumber + a rdf:Property ; + rdfs:domain midi:Chunk ; + rdfs:range xsd:unsignedByte ; + rdfs:comment "The 0-based index of a byte which is part of this chunk." . + +midi:chunk + a rdf:Property ; + rdfs:range xsd:byte , + xsd:hexBinary ; + rdfs:comment "The exact status byte for a message of this type." . + +midi:controllerNumber + a rdf:Property ; + rdfs:range xsd:byte ; + rdfs:comment "The numberic ID of a controller (0 to 127)." . + +midi:controllerValue + a rdf:Property ; + rdfs:range xsd:byte ; + rdfs:comment "The value of a controller (0 to 127)." . + +midi:noteNumber + a rdf:Property ; + rdfs:range xsd:byte ; + rdfs:comment "The numeric ID of a controller (0 to 127)." . + +midi:pressure + a rdf:Property ; + rdfs:range xsd:byte ; + rdfs:comment "Key pressure (0 to 127)." . + +midi:programNumber + a rdf:Property ; + rdfs:range xsd:byte ; + rdfs:comment "The numeric ID of a program (0 to 127)." . + +midi:property + a rdf:Property ; + rdfs:domain midi:Chunk ; + rdfs:range rdf:Property ; + rdfs:comment "The property this chunk represents." . + +midi:songNumber + a rdf:Property ; + rdfs:range xsd:byte ; + rdfs:comment "The numeric ID of a song (0 to 127)." . + +midi:songPosition + a rdf:Property ; + rdfs:range xsd:short ; + rdfs:comment "Song position in MIDI beats (16th notes) (-8192 to 8192)." . + +midi:status + a rdf:Property ; + rdfs:range xsd:byte , + xsd:hexBinary ; + rdfs:comment "The exact status byte for a message of this type." . + +midi:statusMask + a rdf:Property ; + rdfs:range xsd:byte , + xsd:hexBinary ; + rdfs:comment """ +The status byte for a message of this type on channel 1, i.e. a status byte +with the lower nibble set to zero.""" . + +midi:velocity + a rdf:Property ; + rdfs:range xsd:byte ; + rdfs:comment "The velocity of a note message (0 to 127)." . -- cgit v1.2.1