Skip to content

Instantly share code, notes, and snippets.

@jamiew
Created January 22, 2012 17:15

Revisions

  1. jamiew revised this gist Jan 22, 2012. 2 changed files with 114 additions and 69 deletions.
    114 changes: 114 additions & 0 deletions scratchml.xml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,114 @@
    <scratch>

    <!--
    * info -- general file metadata: author info, client info et al
    * audio -- info + raw data for audio recording, or links to external files
    * transcription -- turntable markup (TTM)-style notation of fader cuts & hand movements
    * turntable - hardware metadata
    * mixer -- hardware metadata
    * data -- actual fader/hand event data.
    data field should always be specified last as it can be streaming (from a realtime feed)
    all fields required unless otherwise specified
    DRAFT
    http://scratchml.com
    -->


    <info>
    <client>Cutcapture 9000 version 1.1</client> <!-- sml generator -->
    <author>
    <name>Qbert</name>
    <location>San Francisco, CA</location> <!-- can be a string or a GPS pair like (32.44..., 22.34...) -->
    </author>
    <description>Crab/flare combo 1998</description> <!-- commentary -->
    <tags>foo, bar,baz</tags> <!-- comma-separated keywords -->
    <created_at></created_at> <!-- TODO ISO-9600 whatever formatted time (human-readable) -->
    <permalink>http://scratchml.com/data/34</permalink> <!-- optional, added on upload -->
    </info>

    <audio> <!-- this is raw, recorded data -->
    <format>base64</format> <!-- base64 compresses dense, evenly spaced data -->
    <samplerate>
    <!-- this data could be in different formats, depending on the input source (fps, samples, etc) -->
    <audio>44100</audio>
    <buffer>128</buffer>
    </samplerate>
    <data>...bWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=</data>

    <!-- TODO how would we specify a remote file? -->
    <!-- or even a youtube video link -->
    <!-- also a link for an image of the TTM notation -->

    </audio>

    <!-- *** this kind of stuff should maybe just be in the [info] metadata -->
    <!-- unless some of this data is required? -->
    <turntable>
    <brand>Technics</brand>
    <make>1200 M3D</make>
    <!-- pitch if not default (??) -->
    </turntable>

    <mixer>
    <brand>Rane</brand>
    <make>TTM-56SL</make>
    <hamster>true</hamster>
    <contour>fast</contour> <!-- *** TODO per-fader countour data -->
    </mixer>


    <!-- this is transcribed, notated information -->
    <!-- json-friendly-style, not using attributes... -->
    <transcription>
    <scratch>
    <name>flare</name>
    <line> <!-- lines: transformer, chirps (derivative = (next-cur)/length) -->
    <time>1000</time> <!-- ms -->
    <position>0</position> <!-- ??? units -->
    <curve> <!-- curve: baby, scribble, etc (derivative = 0) -->
    <time>3000</time>
    <position>1.4</position>
    </curve>
    </scratch>

    <move>
    <time>1000</time>
    <position>center</position> <!-- left is open -->
    </move>

    <click>
    <time>1500</time>
    <position>right</position> <!-- left click -->
    </click>

    <move>
    <time>2</time>
    <position>right</position> <!-- left is closed -->
    </move>

    <move>
    <time>3</time>
    <position>center</position> <!-- left is open -->
    </move>

    <crab>
    <position="right"> <!-- three click crab -->
    <!-- *** click-timings should be optional...
    if blank should assume a smart default based on average click time (???) -->
    <clicks>
    <click><time>3250</time></click>
    <click><time>3500</time></click>
    <clicks><time>3750</time></click>
    </clicks>
    </crab>

    <move>
    <time>5000</time>
    <position>right</position> <!-- left is closed -->
    </move>
    </transcription>
    </scratch>
    69 changes: 0 additions & 69 deletions scratchml_d1.xml
    Original file line number Diff line number Diff line change
    @@ -1,69 +0,0 @@
    <?xml version="1.0"?>
    <sml>
    <meta>
    <origin>
    <name></name>
    <location></location>
    <client></client> <!-- sml generator -->
    <time></time>
    </origin>
    <description></description> <!-- commentary -->
    <tags></tags> <!-- keywords -->
    <tracks>
    <track>
    <deck></deck> <!-- which turntable -->
    <start></start> <!-- when it starts during the performance -->
    <stop></stop> <!-- when it stops during the performance -->
    <name></name>
    <artist></artist>
    <!-- other id3 style data? -->
    </track>
    </tracks>
    </meta>
    <composition>
    <turntable>
    <side>left</side>
    <performance> <!-- this is raw, recorded data -->
    <format>base64</format> <!-- base64 compresses dense, evenly spaced data -->
    <samplerate>
    <!-- this data could be in different formats, depending on the input source (fps, samples, etc) -->
    <audio>44100</audio>
    <buffer>128</buffer>
    </samplerate>
    <data>...bWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=</data>
    </performance>
    <transcription> <!-- this is transcribed, notated information -->
    <scratch name="flare">
    <line time="1" position="0" /> <!-- lines: transformer, chirps (derivative = (next-cur)/length) -->
    <curve time="3" position="1.4" /> <!-- curve: baby, scribble, etc (derivative = 0) -->
    </scratch>
    </transcription>
    </turntable>
    <mixer>
    <crossfader>
    <performance>
    <hamster>true</hamster>
    <format>xml</format> <!-- xml is better for sparse data -->
    <data>
    <event time="0" value="0" />
    <event time="2.736" value="0" />
    <event time="2.736" value="1" />
    <event time="3.034" value="1" />
    </data>
    </performance>
    <transcription>
    <move time="1" position="center" /> <!-- left is open -->
    <click time="1.5" position="right" /> <!-- left click -->
    <move time="2" position="right" /> <!-- left is closed -->
    <move time="3" position="center" /> <!-- left is open -->
    <crab position="right"> <!-- three click crab -->
    <click time="3.25" />
    <click time="3.50" />
    <click time="3.75" />
    </crab>
    <move time="5" position="right" /> <!-- left is closed -->
    </transcription>
    <crossfader>
    </mixer>
    </composition>
    </sml>
  2. jamiew created this gist Jan 22, 2012.
    69 changes: 69 additions & 0 deletions scratchml_d1.xml
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,69 @@
    <?xml version="1.0"?>
    <sml>
    <meta>
    <origin>
    <name></name>
    <location></location>
    <client></client> <!-- sml generator -->
    <time></time>
    </origin>
    <description></description> <!-- commentary -->
    <tags></tags> <!-- keywords -->
    <tracks>
    <track>
    <deck></deck> <!-- which turntable -->
    <start></start> <!-- when it starts during the performance -->
    <stop></stop> <!-- when it stops during the performance -->
    <name></name>
    <artist></artist>
    <!-- other id3 style data? -->
    </track>
    </tracks>
    </meta>
    <composition>
    <turntable>
    <side>left</side>
    <performance> <!-- this is raw, recorded data -->
    <format>base64</format> <!-- base64 compresses dense, evenly spaced data -->
    <samplerate>
    <!-- this data could be in different formats, depending on the input source (fps, samples, etc) -->
    <audio>44100</audio>
    <buffer>128</buffer>
    </samplerate>
    <data>...bWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=</data>
    </performance>
    <transcription> <!-- this is transcribed, notated information -->
    <scratch name="flare">
    <line time="1" position="0" /> <!-- lines: transformer, chirps (derivative = (next-cur)/length) -->
    <curve time="3" position="1.4" /> <!-- curve: baby, scribble, etc (derivative = 0) -->
    </scratch>
    </transcription>
    </turntable>
    <mixer>
    <crossfader>
    <performance>
    <hamster>true</hamster>
    <format>xml</format> <!-- xml is better for sparse data -->
    <data>
    <event time="0" value="0" />
    <event time="2.736" value="0" />
    <event time="2.736" value="1" />
    <event time="3.034" value="1" />
    </data>
    </performance>
    <transcription>
    <move time="1" position="center" /> <!-- left is open -->
    <click time="1.5" position="right" /> <!-- left click -->
    <move time="2" position="right" /> <!-- left is closed -->
    <move time="3" position="center" /> <!-- left is open -->
    <crab position="right"> <!-- three click crab -->
    <click time="3.25" />
    <click time="3.50" />
    <click time="3.75" />
    </crab>
    <move time="5" position="right" /> <!-- left is closed -->
    </transcription>
    <crossfader>
    </mixer>
    </composition>
    </sml>