--- /dev/null
+##
+##  dart-sounds
+##
+##
+##  Copyright (C) 2011 Christian Pointner <equinox@spreadspace.org>
+##                         
+##  This file is part of dart-sounds.
+##
+##  dart-sounds is free software: you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation, either version 3 of the License, or
+##  any later version.
+##
+##  dart-sounds is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##
+##  You should have received a copy of the GNU General Public License
+##  along with dart-sounds. If not, see <http://www.gnu.org/licenses/>.
+##
+
+ifneq ($(MAKECMDGOALS),distclean)
+include include.mk
+endif
+
+EXECUTABLE := dart-sounds
+
+C_OBJS := dart-sounds.o
+
+C_SRCS := $(C_OBJS:%.o=%.c)
+
+.PHONY: clean cleanall distclean install install-bin uninstall remove
+
+all: $(EXECUTABLE)
+
+%.d: %.c
+       @set -e; rm -f $@; \
+  $(CC) -MM $(CFLAGS) $< > $@.$$$$; \
+  sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
+  rm -f $@.$$$$; echo '(re)building $@'
+
+ifneq ($(MAKECMDGOALS),distclean)
+-include $(C_SRCS:%.c=%.d)
+endif
+
+$(EXECUTABLE): $(C_OBJS)
+       $(CC) $(C_OBJS) -o $@ $(LDFLAGS)
+
+%.o: %.c
+       $(CC) $(CFLAGS) -c $<
+
+strip: $(EXECUTABLE)
+       $(STRIP) -s $(EXECUTABLE)
+
+
+distclean: cleanall
+       find . -name *.o -exec rm -f {} \;
+       find . -name "*.\~*" -exec rm -rf {} \;
+       rm -f include.mk
+       rm -f config.h
+
+clean:
+       rm -f *.o
+       rm -f *.d
+       rm -f *.d.*
+       rm -f $(EXECUTABLE)
+
+INSTALL_TARGETS := install-bin
+REMOVE_TARGETS := remove-bin
+
+install: all $(INSTALL_TARGETS)
+
+install-bin: $(EXECUTABLE)
+       $(INSTALL) -d $(DESTDIR)$(BINDIR)
+       $(INSTALL) -m 755 $(EXECUTABLE) $(DESTDIR)$(BINDIR)
+
+install-man: manpage
+       $(INSTALL) -d $(DESTDIR)$(MANDIR)/man8/
+       $(INSTALL) -m 644 ../doc/$(EXECUTABLE).8 $(DESTDIR)$(MANDIR)/man8/$(EXECUTABLE).8
+
+uninstall: remove
+
+remove: $(REMOVE_TARGETS)
+
+remove-bin:
+       rm -f $(DESTDIR)$(BINDIR)/$(EXECUTABLE)
 
--- /dev/null
+#!/bin/sh
+#
+#  dart-sounds
+#
+#
+#  Copyright (C) 2011 Christian Pointner <equinox@realraum.at>
+#                         
+#  This file is part of dart-sounds.
+#
+#  dart-sounds is free software: you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation, either version 3 of the License, or
+#  any later version.
+#
+#  dart-sounds is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with dart-sounds. If not, see <http://www.gnu.org/licenses/>.
+#
+
+set -e
+
+TARGET=`uname -s`
+EBUILD_COMPAT=0
+
+CFLAGS='-g -O2'
+LDFLAGS='-g -Wall -O2'
+
+PREFIX='/usr/local'
+BINDIR=''
+
+print_usage() {
+  echo "configure --help                    print this"
+  echo "          --target=<TARGET>         build target i.e. Linux (default: autodetect)"
+  echo "          --prefix=<PREFIX>         the installation prefix (default: /usr/local)"
+  echo "          --bindir=<DIR>            the path to the bin directory (default: $PREFIX/bin)"
+}
+
+for arg
+do
+  case $arg in
+  --target=*)
+    TARGET=${arg#--target=}
+  ;;
+  --prefix=*)
+    PREFIX=${arg#--prefix=}
+  ;;
+  --bindir=*)
+    BINDIR=${arg#--bindir=}
+  ;;
+  --ebuild-compat)
+    EBUILD_COMPAT=1
+  ;;
+  --help)
+    print_usage
+    exit 0
+  ;;
+  *)
+    ERRORS="$ERRORS $arg"
+  ;;
+  esac
+done
+
+if [ -n "$ERRORS" ] && [ $EBUILD_COMPAT -ne 1 ]; then
+  for error in $ERRORS; do
+    echo "Unknown argument: $error"
+  done
+
+  print_usage
+  exit 1
+fi
+
+CFLAGS="$CFLAGS $(pkg-config --cflags gstreamer-0.10)"
+LDFLAGS="$LDFLAGS $(pkg-config --libs gstreamer-0.10)"
+
+rm -f include.mk
+rm -f config.h
+case $TARGET in
+  Linux)
+  ;;
+  OpenBSD|FreeBSD|NetBSD|GNU/kFreeBSD)
+    CFLAGS=$CFLAGS' -I/usr/local/include'
+    LDFLAGS=$LDFLAGS' -L/usr/local/lib'
+  ;;
+  *)
+    echo "platform not supported"
+    exit 1;
+  ;;
+esac
+
+if [ -z "$BINDIR" ]; then
+  BINDIR=$PREFIX/bin
+fi
+
+if [ -z "$MANDIR" ]; then
+  MANDIR=$PREFIX/share/man
+fi
+
+cat > include.mk <<EOF
+# this file was created automatically
+# do not edit this file directly
+# use ./configure instead
+
+TARGET := '$TARGET'
+CC := gcc
+CFLAGS := $CFLAGS
+LDFLAGS := $LDFLAGS
+STRIP := strip
+INSTALL := install
+RAGEL := ragel
+
+PREFIX := '$PREFIX'
+BINDIR := '$BINDIR'
+EOF
+
+HOSTNAME=`hostname`
+DATE=`date +"%d.%m.%Y %H:%M:%S %Z"`
+
+cat > config.h <<EOF
+/*
+ * dart-sounds config header
+ *
+ * this file was created automatically
+ * do not edit this file directly
+ * use ./configure instead
+ */
+
+#ifndef DART_SOUNDS_config_h_INCLUDED
+#define DART_SOUNDS_config_h_INCLUDED
+
+#define VERSION_STRING_0 "dart-sounds version $VERSION"
+#define VERSION_STRING_1 "built on $HOSTNAME, $DATE"
+
+#define TARGET "$TARGET"
+#define PREFIX "$PREFIX"
+#define BINDIR "$BINDIR"
+
+#endif
+EOF
+
+exit 0
 
