aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/Fifo.h31
-rw-r--r--include/Input.h56
-rw-r--r--include/InputFile.h29
-rw-r--r--include/InputStream.h83
-rw-r--r--include/Makefile223
-rw-r--r--include/Makefile.am21
-rw-r--r--include/Makefile.in223
-rw-r--r--include/ReadFlac.h88
-rw-r--r--include/ReadFlac.h.seekable93
-rw-r--r--include/ReadMad.h125
-rw-r--r--include/ReadRaw.h154
-rw-r--r--include/ReadVorbis.h99
-rw-r--r--include/Readsf.h62
-rw-r--r--include/generic.h48
-rw-r--r--include/main.h158
-rw-r--r--include/stamp-h2.in0
16 files changed, 1493 insertions, 0 deletions
diff --git a/include/Fifo.h b/include/Fifo.h
new file mode 100644
index 0000000..c060079
--- /dev/null
+++ b/include/Fifo.h
@@ -0,0 +1,31 @@
+#ifndef _FIFO_H_
+#define _FIFO_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include <memory.h>
+#include <pthread.h>
+
+class Fifo
+{
+ public:
+ Fifo();
+ Fifo(unsigned int size);
+ ~Fifo();
+ void Flush();
+ int IsAlloc(void) { return astate; }
+ int ReAlloc(unsigned int size);
+ void * Read(void *buf, unsigned int &len);
+ int Write(void *buf, unsigned int len);
+ unsigned int FreeSpace(void);
+ unsigned int UsedSpace(void);
+ private:
+ char *buffer;
+ unsigned int astate;
+ unsigned int totsize, start, datasize;
+ pthread_mutex_t mut;
+};
+#endif
diff --git a/include/Input.h b/include/Input.h
new file mode 100644
index 0000000..960bbb0
--- /dev/null
+++ b/include/Input.h
@@ -0,0 +1,56 @@
+#ifndef _INPUT_H_
+#define _INPUT_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <sys/types.h> // open
+#include <sys/stat.h> // open
+#include <fcntl.h> // open
+#include <unistd.h> // read
+#include <netdb.h> // for gethostbyname
+#include <sys/socket.h> // socket
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+
+#include <string> // save filename
+using namespace std;
+#include "generic.h"
+
+class Input {
+ public:
+ Input();
+ virtual ~ Input();
+
+ virtual int Open(const char *pathname); // open file or stream and return formt
+ virtual int Close(); // close or disconnect
+ virtual int Read(void *buf, unsigned int count); //read into buf count times.
+
+ virtual long SeekSet(long offset); // lseek using SEEK_SET
+ virtual long SeekCur(long offset); // lseek using SEEK_CUR
+ virtual long SeekEnd(long offset); // lseek using SEEK_END
+ //int getEof() { return eof(fd); }
+ virtual float get_cachesize(); // return amount of buffer that is used. 0.0 for InputFile
+
+ virtual bool get_recover( ) { return recover; }
+ void set_recover( bool x) { recover =x;}
+
+
+ void SetVerbosity(int d) { verbosity = d; } // set debug level 0-3 protected:
+ int get_fd() { return fd;}
+ int get_format() { return format;}
+ const char * get_filename() { return filename.c_str(); }
+
+ protected:
+ int fd; //file descriptor for files and sockets
+ int format; //what format? OGG,MP3,NEXT etc. see defines above
+ int verbosity; //how much debugging/info to print
+ //we need to be able to set this dynamically for http
+ bool recover; // whether to recover connections on the net
+ string filename; // store the path/filename of what is opened for reading
+};
+#endif
diff --git a/include/InputFile.h b/include/InputFile.h
new file mode 100644
index 0000000..35f180c
--- /dev/null
+++ b/include/InputFile.h
@@ -0,0 +1,29 @@
+#ifndef _INPUTFILE_H_
+#define _INPUTFILE_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include "Input.h"
+
+class InputFile : public Input {
+ public:
+ InputFile();
+ virtual ~InputFile();
+
+ virtual int Open( const char *pathname );
+ virtual int Close();
+ virtual int Read( void *buf, unsigned int count );
+
+ virtual long SeekSet ( long offset );
+ virtual long SeekCur ( long offset );
+ virtual long SeekEnd ( long offset );
+ virtual float get_cachesize() { return 0.0; };
+ virtual bool get_recover( ) { return false; }
+ private:
+
+
+};
+#endif
diff --git a/include/InputStream.h b/include/InputStream.h
new file mode 100644
index 0000000..704fed1
--- /dev/null
+++ b/include/InputStream.h
@@ -0,0 +1,83 @@
+#ifndef _INPUTSTREAM_H_
+#define _INPUTSTREAM_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Input.h"
+#include "Fifo.h"
+
+#include <string>
+#include <pthread.h>
+#include <dlfcn.h>
+
+
+#include <sys/types.h>
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+#include <stdlib.h>
+#ifdef UNIX
+#include <sys/time.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#define SOCKET_ERROR -1
+#else
+#include <winsock.h>
+#endif
+
+using namespace std;
+
+class InputStream : public Input {
+ public:
+ InputStream ();
+ virtual ~InputStream();
+
+ virtual int Open( const char *pathname );
+ virtual int Close();
+ virtual int Read( void *buf, unsigned int count );
+
+ virtual long SeekSet ( long offset );
+ virtual long SeekCur ( long offset );
+ virtual long SeekEnd ( long offset );
+ virtual float get_cachesize();
+ virtual bool get_recover( ) { return recover; }
+
+ pthread_mutex_t *get_mutex() { return &mut;}
+ pthread_cond_t *get_condition(){ return &cond;}
+
+ void set_threaded( bool b ) { threaded = b;}
+
+ Fifo * get_fifo() { return infifo;}
+ bool get_quit() { return quit;}
+
+ int socket_connect ( );
+
+ private:
+ //int socket_connect (string hostname, string mountpoint, int portno);
+ //int socket_connect (char *hostname, char *mountpoint, int portno);
+ // connects to socket and checks for ice or shout
+ // returns type of stream(ogg, mp3) or -1 for failure
+
+ string ParseHttp( string str, string parse ); // parse x-audio* vars from icecast
+ int SetUrl (const char *url); // breaks http://server:port/mount down to hostname,port,mountpoint
+ // return 1 for success, 0 for failure
+
+ int get_line( char * str, int sock, int maxget);
+
+ Fifo *infifo; // fifo for thread buffering
+ string hostname; // hostname of URL
+ string mountpoint; // mountpoint for Icecast URL
+ int port; // port number URL
+ bool threaded; // if thread is running or not, true if running
+ bool quit; // if we should quit thread or not
+
+ pthread_mutex_t mut;
+ pthread_cond_t cond;
+ pthread_t childthread;
+
+};
+#endif
diff --git a/include/Makefile b/include/Makefile
new file mode 100644
index 0000000..6db9da2
--- /dev/null
+++ b/include/Makefile
@@ -0,0 +1,223 @@
+# Generated automatically from Makefile.in by configure.
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = /bin/sh
+
+srcdir = .
+top_srcdir = ..
+prefix = /usr/local
+exec_prefix = ${prefix}
+
+bindir = ${exec_prefix}/bin
+sbindir = ${exec_prefix}/sbin
+libexecdir = ${exec_prefix}/libexec
+datadir = ${prefix}/share
+sysconfdir = ${prefix}/etc
+sharedstatedir = ${prefix}/com
+localstatedir = ${prefix}/var
+libdir = ${exec_prefix}/lib
+infodir = ${prefix}/info
+mandir = ${prefix}/man
+includedir = ${prefix}/include
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/readanysf
+pkglibdir = $(libdir)/readanysf
+pkgincludedir = $(includedir)/readanysf
+
+top_builddir = ..
+
+ACLOCAL = aclocal-1.4
+AUTOCONF = autoconf
+AUTOMAKE = automake-1.4
+AUTOHEADER = autoheader
+
+INSTALL = /bin/install -c
+INSTALL_PROGRAM = ${INSTALL} $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_SCRIPT = ${INSTALL_PROGRAM}
+transform = s,x,x,
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = i686-pc-linux-gnu
+host_triplet = i686-pc-linux-gnu
+AS = @AS@
+CC = gcc
+CXX = g++
+DLLTOOL = @DLLTOOL@
+ECHO = echo
+EXEEXT =
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LN_S = ln -s
+MAKEINFO = makeinfo
+NO_PREFIX_PACKAGE_DATA_DIR = share/readanysf
+NO_PREFIX_PACKAGE_DOC_DIR = doc/readanysf
+NO_PREFIX_PACKAGE_HELP_DIR = share/readanysf/help
+NO_PREFIX_PACKAGE_MENU_DIR = share/readanysf
+NO_PREFIX_PACKAGE_PIXMAPS_DIR = share/readanysf/pixmaps
+OBJDUMP = @OBJDUMP@
+OBJEXT = o
+PACKAGE = readanysf
+PACKAGE_DATA_DIR = /usr/local/share/readanysf
+PACKAGE_DOC_DIR = /usr/local/doc/readanysf
+PACKAGE_HELP_DIR = /usr/local/share/readanysf/help
+PACKAGE_MENU_DIR = /usr/local/share/readanysf
+PACKAGE_PIXMAPS_DIR = /usr/local/share/readanysf/pixmaps
+RANLIB = ranlib
+STRIP = strip
+VERSION = 0.13
+
+readanysf_includedir = $(pkgincludedir)
+
+readanysf_include_DATA = Fifo.h Input.h InputFile.h InputStream.h Readsf.h ReadRaw.h generic.h main.h ReadMad.h ReadVorbis.h
+
+
+EXTRA_DIST = $(readanysf_include_DATA)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES =
+DATA = $(readanysf_include_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+install-readanysf_includeDATA: $(readanysf_include_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(readanysf_includedir)
+ @list='$(readanysf_include_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(readanysf_includedir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(readanysf_includedir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(readanysf_includedir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(readanysf_includedir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-readanysf_includeDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(readanysf_include_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(readanysf_includedir)/$$p; \
+ done
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = include
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu include/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-readanysf_includeDATA
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-readanysf_includeDATA
+uninstall: uninstall-am
+all-am: Makefile $(DATA)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(readanysf_includedir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: uninstall-readanysf_includeDATA install-readanysf_includeDATA \
+tags distdir info-am info dvi-am dvi check check-am installcheck-am \
+installcheck install-exec-am install-exec install-data-am install-data \
+install-am install uninstall-am uninstall all-redirect all-am all \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644
index 0000000..f82066e
--- /dev/null
+++ b/include/Makefile.am
@@ -0,0 +1,21 @@
+## Process this file with automake to produce Makefile.in
+
+## Created by Anjuta - will be overwritten
+## If you don't want it to overwrite it,
+## Please disable it in the Anjuta project configuration
+
+readanysf_includedir = $(pkgincludedir)
+
+readanysf_include_DATA = \
+ Fifo.h\
+ Input.h\
+ InputFile.h\
+ InputStream.h\
+ Readsf.h\
+ ReadRaw.h\
+ generic.h\
+ main.h\
+ ReadMad.h\
+ ReadVorbis.h
+
+EXTRA_DIST = $(readanysf_include_DATA)
diff --git a/include/Makefile.in b/include/Makefile.in
new file mode 100644
index 0000000..607c754
--- /dev/null
+++ b/include/Makefile.in
@@ -0,0 +1,223 @@
+# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = ..
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+host_alias = @host_alias@
+host_triplet = @host@
+AS = @AS@
+CC = @CC@
+CXX = @CXX@
+DLLTOOL = @DLLTOOL@
+ECHO = @ECHO@
+EXEEXT = @EXEEXT@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+NO_PREFIX_PACKAGE_DATA_DIR = @NO_PREFIX_PACKAGE_DATA_DIR@
+NO_PREFIX_PACKAGE_DOC_DIR = @NO_PREFIX_PACKAGE_DOC_DIR@
+NO_PREFIX_PACKAGE_HELP_DIR = @NO_PREFIX_PACKAGE_HELP_DIR@
+NO_PREFIX_PACKAGE_MENU_DIR = @NO_PREFIX_PACKAGE_MENU_DIR@
+NO_PREFIX_PACKAGE_PIXMAPS_DIR = @NO_PREFIX_PACKAGE_PIXMAPS_DIR@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_DATA_DIR = @PACKAGE_DATA_DIR@
+PACKAGE_DOC_DIR = @PACKAGE_DOC_DIR@
+PACKAGE_HELP_DIR = @PACKAGE_HELP_DIR@
+PACKAGE_MENU_DIR = @PACKAGE_MENU_DIR@
+PACKAGE_PIXMAPS_DIR = @PACKAGE_PIXMAPS_DIR@
+RANLIB = @RANLIB@
+STRIP = @STRIP@
+VERSION = @VERSION@
+
+readanysf_includedir = $(pkgincludedir)
+
+readanysf_include_DATA = Fifo.h Input.h InputFile.h InputStream.h Readsf.h ReadRaw.h generic.h main.h ReadMad.h ReadVorbis.h
+
+
+EXTRA_DIST = $(readanysf_include_DATA)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = ../config.h
+CONFIG_CLEAN_FILES =
+DATA = $(readanysf_include_DATA)
+
+DIST_COMMON = Makefile.am Makefile.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+
+install-readanysf_includeDATA: $(readanysf_include_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(readanysf_includedir)
+ @list='$(readanysf_include_DATA)'; for p in $$list; do \
+ if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(readanysf_includedir)/$$p"; \
+ $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(readanysf_includedir)/$$p; \
+ else if test -f $$p; then \
+ echo " $(INSTALL_DATA) $$p $(DESTDIR)$(readanysf_includedir)/$$p"; \
+ $(INSTALL_DATA) $$p $(DESTDIR)$(readanysf_includedir)/$$p; \
+ fi; fi; \
+ done
+
+uninstall-readanysf_includeDATA:
+ @$(NORMAL_UNINSTALL)
+ list='$(readanysf_include_DATA)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(readanysf_includedir)/$$p; \
+ done
+tags: TAGS
+TAGS:
+
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+
+subdir = include
+
+distdir: $(DISTFILES)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(top_distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu include/Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+install-exec-am:
+install-exec: install-exec-am
+
+install-data-am: install-readanysf_includeDATA
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-readanysf_includeDATA
+uninstall: uninstall-am
+all-am: Makefile $(DATA)
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(readanysf_includedir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-generic clean-am
+ -rm -f libtool
+
+distclean: distclean-am
+
+maintainer-clean-am: maintainer-clean-generic distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+
+.PHONY: uninstall-readanysf_includeDATA install-readanysf_includeDATA \
+tags distdir info-am info dvi-am dvi check check-am installcheck-am \
+installcheck install-exec-am install-exec install-data-am install-data \
+install-am install uninstall-am uninstall all-redirect all-am all \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/include/ReadFlac.h b/include/ReadFlac.h
new file mode 100644
index 0000000..0d75e60
--- /dev/null
+++ b/include/ReadFlac.h
@@ -0,0 +1,88 @@
+/*
+ * readanysf~ external for pd.
+ *
+ * Copyright (C) 2003, 2004 August Black
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * ReadFlac.h
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef READ_FLAC
+
+#ifndef _READFLAC_H
+#define _READFLAC_H
+
+extern "C" {
+#include "FLAC/stream_decoder.h"
+};
+
+#include "Readsf.h"
+#include "generic.h"
+
+class ReadFlac : public Readsf {
+ public:
+ ReadFlac( Input *input);
+ virtual ~ReadFlac();
+ virtual bool Initialize();
+ virtual int Decode(float *buffer, int size);
+ virtual bool Rewind();
+ virtual bool PCM_seek(long bytes);
+ virtual bool TIME_seek(double seconds);
+
+ protected:
+ bool needs_seek;
+ FLAC__uint64 seek_sample;
+ unsigned samples_in_reservoir;
+ bool abort_flag;
+ FLAC__StreamDecoder *decoder;
+ FLAC__StreamMetadata streaminfo;
+ FLAC__int16 reservoir[FLAC__MAX_BLOCK_SIZE * 2 * 2]; // *2 for max channels, another *2 for overflow
+ //unsigned char output[576 * 2 * (16/8)]; // *2 for max channels, (16/8) for max bytes per sample
+
+ unsigned lengthInMsec() { return (unsigned)((FLAC__uint64)1000 * streaminfo.data.stream_info.total_samples / streaminfo.data.stream_info.sample_rate); }
+ private:
+ void ErrorCheck(int state);
+ long filelength;
+ void cleanup();
+
+
+
+ static FLAC__StreamDecoderReadStatus readCallback_(const FLAC__StreamDecoder *decoder,
+ FLAC__byte buffer[],
+ unsigned *bytes,
+ void *client_data);
+
+ static FLAC__StreamDecoderWriteStatus writeCallback_(const FLAC__StreamDecoder *decoder,
+ const FLAC__Frame *frame,
+ const FLAC__int32 * const buffer[],
+ void *client_data);
+
+
+ static FLAC__bool eofCallback_(const FLAC__StreamDecoder *decoder, void *client_data);
+
+ static void metadataCallback_(const FLAC__StreamDecoder *decoder,
+ const FLAC__StreamMetadata *metadata,
+ void *client_data);
+ static void errorCallback_(const FLAC__StreamDecoder *decoder,
+ FLAC__StreamDecoderErrorStatus status,
+ void *client_data);
+};
+
+#endif
+#endif //#ifdef READ_FLAC
diff --git a/include/ReadFlac.h.seekable b/include/ReadFlac.h.seekable
new file mode 100644
index 0000000..c4cdfcf
--- /dev/null
+++ b/include/ReadFlac.h.seekable
@@ -0,0 +1,93 @@
+/*
+ * readanysf~ external for pd.
+ *
+ * Copyright (C) 2003, 2004 August Black
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * ReadFlac.h
+ */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef READ_FLAC
+
+#ifndef _READFLAC_H
+#define _READFLAC_H
+
+extern "C" {
+#include "FLAC/seekable_stream_decoder.h"
+};
+
+#include "Readsf.h"
+#include "generic.h"
+
+class ReadFlac : public Readsf {
+ public:
+ ReadFlac( Input *input);
+ virtual ~ReadFlac();
+ virtual bool Initialize();
+ virtual int Decode(float *buffer, int size);
+ virtual bool Rewind();
+ virtual bool PCM_seek(long bytes);
+ virtual bool TIME_seek(double seconds);
+
+ protected:
+ bool needs_seek;
+ FLAC__uint64 seek_sample;
+ unsigned samples_in_reservoir;
+ bool abort_flag;
+ FLAC__SeekableStreamDecoder *decoder;
+ FLAC__StreamMetadata streaminfo;
+ FLAC__int16 reservoir[FLAC__MAX_BLOCK_SIZE * 2 * 2]; // *2 for max channels, another *2 for overflow
+ //unsigned char output[576 * 2 * (16/8)]; // *2 for max channels, (16/8) for max bytes per sample
+
+ unsigned lengthInMsec() { return (unsigned)((FLAC__uint64)1000 * streaminfo.data.stream_info.total_samples / streaminfo.data.stream_info.sample_rate); }
+ private:
+ void ErrorCheck(int state);
+ long filelength;
+ void cleanup();
+
+
+
+ static FLAC__SeekableStreamDecoderReadStatus readCallback_(const FLAC__SeekableStreamDecoder *decoder,
+ FLAC__byte buffer[],
+ unsigned *bytes,
+ void *client_data);
+ static FLAC__SeekableStreamDecoderSeekStatus seekCallback_(const FLAC__SeekableStreamDecoder *decoder,
+ FLAC__uint64 absolute_byte_offset,
+ void *client_data);
+ static FLAC__SeekableStreamDecoderTellStatus tellCallback_(const FLAC__SeekableStreamDecoder *decoder,
+ FLAC__uint64 *absolute_byte_offset,
+ void *client_data);
+ static FLAC__SeekableStreamDecoderLengthStatus lengthCallback_(const FLAC__SeekableStreamDecoder *decoder,
+ FLAC__uint64 *stream_length,
+ void *client_data);
+ static FLAC__bool eofCallback_(const FLAC__SeekableStreamDecoder *decoder, void *client_data);
+ static FLAC__StreamDecoderWriteStatus writeCallback_(const FLAC__SeekableStreamDecoder *decoder,
+ const FLAC__Frame *frame,
+ const FLAC__int32 * const buffer[],
+ void *client_data);
+ static void metadataCallback_(const FLAC__SeekableStreamDecoder *decoder,
+ const FLAC__StreamMetadata *metadata,
+ void *client_data);
+ static void errorCallback_(const FLAC__SeekableStreamDecoder *decoder,
+ FLAC__StreamDecoderErrorStatus status,
+ void *client_data);
+};
+
+#endif
+#endif //#ifdef READ_FLAC
diff --git a/include/ReadMad.h b/include/ReadMad.h
new file mode 100644
index 0000000..bf0bc27
--- /dev/null
+++ b/include/ReadMad.h
@@ -0,0 +1,125 @@
+/*
+ * readanysf~ external for pd.
+ *
+ * Copyright (C) 2003 August Black
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * ReadMad.cpp || much code studied from Andy Lo-A-Foe <www.alsaplayer.org>
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#ifdef READ_MAD
+
+#ifndef _READMAD_H_
+#define _READMAD_H_
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <string.h>
+#include <inttypes.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+
+
+#define MAD_BUFSIZE (4 * 1024)
+#define XING_MAGIC (('X' << 24) | ('i' << 16) | ('n' << 8) | 'g')
+
+extern "C" {
+#include <mad.h>
+}
+
+//#include "xing.h"
+#include "Readsf.h"
+#include "Input.h"
+
+
+#define FRAME_RESERVE 2000
+
+
+struct xing {
+ long flags; /* valid fields (see below) */
+ unsigned long frames; /* total number of frames */
+ unsigned long bytes; /* total number of bytes */
+ unsigned char toc[100]; /* 100-point seek table */
+ long scale; /* ?? */
+};
+
+enum {
+ XING_FRAMES = 0x00000001L,
+ XING_BYTES = 0x00000002L,
+ XING_TOC = 0x00000004L,
+ XING_SCALE = 0x00000008L
+};
+
+# define xing_finish(xing) /* nothing */
+
+
+class ReadMad : public Readsf {
+
+ private:
+ //FILE *mad_fd;
+ uint8_t mad_map[MAD_BUFSIZE];
+ long map_offset;
+ int bytes_avail;
+
+ struct mad_synth synth;
+ struct mad_stream stream;
+ struct mad_frame frame;
+ mad_timer_t timer;
+ struct xing xing;
+
+ int mad_init;
+ ssize_t offset;
+ ssize_t filesize;
+ // int samplerate;
+ int bitrate;
+ int samplesperframe;
+ long samplestotal;
+ long time;
+ int seekable;
+ int nr_frames;
+
+ //float my_scale(mad_fixed_t sample);
+ bool fill_buffer( );
+ bool fill_buffer( long newoffset );
+ int mad_frame_seek( int frame );
+ ssize_t find_initial_frame(uint8_t *buf, int size);
+ void seek_bytes(long byte_offset);
+
+ void xing_init(struct xing *);
+ int xing_parse(struct xing *, struct mad_bitptr, unsigned int);
+
+ public:
+ ReadMad();
+ ReadMad( Input *input );
+ virtual ~ReadMad();
+ virtual bool Initialize();
+ virtual int Decode(float *buffer, int size);
+ virtual bool Rewind();
+ virtual bool PCM_seek(long bytes);
+ virtual bool TIME_seek(double seconds);
+};
+
+#endif
+#endif //ifdef READ_MAD
diff --git a/include/ReadRaw.h b/include/ReadRaw.h
new file mode 100644
index 0000000..9906ecf
--- /dev/null
+++ b/include/ReadRaw.h
@@ -0,0 +1,154 @@
+/*
+ * readanysf~ external for pd.
+ *
+ * Copyright (C) 2003 August Black
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * ReadRaw.h
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#ifndef _READRAW_H_
+#define _READRAW_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include "Readsf.h"
+
+typedef struct _nextstep
+{
+ char ns_fileid[4]; /* magic number '.snd' if file is big-endian */
+ unsigned int ns_onset; /* byte offset of first sample */
+ unsigned int ns_length; /* length of sound in bytes */
+ unsigned int ns_format; /* format; see below */
+ unsigned int ns_sr; /* sample rate */
+ unsigned int ns_nchans; /* number of channels */
+ char ns_info[4]; /* comment */
+} t_nextstep;
+
+typedef struct _wave
+{
+ char w_fileid[4]; /* chunk id 'RIFF' */
+ unsigned int w_chunksize; /* chunk size */
+ char w_waveid[4]; /* wave chunk id 'WAVE' */
+ char w_fmtid[4]; /* format chunk id 'fmt ' */
+ unsigned int w_fmtchunksize; /* format chunk size */
+ unsigned short w_fmttag; /* format tag, 1 for PCM */
+ unsigned short w_nchannels; /* number of channels */
+ unsigned int w_samplespersec; /* sample rate in hz */
+ unsigned int w_navgbytespersec; /* average bytes per second */
+ unsigned short w_nblockalign; /* number of bytes per frame */
+ unsigned short w_nbitspersample; /* number of bits in a sample */
+ char w_datachunkid[4]; /* data chunk id 'data' */
+ unsigned int w_datachunksize; /* length of data chunk */
+} t_wave;
+
+typedef struct _fmt /* format chunk */
+{
+ unsigned short f_fmttag; /* format tag, 1 for PCM */
+ unsigned short f_nchannels; /* number of channels */
+ unsigned int f_samplespersec; /* sample rate in hz */
+ unsigned int f_navgbytespersec; /* average bytes per second */
+ unsigned short f_nblockalign; /* number of bytes per frame */
+ unsigned short f_nbitspersample; /* number of bits in a sample */
+} t_fmt;
+
+typedef struct _wavechunk /* ... and the last two items */
+{
+ char wc_id[4]; /* data chunk id, e.g., 'data' or 'fmt ' */
+ unsigned int wc_size; /* length of data chunk */
+} t_wavechunk;
+
+/* the AIFF header. I'm assuming AIFC is compatible but don't really know
+ that. */
+
+typedef struct _datachunk
+{
+ char dc_id[4]; /* data chunk id 'SSND' */
+ unsigned int dc_size; /* length of data chunk */
+} t_datachunk;
+
+typedef struct _comm
+{
+ unsigned short c_nchannels; /* number of channels */
+ unsigned short c_nframeshi; /* # of sample frames (hi) */
+ unsigned short c_nframeslo; /* # of sample frames (lo) */
+ unsigned short c_bitspersamp; /* bits per sample */
+ unsigned char c_samprate[10]; /* sample rate, 80-bit float! */
+} t_comm;
+
+ /* this version is more convenient for writing them out: */
+typedef struct _aiff
+{
+ char a_fileid[4]; /* chunk id 'FORM' */
+ unsigned int a_chunksize; /* chunk size */
+ char a_aiffid[4]; /* aiff chunk id 'AIFF' */
+ char a_fmtid[4]; /* format chunk id 'COMM' */
+ unsigned int a_fmtchunksize; /* format chunk size, 18 */
+ unsigned short a_nchannels; /* number of channels */
+ unsigned short a_nframeshi; /* # of sample frames (hi) */
+ unsigned short a_nframeslo; /* # of sample frames (lo) */
+ unsigned short a_bitspersamp; /* bits per sample */
+ unsigned char a_samprate[10]; /* sample rate, 80-bit float! */
+} t_aiff;
+
+
+#define NS_FORMAT_LINEAR_16 3
+#define NS_FORMAT_LINEAR_24 4
+#define NS_FORMAT_FLOAT 6
+#define SCALE (1./(1024. * 1024. * 1024. * 2.))
+
+
+#define AIFFHDRSIZE 38 /* probably not what sizeof() gives */
+#define AIFFPLUS (AIFFHDRSIZE + 8) /* header size including first chunk hdr */
+
+#define WHDR1 sizeof(t_nextstep)
+#define WHDR2 (sizeof(t_wave) > WHDR1 ? sizeof (t_wave) : WHDR1)
+#define WRITEHDRSIZE (AIFFPLUS > WHDR2 ? AIFFPLUS : WHDR2)
+
+#define READHDRSIZE (16 > WHDR2 + 2 ? 16 : WHDR2 + 2)
+
+
+class ReadRaw : public Readsf {
+ private:
+
+ long ret;
+ unsigned char data[WAVCHUNKSIZE * 4 * 2]; //WAVCHUNKSIZE * bytespersamp * num_channels;
+
+ int headersize;
+ int bytespersamp;
+ int bigendian;
+ public:
+ ReadRaw ( );
+ ReadRaw( Input *input );
+ virtual ~ReadRaw();
+ virtual bool Initialize();
+ virtual int Decode(float *buffer,int size);
+ virtual bool Rewind();
+ virtual bool PCM_seek(long bytes);
+ virtual bool TIME_seek(double seconds);
+};
+
+
+
+
+
+#endif
diff --git a/include/ReadVorbis.h b/include/ReadVorbis.h
new file mode 100644
index 0000000..bf42a23
--- /dev/null
+++ b/include/ReadVorbis.h
@@ -0,0 +1,99 @@
+/*
+ * readanysf~ external for pd.
+ *
+ * Copyright (C) 2003 August Black
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * ReadVorbisUrl.h
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifdef READ_VORBIS
+
+#ifndef _READVORBISURL_H_
+#define _READVORBISURL_H_
+
+#include "Readsf.h"
+#include "generic.h"
+
+extern "C" {
+#include <vorbis/codec.h>
+#include <vorbis/vorbisfile.h>
+}
+
+#include <sys/types.h>
+#include <ctype.h>
+#include <string.h>
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+
+//#include <stdlib.h>
+//#include <math.h>
+
+#ifdef NT
+#include <io.h> /* for 'write' in pute-function only */
+#include <winsock.h>
+#include <winbase.h>
+#else
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <sys/time.h>
+#include <unistd.h>
+#define SOCKET_ERROR -1
+#endif
+
+
+
+//#define VSTREAM_FIFOSIZE (32 * 1024)
+//#define VSTREAM_BUFFERSIZE (4 * 1024)
+//#define VSOCKET_READSIZE 1024
+//#define STRBUF_SIZE 1024
+
+
+class ReadVorbis : public Readsf {
+ private:
+
+ OggVorbis_File vf;
+ ov_callbacks callbacks;
+
+ static size_t read_func(void *ptr, size_t size, size_t nmemb, void *datasource);
+ static int seek_func(void *datasource, ogg_int64_t offset, int whence);
+ static int close_func(void *datasource);
+ static long tell_func(void *datasource);
+ bool seekable;
+
+ public:
+ ReadVorbis( Input *input );
+ virtual ~ReadVorbis();
+ virtual bool Initialize();
+ virtual int Decode(float *buffer, int size);
+ virtual bool Rewind();
+ virtual bool PCM_seek(long bytes);
+ virtual bool TIME_seek(double seconds);
+ bool is_seekable() { return seekable;};
+
+};
+
+#endif
+#endif //ifdef READVORBIS
diff --git a/include/Readsf.h b/include/Readsf.h
new file mode 100644
index 0000000..ea09384
--- /dev/null
+++ b/include/Readsf.h
@@ -0,0 +1,62 @@
+/*
+ * readanysf~ external for pd.
+ *
+ * Copyright (C) 2003 August Black
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Readsf.h
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#ifndef _READSF_H_
+#define _READSF_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include "Input.h"
+
+class Readsf {
+
+private:
+
+
+ public:
+ Readsf();
+ Readsf( Input *input );
+
+ virtual ~Readsf();
+ virtual bool Initialize();
+ virtual int Decode(float *buffer, int size);
+ virtual bool Rewind();
+ virtual bool PCM_seek(long bytes);
+ virtual bool TIME_seek(double seconds);
+ double get_samplerate() { return samplerate;}
+ int get_channels() { return num_channels;}
+ float get_lengthinseconds() { return lengthinseconds; }
+
+ protected:
+ Input *in;
+ double samplerate;
+ int num_channels;
+ float lengthinseconds;
+ bool eof;
+};
+
+#endif
diff --git a/include/generic.h b/include/generic.h
new file mode 100644
index 0000000..c165f2f
--- /dev/null
+++ b/include/generic.h
@@ -0,0 +1,48 @@
+#ifndef _GENERIC_H_
+#define _GENERIC_H_
+
+
+#define FLOATSIZE sizeof(float)
+#define SHORTSIZE sizeof(short)
+#define CHUNKSIZE 4096*FLOATSIZE
+#define WAVCHUNKSIZE 1024
+//#define MAD_CHUNKSIZE 2016*FLOATSIZE //576
+#define INOUTSIZE (CHUNKSIZE*4)+1
+
+#define FIFOSIZE (CHUNKSIZE*16)
+#define FIFOSECONDS (FIFOSIZE/FLOATSIZE/44100) //assume samplerate
+#define READBUFFER (1024*16)
+
+#define R_NOTHING 0
+#define R_OPEN 1
+#define R_CLOSE 2
+#define R_QUIT 3
+#define R_PROCESS 4
+#define R_STOP 5
+
+#define STATE_IDLE 0
+#define STATE_STARTUP 1
+#define STATE_STREAM 2
+#define STATE_IDLE_CLOSED 3
+
+#define FORMAT_WAVE 0
+#define FORMAT_AIFF 1
+#define FORMAT_NEXT 2
+#define FORMAT_VORBIS 3
+#define FORMAT_MAD 4
+#define FORMAT_FLAC 5
+#define FORMAT_HTTP_MP3 6
+#define FORMAT_HTTP_VORBIS 7
+
+
+
+#define STREAM_FIFOSIZE (32 * 1152)
+#define SOCKET_READSIZE 1024 //1152/4
+#define sys_closesocket close // windows uses sys_closesocket
+#define STRBUF_SIZE 1024
+
+//#define STREAM_BUFFERSIZE (4 * 1152)
+//#define FRAME_RESERVE 2000
+//#define STRDUP strdup
+
+#endif
diff --git a/include/main.h b/include/main.h
new file mode 100644
index 0000000..ea1093f
--- /dev/null
+++ b/include/main.h
@@ -0,0 +1,158 @@
+/*
+ * readanysf~ external for pd.
+ *
+ * Copyright (C) 2003 August Black
+ *
+ * This program 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 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * main.h
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include <flext.h>
+#include <stdio.h>
+
+
+extern "C" {
+#include <samplerate.h> //libsamplerate
+}
+
+#include "Readsf.h"
+#include "ReadRaw.h"
+#ifdef READ_VORBIS
+#include "ReadVorbis.h"
+#endif
+#ifdef READ_MAD
+#include "ReadMad.h"
+#endif
+#ifdef READ_MAD_URL
+#include "ReadMadUrl.h"
+#endif
+#ifdef READ_FLAC
+#include "ReadFlac.h"
+#endif
+
+#include "Fifo.h"
+#include "generic.h"
+#include "Input.h"
+#include "InputFile.h"
+#include "InputStream.h"
+
+// check for appropriate flext version
+#if !defined(FLEXT_VERSION) || (FLEXT_VERSION < 400)
+#error You need at least flext version 0.4.0
+#endif
+
+
+class readanysf: public flext_dsp
+{
+ // obligatory flext header (class name,base class name)
+ FLEXT_HEADER(readanysf, flext_dsp)
+
+public:
+
+ readanysf();
+ ~readanysf();
+
+
+protected:
+ // here we declare the virtual DSP function
+ virtual void m_signal(int n, float *const *in, float *const *out);
+
+ void m_open(t_symbol *s); // open file Input; set req = R_OPEN
+ void m_reopen(); // re open a file Input; set req = R_OPEN
+ void m_start(); // set state = S_PROCESS
+ void m_pause(); // set state = S_IDLE
+ void m_stop(); // set state = S_STATE; cond.signal();
+
+ void m_child();
+ void FillFifo();
+
+ //void m_loop_s(t_symbol *s);
+ void m_recover(float f);
+ void m_loop_f(float f);
+ void m_set_tick(int i);
+ void m_pcm_seek(int i);
+ void m_time_seek(float f);
+ void m_src_factor(float f);
+
+ void m_bang();
+
+ int m_resample(int frames);
+
+ int getState();
+ int getRequest();
+ void setState(int i);
+ void setRequest(int i);
+ void setSys(int state, int request);
+private:
+ FLEXT_CALLBACK_S(m_open)
+ FLEXT_CALLBACK(m_reopen)
+
+
+ FLEXT_CALLBACK_F(m_loop_f)
+ FLEXT_CALLBACK_F(m_recover)
+ FLEXT_CALLBACK_I(m_set_tick)
+ FLEXT_CALLBACK(m_start)
+ FLEXT_CALLBACK(m_pause)
+ FLEXT_CALLBACK(m_stop)
+
+ FLEXT_CALLBACK_I(m_pcm_seek)
+ FLEXT_CALLBACK_F(m_time_seek)
+
+ FLEXT_CALLBACK_F(m_src_factor)
+
+ FLEXT_THREAD(m_child)
+ FLEXT_CALLBACK(m_bang)
+
+
+ Readsf *readsf;
+ ThrCond cond;
+ ThrMutex sysmut;
+ ThrMutex varmutex;
+ Fifo *fifo;
+ Input *in;
+ int format;
+ int outtick, counttick;
+ int fifosecondsize;
+
+ volatile int state, request;
+ volatile bool loop, eof, quit, sendout;
+ volatile float floatmsg, cachemsg, lengthinseconds;
+
+ char filename[1024];
+ int num_channels;
+ double samplerate;
+
+ volatile long pcmseek;
+ volatile double timeseek;
+
+ float read_buffer[READBUFFER];
+ float pd_buffer[1024*2*FLOATSIZE];
+
+ ///Secret Rabbit Code stuff
+ int src_channels;
+ float *src_buffer;
+ SRC_STATE * src_state;
+ SRC_DATA src_data;
+ double src_factor;
+ int src_error;
+ int src_mode;
+};
diff --git a/include/stamp-h2.in b/include/stamp-h2.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/include/stamp-h2.in