+mac:~ chris$ ls vamp*
+vamp-plugin-sdk-2.1.tar.gz
+mac:~ chris$ tar xvzf vamp-plugin-sdk-2.1.tar.gz
+ ... lots of output ...
+mac:~ chris$ mv vamp-plugin-sdk-2.1 vamp-plugin-sdk
+mac:~ chris$
+
+
+At this point you really ought to read the ''README'' file in the SDK directory, and the ''README.osx'' file in the SDK's ''build'' subdirectory. But for the tutorial we'll skip that and plunge in and build the SDK directly.
+
+We'll only build the SDK libraries and example plugins. We won't build the test host, because it requires an additional library (libsndfile). We'll download a pre-compiled binary of the test host later instead. (We could download pre-compiled library binaries too, but since we still need the SDK for the header files, we might as well compile it in place.)
+
+
+mac:~ chris$ cd vamp-plugin-sdk
+mac:~/vamp-plugin-sdk chris$ make -f build/Makefile.osx sdk
+ ... lots of output ...
+mac:~/vamp-plugin-sdk chris$ make -f build/Makefile.osx plugins
+ ... lots of output ...
+mac:~/vamp-plugin-sdk chris$
+
+
+==== 2. Copy the skeleton files to our new project home ====
+
+We're going to build our plugin in a new directory called ''tutorial'' in our home directory.
+
+
+mac:~/vamp-plugin-sdk chris$ cd
+mac:~ chris$ mkdir tutorial
+mac:~ chris$ cd tutorial
+mac:~/tutorial chris$
+
+
+The starting point will be the set of skeleton files provided with the SDK. These consist of a valid "working" Vamp plugin that happens to do nothing at all.
+
+
+mac:~/tutorial chris$ cp ../vamp-plugin-sdk/tutorial/* .
+mac:~/tutorial chris$ ls
+Makefile.skeleton MyPlugin.h vamp-plugin.list
+MyPlugin.cpp plugins.cpp vamp-plugin.map
+mac:~/tutorial chris$
+
+
+The skeleton plugin is contained in the files ''MyPlugin.cpp'' and ''MyPlugin.h''. These two files implement a single C++ class, called ''MyPlugin''. For the sake of brevity we'll leave these names unchanged, but you might prefer to change them! To do so, rename the two files and replace every occurrence of the text ''MyPlugin'' in both of them, and in ''plugins.cpp'', with your preferred plugin class name.
+
+The file ''plugins.cpp'' contains the entry point for the plugin library. A library can hold more than one plugin, and the job of ''plugins.cpp'' is to provide a single known public function (''vampGetPluginDescriptor'') which the host can use to find out what plugins are available in the library. The skeleton version of ''plugins.cpp'' just returns the single MyPlugin plugin class.
+
+Note that it makes absolutely no difference to the operation of the plugin what its class is called; MyPlugin is (in purely technical terms) as good a name as any. It also shouldn't matter if two different libraries happen to use the same class name. But if you have more than one plugin in the same library, they'll need to have different class names then!
+
+==== 3. Get the skeleton build working ====
+
+The first thing we'll do with this skeleton project is build it into a "working" (although pointless) plugin.
+
+To build it we're going to use the tool ''make'', which takes a set of production rules described in a ''Makefile'' and uses them to turn source files into targets, in this case with the help of the C++ compiler.
+
+The skeleton project contains a file Makefile.skeleton which will be the basis of our Makefile.
+
+mac:~/tutorial chris$ cp Makefile.skeleton Makefile
+
+Now, open the Makefile in the text editor; we need to edit it to suit our new project. We haven't changed the names of any of the skeleton source files, so we don't need to edit those, but we do need to uncomment the lines that are specific to compiling on OS/X. These appear in the skeleton file as:
+
+## Uncomment these for an OS/X native build using command-line tools:
+
+# CXXFLAGS = -I$(VAMP_SDK_DIR) -Wall -fPIC
+# PLUGIN_EXT = .dylib
+# PLUGIN = $(PLUGIN_LIBRARY_NAME)$(PLUGIN_EXT)
+# LDFLAGS = -dynamiclib -install_name $(PLUGIN) $(VAMP_SDK_DIR)/libvamp-sdk.a -exported_symbols_list vamp-plugin.list
+
+Remove the ''#'' characters from the starts of the four lines in that block:
+
+## Uncomment these for an OS/X native build using command-line tools:
+
+CXXFLAGS = -I$(VAMP_SDK_DIR) -Wall -fPIC
+PLUGIN_EXT = .dylib
+PLUGIN = $(PLUGIN_LIBRARY_NAME)$(PLUGIN_EXT)
+LDFLAGS = -dynamiclib -install_name $(PLUGIN) $(VAMP_SDK_DIR)/libvamp-sdk.a -exported_symbols_list vamp-plugin.list
+
+Then, without changing anything else, save the file and run ''make''.
+
+
+mac:~/tutorial chris$
+g++ -I../vamp-plugin-sdk -Wall -fPIC -c -o MyPlugin.o MyPlugin.cpp
+g++ -I../vamp-plugin-sdk -Wall -fPIC -c -o plugins.o plugins.cpp
+g++ -o myplugins.dylib MyPlugin.o plugins.o -dynamiclib -install_name myplugins.dylib ../vamp-plugin-sdk/libvamp-sdk.a -exported_symbols_list vamp-plugin.list
+mac:~/tutorial chris$
+
+
+You should now have a plugin library file called ''myplugins.dylib'', as well as some ''.o'' files created during the build process.
+
+mac:~/tutorial chris$ ls
+Makefile MyPlugin.o vamp-plugin.list
+Makefile.skeleton myplugins.dylib vamp-plugin.map
+MyPlugin.cpp plugins.cpp
+MyPlugin.h plugins.o
+mac:~/tutorial chris$
+
+
+This ''myplugins.dylib'' file is a valid and complete Vamp plugin library. It doesn't do anything worthwhile, but it can be loaded and "used" in any host. It defines a single Vamp plugin, whose identifier is "myplugin" (this is coded into the MyPlugin.cpp file, we'll be changing it later).
+
+==== 4. Check that the plugin works with some test programs ====
+
+The next thing to do is gather some programs we can use to test our plugin, so that we can check it built correctly, and so that we'll be well placed to test it properly when it actually does something.
+
+The first one is the ''vamp-simple-host'' that is part of the Vamp SDK. This is the part of the SDK that we didn't build in step 1 (because of its dependency on libsndfile). Download it from the "pre-compiled library and host binaries" link at http://vamp-plugins.org/develop.html; the file you're downloading will be ''vamp-plugin-sdk-2.1-binaries-osx-universal.tar.gz''.
+
+==== 5. Do some actual calculations! ====
+
+==== 6. Fill in descriptions and other metadata ====
+
+==== 7. What else should we do? ====
+
diff -r bbcf0a2e0369 -r 4b4db9230e94 wiki/data/pages/playground/playground.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wiki/data/pages/playground/playground.txt Wed Sep 23 15:09:53 2009 +0000
@@ -0,0 +1,1 @@
+====== PlayGround ======
diff -r bbcf0a2e0369 -r 4b4db9230e94 wiki/data/pages/start.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wiki/data/pages/start.txt Wed Sep 23 15:09:53 2009 +0000
@@ -0,0 +1,9 @@
+
+
+====== Welcome to the Vamp plugins wiki! ======
+
+
+This is a public wiki, available for any kind of material related to [[http://vamp-plugins.org|Vamp audio analysis plugins]] and their use and development.
+
+If you have something you'd like to add, please, sign up and get editing!
+
diff -r bbcf0a2e0369 -r 4b4db9230e94 wiki/data/pages/wiki/dokuwiki.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wiki/data/pages/wiki/dokuwiki.txt Wed Sep 23 15:09:53 2009 +0000
@@ -0,0 +1,67 @@
+====== DokuWiki ======
+
+[[doku>wiki:dokuwiki|{{wiki:dokuwiki-128.png }}]] DokuWiki is a standards compliant, simple to use [[wp>Wiki]], mainly aimed at creating documentation of any kind. It is targeted at developer teams, workgroups and small companies. It has a simple but powerful [[wiki:syntax]] which makes sure the datafiles remain readable outside the Wiki and eases the creation of structured texts. All data is stored in plain text files -- no database is required.
+
+Read the [[doku>manual|DokuWiki Manual]] to unleash the full power of DokuWiki.
+
+===== Download =====
+
+DokuWiki is available at http://www.splitbrain.org/go/dokuwiki
+
+
+===== Read More =====
+
+All documentation and additional information besides the [[syntax|syntax description]] is maintained in the DokuWiki at [[doku>|www.dokuwiki.org]].
+
+**About DokuWiki**
+
+ * [[doku>features|A feature list]] :!:
+ * [[doku>users|Happy Users]]
+ * [[doku>press|Who wrote about it]]
+ * [[doku>blogroll|What Bloggers think]]
+ * [[http://www.wikimatrix.org/show/DokuWiki|Compare it with other wiki software]]
+
+**Installing DokuWiki**
+
+ * [[doku>requirements|System Requirements]]
+ * [[http://www.splitbrain.org/go/dokuwiki|Download DokuWiki]] :!:
+ * [[doku>changes|Change Log]]
+ * [[doku>Install|How to install or upgrade]] :!:
+ * [[doku>config|Configuration]]
+
+**Using DokuWiki**
+
+ * [[doku>syntax|Wiki Syntax]]
+ * [[doku>manual|The manual]] :!:
+ * [[doku>FAQ|Frequently Asked Questions (FAQ)]]
+ * [[doku>glossary|Glossary]]
+ * [[http://search.dokuwiki.org|Search for DokuWiki help and documentation]]
+
+**Customizing DokuWiki**
+
+ * [[doku>tips|Tips and Tricks]]
+ * [[doku>Template|How to create and use templates]]
+ * [[doku>plugins|Installing plugins]]
+ * [[doku>development|Development Resources]]
+
+**DokuWiki Feedback and Community**
+
+ * [[doku>mailinglist|Join the mailing list]] :!:
+ * [[http://forum.dokuwiki.org|Check out the user forum]]
+ * [[doku>irc|Talk to other users in the IRC channel]]
+ * [[http://bugs.splitbrain.org/index.php?project=1|Submit bugs and feature wishes]]
+ * [[http://www.wikimatrix.org/forum/viewforum.php?id=10|Share your experiences in the WikiMatrix forum]]
+ * [[doku>thanks|Some humble thanks]]
+
+
+===== Copyright =====
+
+2004-2009 (c) Andreas Gohr
+ * This is a list
+ * The second item
+ * You may have different levels
+ * Another item
+
+ - The same list but ordered
+ - Another item
+ - Just use indention for deeper levels
+ - That's it
+
+
+===== Smileys =====
+
+DokuWiki converts commonly used [[wp>emoticon]]s to their graphical equivalents. More smileys can be placed in the ''smiley'' directory and configured in the ''conf/smileys.conf'' file. Here is an overview of Smileys included in DokuWiki.
+
+ * 8-) %% 8-) %%
+ * 8-O %% 8-O %%
+ * :-( %% :-( %%
+ * :-) %% :-) %%
+
+ * =) %% =) %%
+ * :-/ %% :-/ %%
+ * :-\ %% :-\ %%
+ * :-? %% :-? %%
+ * :-D %% :-D %%
+ * :-P %% :-P %%
+ * :-O %% :-O %%
+ * :-X %% :-X %%
+ * :-| %% :-| %%
+ * ;-) %% ;-) %%
+ * ^_^ %% ^_^ %%
+ * :?: %% :?: %%
+ * :!: %% :!: %%
+ * LOL %% LOL %%
+ * FIXME %% FIXME %%
+ * DELETEME %% DELETEME %%
+
+===== Typography =====
+
+[[DokuWiki]] can convert simple text characters to their typographically correct entities. Here is an example of recognized characters.
+
+-> <- <-> => <= <=> >> << -- --- 640x480 (c) (tm) (r)
+"He thought 'It's a man's world'..."
+
+
+-> <- <-> => <= <=> >> << -- --- 640x480 (c) (tm) (r)
+"He thought 'It's a man's world'..."
+
+
+Please note: These conversions can be turned off through a [[doku>config:typography|config option]] and a [[doku>entities|pattern file]].
+
+===== Quoting =====
+
+Some times you want to mark some text to show it's a reply or comment. You can use the following syntax:
+
+ I think we should do it
+
+ > No we shouldn't
+
+ >> Well, I say we should
+
+ > Really?
+
+ >> Yes!
+
+ >>> Then lets do it!
+
+I think we should do it
+
+> No we shouldn't
+
+>> Well, I say we should
+
+> Really?
+
+>> Yes!
+
+>>> Then lets do it!
+
+===== Tables =====
+
+DokuWiki supports a simple syntax to create tables.
+
+^ Heading 1 ^ Heading 2 ^ Heading 3 ^
+| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+| Row 2 Col 1 | some colspan (note the double pipe) ||
+| Row 3 Col 1 | Row 2 Col 2 | Row 2 Col 3 |
+
+Table rows have to start and end with a ''|'' for normal rows or a ''^'' for headers.
+
+ ^ Heading 1 ^ Heading 2 ^ Heading 3 ^
+ | Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+ | Row 2 Col 1 | some colspan (note the double pipe) ||
+ | Row 3 Col 1 | Row 2 Col 2 | Row 2 Col 3 |
+
+To connect cells horizontally, just make the next cell completely empty as shown above. Be sure to have always the same amount of cell separators!
+
+Vertical tableheaders are possible, too.
+
+| ^ Heading 1 ^ Heading 2 ^
+^ Heading 3 | Row 1 Col 2 | Row 1 Col 3 |
+^ Heading 4 | no colspan this time | |
+^ Heading 5 | Row 2 Col 2 | Row 2 Col 3 |
+
+As you can see, it's the cell separator before a cell which decides about the formatting:
+
+ | ^ Heading 1 ^ Heading 2 ^
+ ^ Heading 3 | Row 1 Col 2 | Row 1 Col 3 |
+ ^ Heading 4 | no colspan this time | |
+ ^ Heading 5 | Row 2 Col 2 | Row 2 Col 3 |
+
+Note: Vertical spans (rowspan) are not possible.
+
+You can align the table contents, too. Just add at least two whitespaces at the opposite end of your text: Add two spaces on the left to align right, two spaces on the right to align left and two spaces at least at both ends for centered text.
+
+^ Table with alignment ^^^
+| right| center |left |
+|left | right| center |
+| xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx |
+
+This is how it looks in the source:
+
+ ^ Table with alignment ^^^
+ | right| center |left |
+ |left | right| center |
+ | xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx |
+
+===== Non-parsed Blocks =====
+
+You can include non-parsed blocks into your documents by either indenting them by at least two spaces (like used for the previous examples) or by using the tags ''code'' or ''file''.
+
+
+This is preformatted code all spaces are preserved: like <-this
+
+
+
+/**
+ * The HelloWorldApp class implements an application that
+ * simply displays "Hello World!" to the standard output.
+ */
+class HelloWorldApp {
+ public static void main(String[] args) {
+ System.out.println("Hello World!"); //Display the string.
+ }
+}
+
+
+The following language strings are currently recognized: //abap, actionscript-french, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, bash, basic4gl, blitzbasic, bnf, boo, c, c_mac, caddcl, cadlisp, cfdg, cfm, cil, cobol, cpp, cpp-qt, csharp, css, delphi, diff, div, dos, dot, d, eiffel, fortran, freebasic, genero, glsl, gml, gnuplot, groovy, gettext, haskell, html, idl, ini, inno, io, java5, java, javascript, kixtart, klonec, klonecpp, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml-brief, ocaml, oobas, oracle8, pascal, perl, per, php-brief, php, pic16, plsql, povray, powershell, progress, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, typoscript, vbnet, vb, verilog, vhdl, visualfoxpro, winbatch, xml, xorg_conf, xpp, z80//
+
+
+===== RSS/ATOM Feed Aggregation =====
+[[DokuWiki]] can integrate data from external XML feeds. For parsing the XML feeds, [[http://simplepie.org/|SimplePie]] is used. All formats understood by SimplePie can be used in DokuWiki as well. You can influence the rendering by multiple additional space separated parameters:
+
+^ Parameter ^ Description ^
+| any number | will be used as maximum number items to show, defaults to 8 |
+| reverse | display the last items in the feed first |
+| author | show item authors names |
+| date | show item dates |
+| description| show the item description. If [[doku>config:htmlok|HTML]] is disabled all tags will be stripped |
+| //n//[dhm] | refresh period, where d=days, h=hours, m=minutes. (e.g. 12h = 12 hours). |
+
+The refresh period defaults to 4 hours. Any value below 10 minutes will be treated as 10 minutes. [[wiki:DokuWiki]] will generally try to supply a cached version of a page, obviously this is inappropriate when the page contains dynamic external content. The parameter tells [[wiki:DokuWiki]] to re-render the page if it is more than //refresh period// since the page was last rendered.
+
+**Example:**
+
+ {{rss>http://slashdot.org/index.rss 5 author date 1h }}
+
+{{rss>http://slashdot.org/index.rss 5 author date 1h }}
+
+
+===== Embedding HTML and PHP =====
+
+You can embed raw HTML or PHP code into your documents by using the ''html'' or ''php'' tags like this:
+
+
+This is some inline HTML
+
+
+And this is some block HTML
+
+
+
+
+This is some inline HTML
+
+
+And this is some block HTML
+ + +
+
+echo 'A logo generated by PHP:';
+echo '
';
+echo '(generated inline HTML)';
+
+
+echo 'The same, but inside a block level element: ';
+echo ' . ')
';
+echo '
';
+
+
+
+The same, but inside a block level element: | '; +echo '
+ +
+ +←
+ + + +