--- /dev/null
+/*
+ *  dart-sounds
+ *
+ *
+ *  Copyright (C) 2011 Christian Pointner <equinox@realraum.at>
+ *                         
+ *  This file is part of dart-sounds.
+ *
+ *  dart-sounds is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  any later version.
+ *
+ *  dart-sounds is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with dart-sounds. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include <gst/gst.h>
+#include <glib.h>
+
+static gboolean bus_call (GstBus *bus, GstMessage *msg, gpointer  data)
+{
+  GMainLoop *loop = (GMainLoop *) data;
+  
+  switch (GST_MESSAGE_TYPE (msg)) 
+  {
+     case GST_MESSAGE_EOS:
+      g_print ("End of stream\n");
+      g_main_loop_quit (loop);
+      break;
+
+    case GST_MESSAGE_ERROR: {
+      gchar  *debug;
+      GError *error;
+
+      gst_message_parse_error (msg, &error, &debug);
+      g_free (debug);
+
+      g_printerr ("Error: %s\n", error->message);
+      g_error_free (error);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    default:
+      break;
+  }
+
+  return TRUE;
+}
+
+static void on_pad_added (GstElement *element, GstPad *pad, gpointer data)
+{
+  GstPad *sinkpad;
+  GstElement *decoder = (GstElement *) data;
+  
+  g_print ("Dynamic pad created, linking demuxer/decoder\n");
+  
+  sinkpad = gst_element_get_static_pad (decoder, "sink");
+  gst_pad_link (pad, sinkpad);
+  gst_object_unref (sinkpad);
+}
+
+int main (int argc,  char *argv[])
+{
+  GMainLoop *loop;
+
+  GstElement *pipeline, *source, *demuxer, *decoder, *conv, *sink;
+  GstBus *bus;
+
+  gst_init (&argc, &argv);
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  /* Check input arguments */
+  if (argc != 2) {
+    g_printerr ("Usage: %s <Ogg/Vorbis filename>\n", argv[0]);
+    return -1;
+  }
+
+  pipeline = gst_pipeline_new ("audio-player");
+  source   = gst_element_factory_make ("filesrc",       "file-source");
+  demuxer  = gst_element_factory_make ("oggdemux",      "ogg-demuxer");
+  decoder  = gst_element_factory_make ("vorbisdec",     "vorbis-decoder");
+  conv     = gst_element_factory_make ("audioconvert",  "converter");
+  sink     = gst_element_factory_make ("autoaudiosink", "audio-output");
+
+  if (!pipeline || !source || !demuxer || !decoder || !conv || !sink) {
+    g_printerr ("One element could not be created. Exiting.\n");
+    return -1;
+  }
+
+  g_object_set (G_OBJECT (source), "location", argv[1], NULL);
+
+  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
+  gst_bus_add_watch (bus, bus_call, loop);
+  gst_object_unref (bus);
+
+  gst_bin_add_many (GST_BIN (pipeline),
+                    source, demuxer, decoder, conv, sink, NULL);
+
+  gst_element_link (source, demuxer);
+  gst_element_link_many (decoder, conv, sink, NULL);
+  g_signal_connect (demuxer, "pad-added", G_CALLBACK (on_pad_added), decoder);
+
+  g_print ("Now playing: %s\n", argv[1]);
+  gst_element_set_state (pipeline, GST_STATE_PLAYING);
+
+  g_print ("Running...\n");
+  g_main_loop_run (loop);
+
+  g_print ("Returned, stopping playback\n");
+  gst_element_set_state (pipeline, GST_STATE_NULL);
+
+  g_print ("Deleting pipeline\n");
+  gst_object_unref (GST_OBJECT (pipeline));
+
+  return 0;
+}