Chris@0: Chris@0: @prefix rdf: . Chris@0: @prefix rdfs: . Chris@0: @prefix dc: . Chris@0: @prefix mo: . Chris@0: @prefix af: . Chris@0: @prefix event: . Chris@0: @prefix tl: . Chris@0: @prefix xsd: . Chris@0: @prefix : <#> . Chris@0: Chris@0: Chris@0: # Describe the signal we're annotating, and associate it with a Chris@0: # timeline (the timeline is named as :base_timeline but never given Chris@0: # any attributes in this document). Any feature that is associated Chris@0: # with the same timeline will be taken as derived from this signal. Chris@0: Chris@0: :audio_signal a mo:Signal ; Chris@0: mo:available_as ; Chris@0: mo:time :signal_interval . Chris@0: Chris@0: :signal_interval a tl:Interval ; Chris@0: tl:onTimeLine :base_timeline ; Chris@0: tl:beginsAt "PT0"^^xsd:duration . Chris@0: Chris@0: Chris@0: # A sparse feature event. Chris@0: Chris@0: :event0 a af:Onset ; Chris@0: event:time :time0 . Chris@0: Chris@0: :time0 a tl:Instant ; Chris@0: tl:onTimeLine :base_timeline ; Chris@0: tl:at "PT0.185759637S"^^xsd:duration . Chris@0: Chris@0: # Alternatively we could write that with a blank node. Chris@0: Chris@0: :event1 a af:Onset ; Chris@0: event:time [ Chris@0: a tl:Instant ; Chris@0: tl:onTimeLine :base_timeline ; Chris@0: tl:at "PT0.510839002S"^^xsd:duration ; Chris@0: ] . Chris@0: Chris@0: Chris@0: # For a dense feature, we need an appropriately sampled, windowed timeline. Chris@0: Chris@0: :feature_timeline a tl:DiscreteTimeLine . Chris@0: Chris@0: :feature_timeline_map a tl:UniformSamplingWindowingMap ; Chris@0: tl:rangeTimeLine :feature_timeline ; Chris@0: tl:domainTimeLine :base_timeline ; Chris@0: tl:sampleRate "44100"^^xsd:int ; Chris@0: tl:windowLength "1024"^^xsd:int ; Chris@0: tl:hopSize "512"^^xsd:int . Chris@0: Chris@0: Chris@0: # ... and an interval, defined in terms of hops (the discrete steps of Chris@0: # the windowed timeline). Chris@0: Chris@0: :feature_interval a tl:Interval ; Chris@0: tl:onTimeLine :feature_timeline ; Chris@0: tl:beginsAt "0"^^xsd:int ; Chris@0: tl:duration "5634"^^xsd:int . Chris@0: Chris@0: Chris@0: # Then our feature is a signal that is on the interval we just Chris@0: # described. We associate it explicitly with the original audio Chris@0: # signal, although presumably we could leave the association implicit, Chris@0: # to be derived from the relationships between timelines, just as it Chris@0: # is for the sparse features above. Chris@0: Chris@0: :audio_signal af:signal_feature :feature1 . Chris@0: Chris@0: :feature_signal_type rdfs:subClassOf af:DetectionFunction ; Chris@0: dc:title "Detection Function from Simple Percussion Onset Detector" . Chris@0: Chris@0: :feature1 a :feature_signal_type ; Chris@0: mo:time :feature_interval ; Chris@0: af:dimensions "12 12345" ; Chris@0: af:value "0 0 0 0 0 0 0 1 2 3 1 24 236 123213 (etc)" . Chris@0: