From d94369cd874ac65309d8e4f9de8b81125c66e27a Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Sun, 21 Nov 2010 04:53:44 +0000 Subject: ported to library template and updated version to 1.0.3.1 to reflect bugfixes and doc updates svn path=/trunk/externals/vbap/; revision=14453 --- COPYRIGHT | 36 - LICENSE.txt | 36 + Makefile | 331 ++++++++ README.txt | 32 + debian/changelog | 5 + debian/compat | 1 + debian/control | 45 ++ debian/copyright | 23 + debian/gbp.conf | 7 + debian/links | 3 + debian/patches/add_required_internal_pd_headers | 968 ++++++++++++++++++++++++ debian/patches/series | 1 + debian/rules | 17 + debian/source/format | 1 + debian/watch | 2 + define_loudspeakers.c | 2 +- define_loudspeakers.h | 2 +- examples/graph-to-aziele.pd | 51 ++ examples/high.pd | 27 + examples/playsample~.pd | 56 ++ examples/recent.pd | 14 + examples/vbap-demo.pd | 38 + examples/vbap-level-config.pd | 23 + examples/vbapmodule.pd | 22 + graph-to-aziele.pd | 51 -- high.pd | 27 - playsample~.pd | 56 -- recent.pd | 14 - rvbap.c | 2 +- vbap-demo.pd | 38 - vbap-help.pd | 1 - vbap-meta.pd | 7 + vbap.c | 4 +- vbap.h | 4 +- vbapmodule.pd | 22 - 35 files changed, 1717 insertions(+), 252 deletions(-) delete mode 100644 COPYRIGHT create mode 100644 LICENSE.txt create mode 100644 Makefile create mode 100644 README.txt create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/gbp.conf create mode 100644 debian/links create mode 100644 debian/patches/add_required_internal_pd_headers create mode 100644 debian/patches/series create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/watch create mode 100644 examples/graph-to-aziele.pd create mode 100644 examples/high.pd create mode 100644 examples/playsample~.pd create mode 100644 examples/recent.pd create mode 100644 examples/vbap-demo.pd create mode 100644 examples/vbap-level-config.pd create mode 100644 examples/vbapmodule.pd delete mode 100644 graph-to-aziele.pd delete mode 100644 high.pd delete mode 100644 playsample~.pd delete mode 100644 recent.pd delete mode 100644 vbap-demo.pd create mode 100644 vbap-meta.pd delete mode 100644 vbapmodule.pd diff --git a/COPYRIGHT b/COPYRIGHT deleted file mode 100644 index 331a78f..0000000 --- a/COPYRIGHT +++ /dev/null @@ -1,36 +0,0 @@ -Copyright - -This software is being provided to you, the licensee, by Ville Pulkki, -under the following license. By obtaining, using and/or copying this -software, you agree that you have read, understood, and will comply -with these terms and conditions: Permission to use, copy, modify and -distribute, including the right to grant others rights to distribute -at any tier, this software and its documentation for any purpose and -without fee or royalty is hereby granted, provided that you agree to -comply with the following copyright notice and statements, including -the disclaimer, and that the same appear on ALL copies of the software -and documentation, including modifications that you make for internal -use or for distribution: - -Copyright 1998-2002 by Ville Pulkki. All rights reserved. - -Written by Ville Pulkki -Helsinki University of Technology -Laboratory of acoustics and audio signal processing - - -The software may be used, distributed, and included to commercial -products without any charges. When included to a commercial product, -the method "Vector Base Amplitude Panning" and its developer Ville -Pulkki must be referred to in documentation. - -This software is provided "as is", and Ville Pulkki or Helsinki -University of Technology make no representations or warranties, -expressed or implied. By way of example, but not limitation, Helsinki -University of Technology or Ville Pulkki make no representations or -warranties of merchantability or fitness for any particular purpose or -that the use of the licensed software or documentation will not -infringe any third party patents, copyrights, trademarks or other -rights. The name of Ville Pulkki or Helsinki University of Technology -may not be used in advertising or publicity pertaining to distribution -of the software. diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..331a78f --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,36 @@ +Copyright + +This software is being provided to you, the licensee, by Ville Pulkki, +under the following license. By obtaining, using and/or copying this +software, you agree that you have read, understood, and will comply +with these terms and conditions: Permission to use, copy, modify and +distribute, including the right to grant others rights to distribute +at any tier, this software and its documentation for any purpose and +without fee or royalty is hereby granted, provided that you agree to +comply with the following copyright notice and statements, including +the disclaimer, and that the same appear on ALL copies of the software +and documentation, including modifications that you make for internal +use or for distribution: + +Copyright 1998-2002 by Ville Pulkki. All rights reserved. + +Written by Ville Pulkki +Helsinki University of Technology +Laboratory of acoustics and audio signal processing + + +The software may be used, distributed, and included to commercial +products without any charges. When included to a commercial product, +the method "Vector Base Amplitude Panning" and its developer Ville +Pulkki must be referred to in documentation. + +This software is provided "as is", and Ville Pulkki or Helsinki +University of Technology make no representations or warranties, +expressed or implied. By way of example, but not limitation, Helsinki +University of Technology or Ville Pulkki make no representations or +warranties of merchantability or fitness for any particular purpose or +that the use of the licensed software or documentation will not +infringe any third party patents, copyrights, trademarks or other +rights. The name of Ville Pulkki or Helsinki University of Technology +may not be used in advertising or publicity pertaining to distribution +of the software. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..80a6e72 --- /dev/null +++ b/Makefile @@ -0,0 +1,331 @@ +## Pd library template version 1.0.6 +# For instructions on how to use this template, see: +# http://puredata.info/docs/developer/MakefileTemplate +LIBRARY_NAME = vbap + +# add your .c source files, one object per file, to the SOURCES +# variable, help files will be included automatically +SOURCES = vbap.c rvbap.c define_loudspeakers.c + +# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will +# be included automatically +PDOBJECTS = + +# example patches and related files, in the 'examples' subfolder +EXAMPLES = graph-to-aziele.pd high.pd playsample~.pd recent.pd vbap-demo.pd vbap-level-config.pd vbapmodule.pd + +# manuals and related files, in the 'manual' subfolder +MANUAL = + +# if you want to include any other files in the source and binary tarballs, +# list them here. This can be anything from header files, test patches, +# documentation, etc. README.txt and LICENSE.txt are required and therefore +# automatically included +EXTRA_DIST = makefile.irix define_loudspeakers.h max2pd.h vbap.h + + + +#------------------------------------------------------------------------------# +# +# things you might need to edit if you are using other C libraries +# +#------------------------------------------------------------------------------# + +CFLAGS = -DPD -I"$(PD_INCLUDE)/pd" -Wall -W -g +LDFLAGS = +LIBS = + +#------------------------------------------------------------------------------# +# +# you shouldn't need to edit anything below here, if we did it right :) +# +#------------------------------------------------------------------------------# + +# get library version from meta file +LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd) + +CFLAGS += -DVERSION='"$(LIBRARY_VERSION)"' + +PD_INCLUDE = $(PD_PATH)/include +# where to install the library, overridden below depending on platform +prefix = /usr/local +libdir = $(prefix)/lib +pkglibdir = $(libdir)/pd-externals +objectsdir = $(pkglibdir) + +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) -p -m 644 +INSTALL_DATA = $(INSTALL) -p -m 644 +INSTALL_DIR = $(INSTALL) -p -m 755 -d + +ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \ + $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows) + +DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION) +ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION) + +UNAME := $(shell uname -s) +ifeq ($(UNAME),Darwin) + CPU := $(shell uname -p) + ifeq ($(CPU),arm) # iPhone/iPod Touch + SOURCES += $(SOURCES_iphoneos) + EXTENSION = pd_darwin + OS = iphoneos + PD_PATH = /Applications/Pd-extended.app/Contents/Resources + IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin + CC=$(IPHONE_BASE)/gcc + CPP=$(IPHONE_BASE)/cpp + CXX=$(IPHONE_BASE)/g++ + ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk + IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6 + OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer + CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS) + LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT) + LIBS += -lc + STRIP = strip -x + DISTBINDIR=$(DISTDIR)-$(OS) + else # Mac OS X + SOURCES += $(SOURCES_macosx) + EXTENSION = pd_darwin + OS = macosx + PD_PATH = /Applications/Pd-extended.app/Contents/Resources + OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast +# build universal 32-bit on 10.4 and 32/64 on newer + ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8) + FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4 + else + FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4 + SOURCES += $(SOURCES_iphoneos) + endif + CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include + LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib + # if the 'pd' binary exists, check the linking against it to aid with stripping + LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd) + LIBS += -lc + STRIP = strip -x + DISTBINDIR=$(DISTDIR)-$(OS) +# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much + pkglibdir=$(HOME)/Library/Pd + endif +endif +ifeq ($(UNAME),Linux) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += -fPIC + LDFLAGS += -Wl,--export-dynamic -shared -fPIC + LIBS += -lc + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),GNU) + # GNU/Hurd, should work like GNU/Linux for basically all externals + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += -fPIC + LDFLAGS += -Wl,--export-dynamic -shared -fPIC + LIBS += -lc + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),GNU/kFreeBSD) + # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += -fPIC + LDFLAGS += -Wl,--export-dynamic -shared -fPIC + LIBS += -lc + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME))) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_cygwin) + EXTENSION = dll + OS = cygwin + PD_PATH = $(cygpath $(PROGRAMFILES))/pd + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += + LDFLAGS += -Wl,--export-dynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" + LIBS += -lc -lpd + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS) +endif +ifeq (MINGW,$(findstring MINGW,$(UNAME))) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_windows) + EXTENSION = dll + OS = windows + PD_PATH = $(shell cd "$(PROGRAMFILES)"/pd && pwd) + OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer + CFLAGS += -mms-bitfields + LDFLAGS += -s -shared -Wl,--enable-auto-import + LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" -lpd -lwsock32 -lkernel32 -luser32 -lgdi32 + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS) +endif + +# in case somebody manually set the HELPPATCHES above +HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd) + +CFLAGS += $(OPT_CFLAGS) + + +.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags $(LIBRARY_NAME) + +all: $(SOURCES:.c=.$(EXTENSION)) + +%.o: %.c + $(CC) $(CFLAGS) -o "$*.o" -c "$*.c" + +%.$(EXTENSION): %.o + $(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o" $(LIBS) + chmod a-x "$*.$(EXTENSION)" + +# this links everything into a single binary file +$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o + $(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS) + chmod a-x $(LIBRARY_NAME).$(EXTENSION) + +install: libdir_install + +# The meta and help files are explicitly installed to make sure they are +# actually there. Those files are not optional, then need to be there. +libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SOURCES))" || (\ + $(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \ + $(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION)))) + test -z "$(strip $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(PDOBJECTS) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + +# install library linked as single binary +single_install: $(LIBRARY_NAME) install-doc install-exec + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION) + +install-doc: + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(HELPPATCHES) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt + $(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt + +install-examples: + test -z "$(strip $(EXAMPLES))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \ + for file in $(EXAMPLES); do \ + $(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \ + done + +install-manual: + test -z "$(strip $(MANUAL))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \ + for file in $(MANUAL); do \ + $(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \ + done + + +clean: + -rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o) + -rm -f -- $(SOURCES:.c=.$(EXTENSION)) + -rm -f -- $(LIBRARY_NAME).o + -rm -f -- $(LIBRARY_NAME).$(EXTENSION) + +distclean: clean + -rm -f -- $(DISTBINDIR).tar.gz + -rm -rf -- $(DISTBINDIR) + -rm -f -- $(DISTDIR).tar.gz + -rm -rf -- $(DISTDIR) + -rm -f -- $(ORIGDIR).tar.gz + -rm -rf -- $(ORIGDIR) + + +$(DISTBINDIR): + $(INSTALL_DIR) $(DISTBINDIR) + +libdir: all $(DISTBINDIR) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTBINDIR) + $(INSTALL_DATA) $(SOURCES) $(DISTBINDIR) + $(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR) + test -z "$(strip $(EXTRA_DIST))" || \ + $(INSTALL_DATA) $(EXTRA_DIST) $(DISTBINDIR) +# tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR) + +$(DISTDIR): + $(INSTALL_DIR) $(DISTDIR) + +$(ORIGDIR): + $(INSTALL_DIR) $(ORIGDIR) + +dist: $(DISTDIR) + $(INSTALL_DATA) Makefile $(DISTDIR) + $(INSTALL_DATA) README.txt $(DISTDIR) + $(INSTALL_DATA) LICENSE.txt $(DISTDIR) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTDIR) + test -z "$(strip $(ALLSOURCES))" || \ + $(INSTALL_DATA) $(ALLSOURCES) $(DISTDIR) + test -z "$(strip $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(PDOBJECTS) $(DISTDIR) + test -z "$(strip $(HELPPATCHES))" || \ + $(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR) + test -z "$(strip $(EXTRA_DIST))" || \ + $(INSTALL_DATA) $(EXTRA_DIST) $(DISTDIR) + test -z "$(strip $(EXAMPLES))" || \ + $(INSTALL_DIR) $(DISTDIR)/examples && \ + for file in $(EXAMPLES); do \ + $(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \ + done + test -z "$(strip $(MANUAL))" || \ + $(INSTALL_DIR) $(DISTDIR)/manual && \ + for file in $(MANUAL); do \ + $(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \ + done + tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR) + +# make a Debian source package +dpkg-source: + debclean + make distclean dist + mv $(DISTDIR) $(ORIGDIR) + tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR) + rm -f -- $(DISTDIR).tar.gz + rm -rf -- $(DISTDIR) $(ORIGDIR) + cd .. && dpkg-source -b $(LIBRARY_NAME) + +etags: + etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h + +showsetup: + @echo "CFLAGS: $(CFLAGS)" + @echo "LDFLAGS: $(LDFLAGS)" + @echo "LIBS: $(LIBS)" + @echo "PD_INCLUDE: $(PD_INCLUDE)" + @echo "PD_PATH: $(PD_PATH)" + @echo "objectsdir: $(objectsdir)" + @echo "LIBRARY_NAME: $(LIBRARY_NAME)" + @echo "LIBRARY_VERSION: $(LIBRARY_VERSION)" + @echo "SOURCES: $(SOURCES)" + @echo "PDOBJECTS: $(PDOBJECTS)" + @echo "ALLSOURCES: $(ALLSOURCES)" + @echo "UNAME: $(UNAME)" + @echo "CPU: $(CPU)" + @echo "pkglibdir: $(pkglibdir)" + @echo "DISTDIR: $(DISTDIR)" + @echo "ORIGDIR: $(ORIGDIR)" diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..e42cbbc --- /dev/null +++ b/README.txt @@ -0,0 +1,32 @@ + +A Pd port of the VBAP object for Max/MSP by Ville Pulkki + +http://www.acoustics.hut.fi/research/cat/vbap/ + + This is a library for Pure Data for sound spatialization using the + vector base amplitude panning (VBAP) method. VBAP is an amplitude + panning method to position virtual sources in arbitrary 2-D or 3-D + loudspeaker setups. In amplitude panning the same sound signal is + applied to a number of loudspeakers with appropriate non-zero + amplitudes. With 2-D setups VBAP is a reformulation of the existing + pair-wise panning method. However, differing from earlier solutions + it can be generalized for 3-D loudspeaker setups as a triplet-wise + panning method. A sound signal is then applied to one, two, or three + loudspeakers simultaneously. VBAP has certain advantages compared to + earlier virtual source positioning methods in arbitrary + layouts. Previous methods either used all loudspeakers to produce + virtual sources, which results in some artefacts, or they used + loudspeaker triplets with a non-generalizable 2-D user interface. + + The directional qualities of virtual sources generated with VBAP can + be stated as follows. Directional coordinates used for this purpose + are the angle between a position vector and the median plane (θcc), + and the angle between a projection of a position vector to the median + plane and frontal direction (Φcc). The perceived θcc direction of a + virtual source coincides well with the VBAP panning direction when a + loudspeaker set is near the median plane. When the loudspeaker set is + moved towards a side of a listener, the perceived θcc direction is + biased towards the median plane. The perceived Φcc direction of an + amplitude-panned virtual source is individual and cannot be predicted + with any panning law. + diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..2f433cc --- /dev/null +++ b/debian/changelog @@ -0,0 +1,5 @@ +pd-vbap (1.0.3.1-1) unstable; urgency=low + + * Initial release (Closes: #nnnn) + + -- Hans-Christoph Steiner Thu, 21 Jan 2010 23:27:04 -0500 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7f8f011 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +7 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..2a2e061 --- /dev/null +++ b/debian/control @@ -0,0 +1,45 @@ +Source: pd-vbap +Section: sound +Priority: optional +Maintainer: Debian Multimedia Maintainers +Uploaders: Hans-Christoph Steiner +Build-Depends: debhelper (>= 7.0.50~), + puredata, + quilt (>= 0.46-7~) +Standards-Version: 3.9.1 +Homepage: http://www.acoustics.hut.fi/research/cat/vbap/ + +Package: pd-vbap +Architecture: any +Depends: ${shlibs:Depends}, + pd, + ${misc:Depends} +Recommends: pd-cyclone, + pd-import +Description: Pd library for Vector Base Amplitude Panning spatialization + This is a library for Pure Data for sound spatialization using the + vector base amplitude panning (VBAP) method. VBAP is an amplitude + panning method to position virtual sources in arbitrary 2-D or 3-D + loudspeaker setups. In amplitude panning the same sound signal is + applied to a number of loudspeakers with appropriate non-zero + amplitudes. With 2-D setups VBAP is a reformulation of the existing + pair-wise panning method. However, differing from earlier solutions + it can be generalized for 3-D loudspeaker setups as a triplet-wise + panning method. A sound signal is then applied to one, two, or three + loudspeakers simultaneously. VBAP has certain advantages compared to + earlier virtual source positioning methods in arbitrary + layouts. Previous methods either used all loudspeakers to produce + virtual sources, which results in some artefacts, or they used + loudspeaker triplets with a non-generalizable 2-D user interface. + . + The directional qualities of virtual sources generated with VBAP can + be stated as follows. Directional coordinates used for this purpose + are the angle between a position vector and the median plane (θcc), + and the angle between a projection of a position vector to the median + plane and frontal direction (Φcc). The perceived θcc direction of a + virtual source coincides well with the VBAP panning direction when a + loudspeaker set is near the median plane. When the loudspeaker set is + moved towards a side of a listener, the perceived θcc direction is + biased towards the median plane. The perceived Φcc direction of an + amplitude-panned virtual source is individual and cannot be predicted + with any panning law. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..c5b67df --- /dev/null +++ b/debian/copyright @@ -0,0 +1,23 @@ +Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?rev=135 +Name: vbap +Maintainer: +Source: http://sourceforge.net/projects/pure-data/files/libraries/vbap/ + +Files: * +Copyright: 2001-2003, Free Software Foundation +License: GPL-2+ + This package 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 package 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 package; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +X-Comment: On Debian systems, the complete text of the GNU General + Public License can be found in `/usr/share/common-licenses/GPL-2'. diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 0000000..ae1dc36 --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,7 @@ +[DEFAULT] +upstream-branch = upstream +debian-branch = master +upstream-tag = upstream/%(version)s +debian-tag = debian/%(version)s +pristine-tar = True +sign-tags = True diff --git a/debian/links b/debian/links new file mode 100644 index 0000000..b348ed9 --- /dev/null +++ b/debian/links @@ -0,0 +1,3 @@ +usr/lib/pd/extra/vbap/README.txt usr/share/doc/pd-vbap/README +usr/lib/pd/extra/vbap/examples usr/share/doc/pd-vbap/examples +usr/share/common-licenses/GPL-2 usr/lib/pd/extra/vbap/LICENSE.txt diff --git a/debian/patches/add_required_internal_pd_headers b/debian/patches/add_required_internal_pd_headers new file mode 100644 index 0000000..b68508c --- /dev/null +++ b/debian/patches/add_required_internal_pd_headers @@ -0,0 +1,968 @@ +Description: workaround for headers missing from 'puredata' + Currently the 'puredata' package only includes the header m_pd.h, but other + headers are need to build this package, specifically s_stuff.h and + g_canvas.h. This patch adds the two headers from 'puredata' version 0.42.6 + until the other headers are included in Debian. +Author: Hans-Christoph Steiner +Bug-Debian: http://bugs.debian.org/568770 +Forwarded: not-needed +Reviewed-By: Hans-Christoph Steiner +Last-Update: <2010-09-13> + +--- /dev/null ++++ pd-hcs-0.1/s_stuff.h +@@ -0,0 +1,333 @@ ++/* Copyright (c) 1997-1999 Miller Puckette. ++* For information on usage and redistribution, and for a DISCLAIMER OF ALL ++* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ ++ ++/* Audio and MIDI I/O, and other scheduling and system stuff. */ ++ ++/* NOTE: this file describes Pd implementation details which may change ++in future releases. The public (stable) API is in m_pd.h. */ ++ ++/* in s_path.c */ ++ ++typedef struct _namelist /* element in a linked list of stored strings */ ++{ ++ struct _namelist *nl_next; /* next in list */ ++ char *nl_string; /* the string */ ++} t_namelist; ++ ++t_namelist *namelist_append(t_namelist *listwas, const char *s, int allowdup); ++t_namelist *namelist_append_files(t_namelist *listwas, const char *s); ++void namelist_free(t_namelist *listwas); ++char *namelist_get(t_namelist *namelist, int n); ++void sys_setextrapath(const char *p); ++extern int sys_usestdpath; ++extern t_namelist *sys_externlist; ++extern t_namelist *sys_searchpath; ++extern t_namelist *sys_helppath; ++int sys_open_absolute(const char *name, const char* ext, ++ char *dirresult, char **nameresult, unsigned int size, int bin, int *fdp); ++int sys_trytoopenone(const char *dir, const char *name, const char* ext, ++ char *dirresult, char **nameresult, unsigned int size, int bin); ++t_symbol *sys_decodedialog(t_symbol *s); ++ ++/* s_file.c */ ++ ++void sys_loadpreferences( void); ++void sys_savepreferences( void); ++extern int sys_defeatrt; ++extern t_symbol *sys_flags; ++ ++/* s_main.c */ ++extern int sys_debuglevel; ++extern int sys_verbose; ++extern int sys_noloadbang; ++extern int sys_nogui; ++extern char *sys_guicmd; ++ ++EXTERN int sys_nearestfontsize(int fontsize); ++EXTERN int sys_hostfontsize(int fontsize); ++ ++extern int sys_defaultfont; ++extern t_symbol *sys_libdir; /* library directory for auxilliary files */ ++extern t_symbol *sys_guidir; /* directory holding pd_gui, u_pdsend, etc */ ++ ++/* s_loader.c */ ++ ++typedef int (*loader_t)(t_canvas *canvas, char *classname); /* callback type */ ++EXTERN int sys_load_lib(t_canvas *canvas, char *filename); ++EXTERN void sys_register_loader(loader_t loader); ++ ++/* s_audio.c */ ++ ++#define SENDDACS_NO 0 /* return values for sys_send_dacs() */ ++#define SENDDACS_YES 1 ++#define SENDDACS_SLEPT 2 ++ ++#define DEFDACBLKSIZE 64 ++extern int sys_schedblocksize; /* audio block size for scheduler */ ++extern int sys_hipriority; /* real-time flag, true if priority boosted */ ++extern t_sample *sys_soundout; ++extern t_sample *sys_soundin; ++extern int sys_inchannels; ++extern int sys_outchannels; ++extern int sys_advance_samples; /* scheduler advance in samples */ ++extern int sys_blocksize; /* audio I/O block size in sample frames */ ++extern t_float sys_dacsr; ++extern int sys_schedadvance; ++extern int sys_sleepgrain; ++void sys_set_audio_settings(int naudioindev, int *audioindev, ++ int nchindev, int *chindev, ++ int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev, ++ int srate, int advance, int callback); ++void sys_reopen_audio( void); ++void sys_close_audio(void); ++ ++ ++int sys_send_dacs(void); ++void sys_reportidle(void); ++void sys_set_priority(int higher); ++void sys_audiobuf(int nbufs); ++void sys_getmeters(t_sample *inmax, t_sample *outmax); ++void sys_listdevs(void); ++void sys_setblocksize(int n); ++ ++/* s_midi.c */ ++#define MAXMIDIINDEV 16 /* max. number of input ports */ ++#define MAXMIDIOUTDEV 16 /* max. number of output ports */ ++extern int sys_nmidiin; ++extern int sys_nmidiout; ++extern int sys_midiindevlist[]; ++extern int sys_midioutdevlist[]; ++ ++void sys_open_midi(int nmidiin, int *midiinvec, ++ int nmidiout, int *midioutvec, int enable); ++void sys_get_midi_params(int *pnmidiindev, int *pmidiindev, ++ int *pnmidioutdev, int *pmidioutdev); ++ ++void sys_get_midi_apis(char *buf); ++ ++void sys_reopen_midi( void); ++void sys_close_midi( void); ++EXTERN void sys_putmidimess(int portno, int a, int b, int c); ++EXTERN void sys_putmidibyte(int portno, int a); ++EXTERN void sys_poll_midi(void); ++EXTERN void sys_setmiditimediff(double inbuftime, double outbuftime); ++EXTERN void sys_midibytein(int portno, int byte); ++ ++ /* implemented in the system dependent MIDI code (s_midi_pm.c, etc. ) */ ++void midi_getdevs(char *indevlist, int *nindevs, ++ char *outdevlist, int *noutdevs, int maxndev, int devdescsize); ++void sys_do_open_midi(int nmidiindev, int *midiindev, ++ int nmidioutdev, int *midioutdev); ++ ++#ifdef USEAPI_ALSA ++EXTERN void sys_alsa_putmidimess(int portno, int a, int b, int c); ++EXTERN void sys_alsa_putmidibyte(int portno, int a); ++EXTERN void sys_alsa_poll_midi(void); ++EXTERN void sys_alsa_setmiditimediff(double inbuftime, double outbuftime); ++EXTERN void sys_alsa_midibytein(int portno, int byte); ++EXTERN void sys_alsa_close_midi( void); ++ ++ ++ /* implemented in the system dependent MIDI code (s_midi_pm.c, etc. ) */ ++void midi_alsa_getdevs(char *indevlist, int *nindevs, ++ char *outdevlist, int *noutdevs, int maxndev, int devdescsize); ++void sys_alsa_do_open_midi(int nmidiindev, int *midiindev, ++ int nmidioutdev, int *midioutdev); ++#endif ++ ++/* m_sched.c */ ++EXTERN void sys_log_error(int type); ++#define ERR_NOTHING 0 ++#define ERR_ADCSLEPT 1 ++#define ERR_DACSLEPT 2 ++#define ERR_RESYNC 3 ++#define ERR_DATALATE 4 ++ ++#define SCHED_AUDIO_NONE 0 ++#define SCHED_AUDIO_POLL 1 ++#define SCHED_AUDIO_CALLBACK 2 ++void sched_set_using_audio(int flag); ++ ++/* s_inter.c */ ++ ++EXTERN void sys_microsleep(int microsec); ++ ++EXTERN void sys_bail(int exitcode); ++EXTERN int sys_pollgui(void); ++ ++EXTERN_STRUCT _socketreceiver; ++#define t_socketreceiver struct _socketreceiver ++ ++typedef void (*t_socketnotifier)(void *x); ++typedef void (*t_socketreceivefn)(void *x, t_binbuf *b); ++ ++EXTERN t_socketreceiver *socketreceiver_new(void *owner, ++ t_socketnotifier notifier, t_socketreceivefn socketreceivefn, int udp); ++EXTERN void socketreceiver_read(t_socketreceiver *x, int fd); ++EXTERN void sys_sockerror(char *s); ++EXTERN void sys_closesocket(int fd); ++ ++typedef void (*t_fdpollfn)(void *ptr, int fd); ++EXTERN void sys_addpollfn(int fd, t_fdpollfn fn, void *ptr); ++EXTERN void sys_rmpollfn(int fd); ++#ifdef UNIX ++void sys_setalarm(int microsec); ++void sys_setvirtualalarm( void); ++#endif ++ ++#define API_NONE 0 ++#define API_ALSA 1 ++#define API_OSS 2 ++#define API_MMIO 3 ++#define API_PORTAUDIO 4 ++#define API_JACK 5 ++#define API_SGI 6 ++ ++#ifdef __linux__ ++#define API_DEFAULT API_OSS ++#define API_DEFSTRING "OSS" ++#endif ++#ifdef MSW ++#define API_DEFAULT API_MMIO ++#define API_DEFSTRING "MMIO" ++#endif ++#ifdef __APPLE__ ++#define API_DEFAULT API_PORTAUDIO ++#define API_DEFSTRING "portaudio" ++#endif ++#ifdef IRIX ++#define API_DEFAULT API_SGI ++#define API_DEFSTRING "SGI Digital Media" ++#endif ++#define DEFAULTAUDIODEV 0 ++ ++#define MAXAUDIOINDEV 4 ++#define MAXAUDIOOUTDEV 4 ++ ++#define DEFMIDIDEV 0 ++ ++#define DEFAULTSRATE 44100 ++#ifdef MSW ++#define DEFAULTADVANCE 70 ++#else ++#define DEFAULTADVANCE 50 ++#endif ++ ++typedef void (*t_audiocallback)(void); ++ ++int pa_open_audio(int inchans, int outchans, int rate, t_sample *soundin, ++ t_sample *soundout, int framesperbuf, int nbuffers, ++ int indeviceno, int outdeviceno, t_audiocallback callback); ++void pa_close_audio(void); ++int pa_send_dacs(void); ++void sys_reportidle(void); ++void pa_listdevs(void); ++void pa_getdevs(char *indevlist, int *nindevs, ++ char *outdevlist, int *noutdevs, int *canmulti, ++ int maxndev, int devdescsize); ++ ++int oss_open_audio(int naudioindev, int *audioindev, int nchindev, ++ int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev, ++ int *choutdev, int rate); ++void oss_close_audio(void); ++int oss_send_dacs(void); ++void oss_reportidle(void); ++void oss_getdevs(char *indevlist, int *nindevs, ++ char *outdevlist, int *noutdevs, int *canmulti, ++ int maxndev, int devdescsize); ++ ++int alsa_open_audio(int naudioindev, int *audioindev, int nchindev, ++ int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev, ++ int *choutdev, int rate); ++void alsa_close_audio(void); ++int alsa_send_dacs(void); ++void alsa_reportidle(void); ++void alsa_getdevs(char *indevlist, int *nindevs, ++ char *outdevlist, int *noutdevs, int *canmulti, ++ int maxndev, int devdescsize); ++ ++int jack_open_audio(int wantinchans, int wantoutchans, int srate); ++void jack_close_audio(void); ++int jack_send_dacs(void); ++void jack_reportidle(void); ++void jack_getdevs(char *indevlist, int *nindevs, ++ char *outdevlist, int *noutdevs, int *canmulti, ++ int maxndev, int devdescsize); ++void jack_listdevs(void); ++ ++int mmio_open_audio(int naudioindev, int *audioindev, ++ int nchindev, int *chindev, int naudiooutdev, int *audiooutdev, ++ int nchoutdev, int *choutdev, int rate); ++void mmio_close_audio( void); ++void mmio_reportidle(void); ++int mmio_send_dacs(void); ++void mmio_getdevs(char *indevlist, int *nindevs, ++ char *outdevlist, int *noutdevs, int *canmulti, ++ int maxndev, int devdescsize); ++ ++void sys_listmididevs(void); ++void sys_set_midi_api(int whichapi); ++void sys_set_audio_api(int whichapi); ++void sys_get_audio_apis(char *buf); ++extern int sys_audioapi; ++void sys_set_audio_state(int onoff); ++ ++/* API dependent audio flags and settings */ ++void oss_set32bit( void); ++void linux_alsa_devname(char *devname); ++ ++void sys_get_audio_params( ++ int *pnaudioindev, int *paudioindev, int *chindev, ++ int *pnaudiooutdev, int *paudiooutdev, int *choutdev, ++ int *prate, int *padvance, int *callback); ++void sys_save_audio_params( ++ int naudioindev, int *audioindev, int *chindev, ++ int naudiooutdev, int *audiooutdev, int *choutdev, ++ int rate, int advance, int callback); ++ ++/* s_file.c */ ++ ++typedef void (*t_printhook)(const char *s); ++extern t_printhook sys_printhook; /* set this to override printing */ ++extern int sys_printtostderr; ++ ++/* jsarlo { */ ++ ++EXTERN double sys_time; ++EXTERN double sys_time_per_dsp_tick; ++EXTERN int sys_externalschedlib; ++ ++EXTERN t_sample* get_sys_soundout(void ) ; ++EXTERN t_sample* get_sys_soundin(void ) ; ++EXTERN int* get_sys_main_advance(void ) ; ++EXTERN double* get_sys_time_per_dsp_tick(void ) ; ++EXTERN int* get_sys_schedblocksize(void ) ; ++EXTERN double* get_sys_time(void ) ; ++EXTERN t_float* get_sys_dacsr(void ) ; ++EXTERN int* get_sys_sleepgrain(void ) ; ++EXTERN int* get_sys_schedadvance(void ) ; ++ ++EXTERN void sys_clearhist(void ); ++EXTERN void sys_initmidiqueue(void ); ++EXTERN int sys_addhist(int phase); ++EXTERN void sys_setmiditimediff(double inbuftime, double outbuftime); ++EXTERN void sched_tick(double next_sys_time); ++EXTERN void sys_pollmidiqueue(void ); ++EXTERN int sys_pollgui(void ); ++EXTERN void sys_setchsr(int chin, int chout, int sr); ++ ++EXTERN void inmidi_noteon(int portno, int channel, int pitch, int velo); ++EXTERN void inmidi_controlchange(int portno, ++ int channel, ++ int ctlnumber, ++ int value); ++EXTERN void inmidi_programchange(int portno, int channel, int value); ++EXTERN void inmidi_pitchbend(int portno, int channel, int value); ++EXTERN void inmidi_aftertouch(int portno, int channel, int value); ++EXTERN void inmidi_polyaftertouch(int portno, ++ int channel, ++ int pitch, ++ int value); ++/* } jsarlo */ ++extern t_widgetbehavior text_widgetbehavior; +--- /dev/null ++++ pd-hcs-0.1/g_canvas.h +@@ -0,0 +1,618 @@ ++/* Copyright (c) 1997-1999 Miller Puckette. ++* For information on usage and redistribution, and for a DISCLAIMER OF ALL ++* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */ ++ ++/* this file defines the structure for "glists" and related structures and ++functions. "Glists" and "canvases" and "graphs" used to be different ++structures until being unified in version 0.35. ++ ++A glist occupies its own window if the "gl_havewindow" flag is set. Its ++appearance on its "parent", also called "owner", (if it has one) is as a graph ++if "gl_isgraph" is set, and otherwise as a text box. ++ ++A glist is "root" if it has no owner, i.e., a document window. In this ++case "gl_havewindow" is always set. ++ ++We maintain a list of root windows, so that we can traverse the whole ++collection of everything in a Pd process. ++ ++If a glist has a window it may still not be "mapped." Miniaturized ++windows aren't mapped, for example, but a window is also not mapped ++immediately upon creation. In either case gl_havewindow is true but ++gl_mapped is false. ++ ++Closing a non-root window makes it invisible; closing a root destroys it. ++ ++A glist that's just a text object on its parent is always "toplevel." An ++embedded glist can switch back and forth to appear as a toplevel by double- ++clicking on it. Single-clicking a text box makes the toplevel become visible ++and raises the window it's in. ++ ++If a glist shows up as a graph on its parent, the graph is blanked while the ++glist has its own window, even if miniaturized. ++ ++*/ ++ ++/* NOTE: this file describes Pd implementation details which may change ++in future releases. The public (stable) API is in m_pd.h. */ ++ ++#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) ++extern "C" { ++#endif ++ ++/* --------------------- geometry ---------------------------- */ ++#define IOWIDTH 7 /* width of an inlet/outlet in pixels */ ++#define IOMIDDLE ((IOWIDTH-1)/2) ++#define GLIST_DEFGRAPHWIDTH 200 ++#define GLIST_DEFGRAPHHEIGHT 140 ++/* ----------------------- data ------------------------------- */ ++ ++typedef struct _updateheader ++{ ++ struct _updateheader *upd_next; ++ unsigned int upd_array:1; /* true if array, false if glist */ ++ unsigned int upd_queued:1; /* true if we're queued */ ++} t_updateheader; ++ ++ /* types to support glists grabbing mouse motion or keys from parent */ ++typedef void (*t_glistmotionfn)(void *z, t_floatarg dx, t_floatarg dy); ++typedef void (*t_glistkeyfn)(void *z, t_floatarg key); ++ ++EXTERN_STRUCT _rtext; ++#define t_rtext struct _rtext ++ ++EXTERN_STRUCT _gtemplate; ++#define t_gtemplate struct _gtemplate ++ ++EXTERN_STRUCT _guiconnect; ++#define t_guiconnect struct _guiconnect ++ ++EXTERN_STRUCT _tscalar; ++#define t_tscalar struct _tscalar ++ ++EXTERN_STRUCT _canvasenvironment; ++#define t_canvasenvironment struct _canvasenvironment ++ ++EXTERN_STRUCT _fielddesc; ++#define t_fielddesc struct _fielddesc ++ ++typedef struct _selection ++{ ++ t_gobj *sel_what; ++ struct _selection *sel_next; ++} t_selection; ++ ++ /* this structure is instantiated whenever a glist becomes visible. */ ++typedef struct _editor ++{ ++ t_updateheader e_upd; /* update header structure */ ++ t_selection *e_updlist; /* list of objects to update */ ++ t_rtext *e_rtext; /* text responder linked list */ ++ t_selection *e_selection; /* head of the selection list */ ++ t_rtext *e_textedfor; /* the rtext if any that we are editing */ ++ t_gobj *e_grab; /* object being "dragged" */ ++ t_glistmotionfn e_motionfn; /* ... motion callback */ ++ t_glistkeyfn e_keyfn; /* ... keypress callback */ ++ t_binbuf *e_connectbuf; /* connections to deleted objects */ ++ t_binbuf *e_deleted; /* last stuff we deleted */ ++ t_guiconnect *e_guiconnect; /* GUI connection for filtering messages */ ++ struct _glist *e_glist; /* glist which owns this */ ++ int e_xwas; /* xpos on last mousedown or motion event */ ++ int e_ywas; /* ypos, similarly */ ++ int e_selectline_index1; /* indices for the selected line if any */ ++ int e_selectline_outno; /* (only valid if e_selectedline is set) */ ++ int e_selectline_index2; ++ int e_selectline_inno; ++ t_outconnect *e_selectline_tag; ++ unsigned int e_onmotion: 3; /* action to take on motion */ ++ unsigned int e_lastmoved: 1; /* one if mouse has moved since click */ ++ unsigned int e_textdirty: 1; /* one if e_textedfor has changed */ ++ unsigned int e_selectedline: 1; /* one if a line is selected */ ++} t_editor; ++ ++#define MA_NONE 0 /* e_onmotion: do nothing on mouse motion */ ++#define MA_MOVE 1 /* drag the selection around */ ++#define MA_CONNECT 2 /* make a connection */ ++#define MA_REGION 3 /* selection region */ ++#define MA_PASSOUT 4 /* send on to e_grab */ ++#define MA_DRAGTEXT 5 /* drag in text editor to alter selection */ ++ ++/* editor structure for "garrays". We don't bother to delete and regenerate ++this structure when the "garray" becomes invisible or visible, although we ++could do so if the structure gets big (like the "editor" above.) */ ++ ++typedef struct _arrayvis ++{ ++ t_updateheader av_upd; /* update header structure */ ++ t_garray *av_garray; /* owning structure */ ++} t_arrayvis; ++ ++/* the t_tick structure describes where to draw x and y "ticks" for a glist */ ++ ++typedef struct _tick /* where to put ticks on x or y axes */ ++{ ++ t_float k_point; /* one point to draw a big tick at */ ++ t_float k_inc; /* x or y increment per little tick */ ++ int k_lperb; /* little ticks per big; 0 if no ticks to draw */ ++} t_tick; ++ ++/* the t_glist structure, which describes a list of elements that live on an ++area of a window. ++ ++*/ ++ ++struct _glist ++{ ++ t_object gl_obj; /* header in case we're a glist */ ++ t_gobj *gl_list; /* the actual data */ ++ struct _gstub *gl_stub; /* safe pointer handler */ ++ int gl_valid; /* incremented when pointers might be stale */ ++ struct _glist *gl_owner; /* parent glist, supercanvas, or 0 if none */ ++ int gl_pixwidth; /* width in pixels (on parent, if a graph) */ ++ int gl_pixheight; ++ t_float gl_x1; /* bounding rectangle in our own coordinates */ ++ t_float gl_y1; ++ t_float gl_x2; ++ t_float gl_y2; ++ int gl_screenx1; /* screen coordinates when toplevel */ ++ int gl_screeny1; ++ int gl_screenx2; ++ int gl_screeny2; ++ int gl_xmargin; /* origin for GOP rectangle */ ++ int gl_ymargin; ++ t_tick gl_xtick; /* ticks marking X values */ ++ int gl_nxlabels; /* number of X coordinate labels */ ++ t_symbol **gl_xlabel; /* ... an array to hold them */ ++ t_float gl_xlabely; /* ... and their Y coordinates */ ++ t_tick gl_ytick; /* same as above for Y ticks and labels */ ++ int gl_nylabels; ++ t_symbol **gl_ylabel; ++ t_float gl_ylabelx; ++ t_editor *gl_editor; /* editor structure when visible */ ++ t_symbol *gl_name; /* symbol bound here */ ++ int gl_font; /* nominal font size in points, e.g., 10 */ ++ struct _glist *gl_next; /* link in list of toplevels */ ++ t_canvasenvironment *gl_env; /* root canvases and abstractions only */ ++ unsigned int gl_havewindow:1; /* true if we own a window */ ++ unsigned int gl_mapped:1; /* true if, moreover, it's "mapped" */ ++ unsigned int gl_dirty:1; /* (root canvas only:) patch has changed */ ++ unsigned int gl_loading:1; /* am now loading from file */ ++ unsigned int gl_willvis:1; /* make me visible after loading */ ++ unsigned int gl_edit:1; /* edit mode */ ++ unsigned int gl_isdeleting:1; /* we're inside glist_delete -- hack! */ ++ unsigned int gl_goprect:1; /* draw rectangle for graph-on-parent */ ++ unsigned int gl_isgraph:1; /* show as graph on parent */ ++ unsigned int gl_hidetext:1; /* hide object-name + args when doing graph on parent */ ++}; ++ ++#define gl_gobj gl_obj.te_g ++#define gl_pd gl_gobj.g_pd ++ ++/* a data structure to describe a field in a pure datum */ ++ ++#define DT_FLOAT 0 ++#define DT_SYMBOL 1 ++#define DT_LIST 2 ++#define DT_ARRAY 3 ++ ++typedef struct _dataslot ++{ ++ int ds_type; ++ t_symbol *ds_name; ++ t_symbol *ds_arraytemplate; /* filled in for arrays only */ ++} t_dataslot; ++ ++typedef struct _template ++{ ++ t_pd t_pdobj; /* header */ ++ struct _gtemplate *t_list; /* list of "struct"/gtemplate objects */ ++ t_symbol *t_sym; /* name */ ++ int t_n; /* number of dataslots (fields) */ ++ t_dataslot *t_vec; /* array of dataslots */ ++} t_template; ++ ++struct _array ++{ ++ int a_n; /* number of elements */ ++ int a_elemsize; /* size in bytes; LATER get this from template */ ++ char *a_vec; /* array of elements */ ++ t_symbol *a_templatesym; /* template for elements */ ++ int a_valid; /* protection against stale pointers into array */ ++ t_gpointer a_gp; /* pointer to scalar or array element we're in */ ++ t_gstub *a_stub; /* stub for pointing into this array */ ++}; ++ ++ /* structure for traversing all the connections in a glist */ ++typedef struct _linetraverser ++{ ++ t_canvas *tr_x; ++ t_object *tr_ob; ++ int tr_nout; ++ int tr_outno; ++ t_object *tr_ob2; ++ t_outlet *tr_outlet; ++ t_inlet *tr_inlet; ++ int tr_nin; ++ int tr_inno; ++ int tr_x11, tr_y11, tr_x12, tr_y12; ++ int tr_x21, tr_y21, tr_x22, tr_y22; ++ int tr_lx1, tr_ly1, tr_lx2, tr_ly2; ++ t_outconnect *tr_nextoc; ++ int tr_nextoutno; ++} t_linetraverser; ++ ++/* function types used to define graphical behavior for gobjs, a bit like X ++widgets. We don't use Pd methods because Pd's typechecking can't specify the ++types of pointer arguments. Also it's more convenient this way, since ++every "patchable" object can just get the "text" behaviors. */ ++ ++ /* Call this to get a gobj's bounding rectangle in pixels */ ++typedef void (*t_getrectfn)(t_gobj *x, struct _glist *glist, ++ int *x1, int *y1, int *x2, int *y2); ++ /* and this to displace a gobj: */ ++typedef void (*t_displacefn)(t_gobj *x, struct _glist *glist, int dx, int dy); ++ /* change color to show selection: */ ++typedef void (*t_selectfn)(t_gobj *x, struct _glist *glist, int state); ++ /* change appearance to show activation/deactivation: */ ++typedef void (*t_activatefn)(t_gobj *x, struct _glist *glist, int state); ++ /* warn a gobj it's about to be deleted */ ++typedef void (*t_deletefn)(t_gobj *x, struct _glist *glist); ++ /* making visible or invisible */ ++typedef void (*t_visfn)(t_gobj *x, struct _glist *glist, int flag); ++ /* field a mouse click (when not in "edit" mode) */ ++typedef int (*t_clickfn)(t_gobj *x, struct _glist *glist, ++ int xpix, int ypix, int shift, int alt, int dbl, int doit); ++ /* ... and later, resizing; getting/setting font or color... */ ++ ++struct _widgetbehavior ++{ ++ t_getrectfn w_getrectfn; ++ t_displacefn w_displacefn; ++ t_selectfn w_selectfn; ++ t_activatefn w_activatefn; ++ t_deletefn w_deletefn; ++ t_visfn w_visfn; ++ t_clickfn w_clickfn; ++}; ++ ++/* -------- behaviors for scalars defined by objects in template --------- */ ++/* these are set by "drawing commands" in g_template.c which add appearance to ++scalars, which live in some other window. If the scalar is just included ++in a canvas the "parent" is a misnomer. There is also a text scalar object ++which really does draw the scalar on the parent window; see g_scalar.c. */ ++ ++/* note how the click function wants the whole scalar, not the "data", so ++doesn't work on array elements... LATER reconsider this */ ++ ++ /* bounding rectangle: */ ++typedef void (*t_parentgetrectfn)(t_gobj *x, struct _glist *glist, ++ t_word *data, t_template *tmpl, t_float basex, t_float basey, ++ int *x1, int *y1, int *x2, int *y2); ++ /* displace it */ ++typedef void (*t_parentdisplacefn)(t_gobj *x, struct _glist *glist, ++ t_word *data, t_template *tmpl, t_float basex, t_float basey, ++ int dx, int dy); ++ /* change color to show selection */ ++typedef void (*t_parentselectfn)(t_gobj *x, struct _glist *glist, ++ t_word *data, t_template *tmpl, t_float basex, t_float basey, ++ int state); ++ /* change appearance to show activation/deactivation: */ ++typedef void (*t_parentactivatefn)(t_gobj *x, struct _glist *glist, ++ t_word *data, t_template *tmpl, t_float basex, t_float basey, ++ int state); ++ /* making visible or invisible */ ++typedef void (*t_parentvisfn)(t_gobj *x, struct _glist *glist, ++ t_word *data, t_template *tmpl, t_float basex, t_float basey, ++ int flag); ++ /* field a mouse click */ ++typedef int (*t_parentclickfn)(t_gobj *x, struct _glist *glist, ++ t_word *data, t_template *tmpl, t_scalar *sc, t_array *ap, ++ t_float basex, t_float basey, ++ int xpix, int ypix, int shift, int alt, int dbl, int doit); ++ ++struct _parentwidgetbehavior ++{ ++ t_parentgetrectfn w_parentgetrectfn; ++ t_parentdisplacefn w_parentdisplacefn; ++ t_parentselectfn w_parentselectfn; ++ t_parentactivatefn w_parentactivatefn; ++ t_parentvisfn w_parentvisfn; ++ t_parentclickfn w_parentclickfn; ++}; ++ ++ /* cursor definitions; used as return value for t_parentclickfn */ ++#define CURSOR_RUNMODE_NOTHING 0 ++#define CURSOR_RUNMODE_CLICKME 1 ++#define CURSOR_RUNMODE_THICKEN 2 ++#define CURSOR_RUNMODE_ADDPOINT 3 ++#define CURSOR_EDITMODE_NOTHING 4 ++#define CURSOR_EDITMODE_CONNECT 5 ++#define CURSOR_EDITMODE_DISCONNECT 6 ++EXTERN void canvas_setcursor(t_glist *x, unsigned int cursornum); ++ ++extern t_canvas *canvas_editing; /* last canvas to start text edting */ ++extern t_canvas *canvas_whichfind; /* last canvas we did a find in */ ++extern t_canvas *canvas_list; /* list of all root canvases */ ++extern t_class *vinlet_class, *voutlet_class; ++extern int glist_valid; /* incremented when pointers might be stale */ ++ ++#define PLOTSTYLE_POINTS 0 /* plotting styles for arrays */ ++#define PLOTSTYLE_POLY 1 ++#define PLOTSTYLE_BEZ 2 ++ ++/* ------------------- functions on any gobj ----------------------------- */ ++EXTERN void gobj_getrect(t_gobj *x, t_glist *owner, int *x1, int *y1, ++ int *x2, int *y2); ++EXTERN void gobj_displace(t_gobj *x, t_glist *owner, int dx, int dy); ++EXTERN void gobj_select(t_gobj *x, t_glist *owner, int state); ++EXTERN void gobj_activate(t_gobj *x, t_glist *owner, int state); ++EXTERN void gobj_delete(t_gobj *x, t_glist *owner); ++EXTERN void gobj_vis(t_gobj *x, t_glist *glist, int flag); ++EXTERN int gobj_click(t_gobj *x, struct _glist *glist, ++ int xpix, int ypix, int shift, int alt, int dbl, int doit); ++EXTERN void gobj_save(t_gobj *x, t_binbuf *b); ++EXTERN void gobj_properties(t_gobj *x, struct _glist *glist); ++EXTERN void gobj_save(t_gobj *x, t_binbuf *b); ++EXTERN int gobj_shouldvis(t_gobj *x, struct _glist *glist); ++ ++/* -------------------- functions on glists --------------------- */ ++EXTERN t_glist *glist_new( void); ++EXTERN void glist_init(t_glist *x); ++EXTERN void glist_add(t_glist *x, t_gobj *g); ++EXTERN void glist_cleanup(t_glist *x); ++EXTERN void glist_free(t_glist *x); ++ ++EXTERN void glist_clear(t_glist *x); ++EXTERN t_canvas *glist_getcanvas(t_glist *x); ++EXTERN int glist_isselected(t_glist *x, t_gobj *y); ++EXTERN void glist_select(t_glist *x, t_gobj *y); ++EXTERN void glist_deselect(t_glist *x, t_gobj *y); ++EXTERN void glist_noselect(t_glist *x); ++EXTERN void glist_selectall(t_glist *x); ++EXTERN void glist_delete(t_glist *x, t_gobj *y); ++EXTERN void glist_retext(t_glist *x, t_text *y); ++EXTERN void glist_grab(t_glist *x, t_gobj *y, t_glistmotionfn motionfn, ++ t_glistkeyfn keyfn, int xpos, int ypos); ++EXTERN int glist_isvisible(t_glist *x); ++EXTERN int glist_istoplevel(t_glist *x); ++EXTERN t_glist *glist_findgraph(t_glist *x); ++EXTERN int glist_getfont(t_glist *x); ++EXTERN void glist_sort(t_glist *canvas); ++EXTERN void glist_read(t_glist *x, t_symbol *filename, t_symbol *format); ++EXTERN void glist_mergefile(t_glist *x, t_symbol *filename, t_symbol *format); ++ ++EXTERN t_float glist_pixelstox(t_glist *x, t_float xpix); ++EXTERN t_float glist_pixelstoy(t_glist *x, t_float ypix); ++EXTERN t_float glist_xtopixels(t_glist *x, t_float xval); ++EXTERN t_float glist_ytopixels(t_glist *x, t_float yval); ++EXTERN t_float glist_dpixtodx(t_glist *x, t_float dxpix); ++EXTERN t_float glist_dpixtody(t_glist *x, t_float dypix); ++ ++EXTERN void glist_getnextxy(t_glist *gl, int *xval, int *yval); ++EXTERN void glist_glist(t_glist *g, t_symbol *s, int argc, t_atom *argv); ++EXTERN t_glist *glist_addglist(t_glist *g, t_symbol *sym, ++ t_float x1, t_float y1, t_float x2, t_float y2, ++ t_float px1, t_float py1, t_float px2, t_float py2); ++EXTERN void glist_arraydialog(t_glist *parent, t_symbol *name, ++ t_floatarg size, t_floatarg saveit, t_floatarg newgraph); ++EXTERN t_binbuf *glist_writetobinbuf(t_glist *x, int wholething); ++EXTERN int glist_isgraph(t_glist *x); ++EXTERN void glist_redraw(t_glist *x); ++EXTERN void glist_drawiofor(t_glist *glist, t_object *ob, int firsttime, ++ char *tag, int x1, int y1, int x2, int y2); ++EXTERN void glist_eraseiofor(t_glist *glist, t_object *ob, char *tag); ++EXTERN void canvas_create_editor(t_glist *x); ++EXTERN void canvas_destroy_editor(t_glist *x); ++void canvas_deletelinesforio(t_canvas *x, t_text *text, ++ t_inlet *inp, t_outlet *outp); ++extern int glist_amreloadingabstractions; /* stop GUI changes while reloading */ ++ ++/* -------------------- functions on texts ------------------------- */ ++EXTERN void text_setto(t_text *x, t_glist *glist, char *buf, int bufsize); ++EXTERN void text_drawborder(t_text *x, t_glist *glist, char *tag, ++ int width, int height, int firsttime); ++EXTERN void text_eraseborder(t_text *x, t_glist *glist, char *tag); ++EXTERN int text_xcoord(t_text *x, t_glist *glist); ++EXTERN int text_ycoord(t_text *x, t_glist *glist); ++EXTERN int text_xpix(t_text *x, t_glist *glist); ++EXTERN int text_ypix(t_text *x, t_glist *glist); ++ ++/* -------------------- functions on rtexts ------------------------- */ ++#define RTEXT_DOWN 1 ++#define RTEXT_DRAG 2 ++#define RTEXT_DBL 3 ++#define RTEXT_SHIFT 4 ++ ++EXTERN t_rtext *rtext_new(t_glist *glist, t_text *who); ++EXTERN t_rtext *glist_findrtext(t_glist *gl, t_text *who); ++EXTERN void rtext_draw(t_rtext *x); ++EXTERN void rtext_erase(t_rtext *x); ++EXTERN t_rtext *rtext_remove(t_rtext *first, t_rtext *x); ++EXTERN int rtext_height(t_rtext *x); ++EXTERN void rtext_displace(t_rtext *x, int dx, int dy); ++EXTERN void rtext_select(t_rtext *x, int state); ++EXTERN void rtext_activate(t_rtext *x, int state); ++EXTERN void rtext_free(t_rtext *x); ++EXTERN void rtext_key(t_rtext *x, int n, t_symbol *s); ++EXTERN void rtext_mouse(t_rtext *x, int xval, int yval, int flag); ++EXTERN void rtext_retext(t_rtext *x); ++EXTERN int rtext_width(t_rtext *x); ++EXTERN int rtext_height(t_rtext *x); ++EXTERN char *rtext_gettag(t_rtext *x); ++EXTERN void rtext_gettext(t_rtext *x, char **buf, int *bufsize); ++EXTERN void rtext_getseltext(t_rtext *x, char **buf, int *bufsize); ++ ++/* -------------------- functions on canvases ------------------------ */ ++EXTERN t_class *canvas_class; ++ ++EXTERN t_canvas *canvas_new(void *dummy, t_symbol *sel, int argc, t_atom *argv); ++EXTERN t_symbol *canvas_makebindsym(t_symbol *s); ++EXTERN void canvas_vistext(t_canvas *x, t_text *y); ++EXTERN void canvas_fixlinesfor(t_canvas *x, t_text *text); ++EXTERN void canvas_deletelinesfor(t_canvas *x, t_text *text); ++EXTERN void canvas_stowconnections(t_canvas *x); ++EXTERN void canvas_restoreconnections(t_canvas *x); ++EXTERN void canvas_redraw(t_canvas *x); ++ ++EXTERN t_inlet *canvas_addinlet(t_canvas *x, t_pd *who, t_symbol *sym); ++EXTERN void canvas_rminlet(t_canvas *x, t_inlet *ip); ++EXTERN t_outlet *canvas_addoutlet(t_canvas *x, t_pd *who, t_symbol *sym); ++EXTERN void canvas_rmoutlet(t_canvas *x, t_outlet *op); ++EXTERN void canvas_redrawallfortemplate(t_template *tmpl, int action); ++EXTERN void canvas_redrawallfortemplatecanvas(t_canvas *x, int action); ++EXTERN void canvas_zapallfortemplate(t_canvas *tmpl); ++EXTERN void canvas_setusedastemplate(t_canvas *x); ++EXTERN t_canvas *canvas_getcurrent(void); ++EXTERN void canvas_setcurrent(t_canvas *x); ++EXTERN void canvas_unsetcurrent(t_canvas *x); ++EXTERN t_symbol *canvas_realizedollar(t_canvas *x, t_symbol *s); ++EXTERN t_canvas *canvas_getrootfor(t_canvas *x); ++EXTERN void canvas_dirty(t_canvas *x, t_floatarg n); ++EXTERN int canvas_getfont(t_canvas *x); ++typedef int (*t_canvasapply)(t_canvas *x, t_int x1, t_int x2, t_int x3); ++ ++EXTERN t_int *canvas_recurapply(t_canvas *x, t_canvasapply *fn, ++ t_int x1, t_int x2, t_int x3); ++ ++EXTERN void canvas_resortinlets(t_canvas *x); ++EXTERN void canvas_resortoutlets(t_canvas *x); ++EXTERN void canvas_free(t_canvas *x); ++EXTERN void canvas_updatewindowlist( void); ++EXTERN void canvas_editmode(t_canvas *x, t_floatarg yesplease); ++EXTERN int canvas_isabstraction(t_canvas *x); ++EXTERN int canvas_istable(t_canvas *x); ++EXTERN int canvas_showtext(t_canvas *x); ++EXTERN void canvas_vis(t_canvas *x, t_floatarg f); ++EXTERN t_canvasenvironment *canvas_getenv(t_canvas *x); ++EXTERN void canvas_rename(t_canvas *x, t_symbol *s, t_symbol *dir); ++EXTERN void canvas_loadbang(t_canvas *x); ++EXTERN int canvas_hitbox(t_canvas *x, t_gobj *y, int xpos, int ypos, ++ int *x1p, int *y1p, int *x2p, int *y2p); ++EXTERN int canvas_setdeleting(t_canvas *x, int flag); ++ ++typedef void (*t_undofn)(t_canvas *canvas, void *buf, ++ int action); /* a function that does UNDO/REDO */ ++#define UNDO_FREE 0 /* free current undo/redo buffer */ ++#define UNDO_UNDO 1 /* undo */ ++#define UNDO_REDO 2 /* redo */ ++EXTERN void canvas_setundo(t_canvas *x, t_undofn undofn, void *buf, ++ const char *name); ++EXTERN void canvas_noundo(t_canvas *x); ++EXTERN int canvas_getindex(t_canvas *x, t_gobj *y); ++ ++EXTERN void canvas_connect(t_canvas *x, ++ t_floatarg fwhoout, t_floatarg foutno,t_floatarg fwhoin, t_floatarg finno); ++EXTERN void canvas_disconnect(t_canvas *x, ++ t_float index1, t_float outno, t_float index2, t_float inno); ++EXTERN int canvas_isconnected (t_canvas *x, ++ t_text *ob1, int n1, t_text *ob2, int n2); ++EXTERN void canvas_selectinrect(t_canvas *x, int lox, int loy, int hix, int hiy); ++ ++ ++/* ---- functions on canvasses as objects --------------------- */ ++ ++EXTERN void canvas_fattenforscalars(t_canvas *x, ++ int *x1, int *y1, int *x2, int *y2); ++EXTERN void canvas_visforscalars(t_canvas *x, t_glist *glist, int vis); ++EXTERN int canvas_clicksub(t_canvas *x, int xpix, int ypix, int shift, ++ int alt, int dbl, int doit); ++EXTERN t_glist *canvas_getglistonsuper(void); ++ ++EXTERN void linetraverser_start(t_linetraverser *t, t_canvas *x); ++EXTERN t_outconnect *linetraverser_next(t_linetraverser *t); ++EXTERN void linetraverser_skipobject(t_linetraverser *t); ++ ++/* --------- functions on garrays (graphical arrays) -------------------- */ ++ ++EXTERN t_template *garray_template(t_garray *x); ++ ++/* -------------------- arrays --------------------- */ ++EXTERN t_garray *graph_array(t_glist *gl, t_symbol *s, t_symbol *tmpl, ++ t_floatarg f, t_floatarg saveit); ++EXTERN t_array *array_new(t_symbol *templatesym, t_gpointer *parent); ++EXTERN void array_resize(t_array *x, int n); ++EXTERN void array_free(t_array *x); ++ ++/* --------------------- gpointers and stubs ---------------- */ ++EXTERN t_gstub *gstub_new(t_glist *gl, t_array *a); ++EXTERN void gstub_cutoff(t_gstub *gs); ++EXTERN void gpointer_setglist(t_gpointer *gp, t_glist *glist, t_scalar *x); ++EXTERN void gpointer_setarray(t_gpointer *gp, t_array *array, t_word *w); ++ ++/* --------------------- scalars ------------------------- */ ++EXTERN void word_init(t_word *wp, t_template *tmpl, t_gpointer *gp); ++EXTERN void word_restore(t_word *wp, t_template *tmpl, ++ int argc, t_atom *argv); ++EXTERN t_scalar *scalar_new(t_glist *owner, ++ t_symbol *templatesym); ++EXTERN void word_free(t_word *wp, t_template *tmpl); ++EXTERN void scalar_getbasexy(t_scalar *x, t_float *basex, t_float *basey); ++EXTERN void scalar_redraw(t_scalar *x, t_glist *glist); ++ ++/* ------helper routines for "garrays" and "plots" -------------- */ ++EXTERN int array_doclick(t_array *array, t_glist *glist, t_scalar *sc, t_array *ap, ++ t_symbol *elemtemplatesym, ++ t_float linewidth, t_float xloc, t_float xinc, t_float yloc, t_float scalarvis, ++ t_fielddesc *xfield, t_fielddesc *yfield, t_fielddesc *wfield, ++ int xpix, int ypix, int shift, int alt, int dbl, int doit); ++ ++EXTERN void array_getcoordinate(t_glist *glist, ++ char *elem, int xonset, int yonset, int wonset, int indx, ++ t_float basex, t_float basey, t_float xinc, ++ t_fielddesc *xfielddesc, t_fielddesc *yfielddesc, t_fielddesc *wfielddesc, ++ t_float *xp, t_float *yp, t_float *wp); ++ ++EXTERN int array_getfields(t_symbol *elemtemplatesym, ++ t_canvas **elemtemplatecanvasp, ++ t_template **elemtemplatep, int *elemsizep, ++ t_fielddesc *xfielddesc, t_fielddesc *yfielddesc, t_fielddesc *wfielddesc, ++ int *xonsetp, int *yonsetp, int *wonsetp); ++ ++/* --------------------- templates ------------------------- */ ++EXTERN t_template *template_new(t_symbol *sym, int argc, t_atom *argv); ++EXTERN void template_free(t_template *x); ++EXTERN int template_match(t_template *x1, t_template *x2); ++EXTERN int template_find_field(t_template *x, t_symbol *name, int *p_onset, ++ int *p_type, t_symbol **p_arraytype); ++EXTERN t_float template_getfloat(t_template *x, t_symbol *fieldname, t_word *wp, ++ int loud); ++EXTERN void template_setfloat(t_template *x, t_symbol *fieldname, t_word *wp, ++ t_float f, int loud); ++EXTERN t_symbol *template_getsymbol(t_template *x, t_symbol *fieldname, ++ t_word *wp, int loud); ++EXTERN void template_setsymbol(t_template *x, t_symbol *fieldname, ++ t_word *wp, t_symbol *s, int loud); ++ ++EXTERN t_template *gtemplate_get(t_gtemplate *x); ++EXTERN t_template *template_findbyname(t_symbol *s); ++EXTERN t_canvas *template_findcanvas(t_template *tmpl); ++EXTERN void template_notify(t_template *tmpl, ++ t_symbol *s, int argc, t_atom *argv); ++ ++EXTERN t_float template_getfloat(t_template *x, t_symbol *fieldname, ++ t_word *wp, int loud); ++EXTERN void template_setfloat(t_template *x, t_symbol *fieldname, ++ t_word *wp, t_float f, int loud); ++EXTERN t_symbol *template_getsymbol(t_template *x, t_symbol *fieldname, ++ t_word *wp, int loud); ++EXTERN void template_setsymbol(t_template *x, t_symbol *fieldname, ++ t_word *wp, t_symbol *s, int loud); ++EXTERN t_float fielddesc_getcoord(t_fielddesc *f, t_template *tmpl, ++ t_word *wp, int loud); ++EXTERN void fielddesc_setcoord(t_fielddesc *f, t_template *tmpl, ++ t_word *wp, t_float pix, int loud); ++EXTERN t_float fielddesc_cvttocoord(t_fielddesc *f, t_float val); ++EXTERN t_float fielddesc_cvtfromcoord(t_fielddesc *f, t_float coord); ++ ++ ++/* ----------------------- guiconnects, g_guiconnect.c --------- */ ++EXTERN t_guiconnect *guiconnect_new(t_pd *who, t_symbol *sym); ++EXTERN void guiconnect_notarget(t_guiconnect *x, double timedelay); ++ ++/* ------------- IEMGUI routines used in other g_ files ---------------- */ ++EXTERN t_symbol *iemgui_raute2dollar(t_symbol *s); ++EXTERN t_symbol *iemgui_dollar2raute(t_symbol *s); ++ ++#if defined(_LANGUAGE_C_PLUS_PLUS) || defined(__cplusplus) ++} ++#endif diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..4985374 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1 @@ +add_required_internal_pd_headers diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..119936d --- /dev/null +++ b/debian/rules @@ -0,0 +1,17 @@ +#!/usr/bin/make -f + +LIBRARY_NAME = vbap +PACKAGE = pd-$(LIBRARY_NAME) +pkglibdir = /usr/lib/pd/extra + +%: + dh --with quilt $@ --buildsystem=makefile + +override_dh_auto_install: + dh_auto_install -- prefix=/usr pkglibdir=$(pkglibdir) +# replace license file with link to the Debian license file + rm -f -- $(CURDIR)/debian/$(PACKAGE)/$(pkglibdir)/$(LIBRARY_NAME)/LICENSE.txt + +override_dh_shlibdeps: + dpkg-shlibdeps $(CURDIR)/debian/$(PACKAGE)$(pkglibdir)/$(LIBRARY_NAME)/*.pd_linux \ + -T$(CURDIR)/debian/$(PACKAGE).substvars diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..82c0d1a --- /dev/null +++ b/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://sf.net/pure-data/template-(.*)\.tar\.gz diff --git a/define_loudspeakers.c b/define_loudspeakers.c index 2ce8457..b2fd351 100644 --- a/define_loudspeakers.c +++ b/define_loudspeakers.c @@ -5,7 +5,7 @@ Helsinki University of Technology and Unversity of California at Berkeley -See copyright in file with name COPYRIGHT */ +See copyright in file with name LICENSE.txt */ #include "define_loudspeakers.h" diff --git a/define_loudspeakers.h b/define_loudspeakers.h index 2b124cc..de5d0a9 100644 --- a/define_loudspeakers.h +++ b/define_loudspeakers.h @@ -5,7 +5,7 @@ Helsinki University of Technology and Unversity of California at Berkeley -See copyright in file with name COPYRIGHT */ +See copyright in file with name LICENSE.txt */ #include "vbap.h" diff --git a/examples/graph-to-aziele.pd b/examples/graph-to-aziele.pd new file mode 100644 index 0000000..0597f8a --- /dev/null +++ b/examples/graph-to-aziele.pd @@ -0,0 +1,51 @@ +#N canvas 549 17 647 652 12; +#X obj 42 505 expr acos($f1/$f3) * 180 / 3.1415 * $f2; +#X obj 323 366 expr sqrt($f1); +#X obj 323 338 + 0; +#X obj 78 313 * 0; +#X obj 343 276 * 0; +#X msg 460 505 0; +#X msg 233 265 -1; +#X msg 268 265 1; +#X obj 42 249 expr ($f1-0.5)/0.5; +#X obj 233 145 expr ($f1-0.5)/0.5; +#X obj 42 16 inlet; +#X obj 42 570 outlet; +#X obj 488 569 outlet; +#X obj 407 431 expr 90 - ($f1*90.0); +#X obj 460 479 moses 0; +#X obj 233 238 moses 0; +#X obj 42 279 t f f f; +#X obj 233 179 t f f f; +#X obj 42 99 unpack f f; +#X msg 42 67 \$2 \$1; +#X text 101 66 reverse order; +#X text 101 16 float x \, float y; +#X obj 323 393 t f f; +#X connect 0 0 11 0; +#X connect 1 0 22 0; +#X connect 2 0 1 0; +#X connect 3 0 2 0; +#X connect 4 0 2 1; +#X connect 5 0 12 0; +#X connect 6 0 0 1; +#X connect 7 0 0 1; +#X connect 8 0 16 0; +#X connect 9 0 17 0; +#X connect 10 0 19 0; +#X connect 13 0 14 0; +#X connect 14 0 5 0; +#X connect 14 1 12 0; +#X connect 15 0 6 0; +#X connect 15 1 7 0; +#X connect 16 0 0 0; +#X connect 16 1 3 0; +#X connect 16 2 3 1; +#X connect 17 0 15 0; +#X connect 17 1 4 0; +#X connect 17 2 4 1; +#X connect 18 0 8 0; +#X connect 18 1 9 0; +#X connect 19 0 18 0; +#X connect 22 0 0 2; +#X connect 22 1 13 0; diff --git a/examples/high.pd b/examples/high.pd new file mode 100644 index 0000000..f6bbfba --- /dev/null +++ b/examples/high.pd @@ -0,0 +1,27 @@ +#N canvas 0 0 576 425 10; +#X obj 102 43 inlet; +#X obj 124 188 f 0; +#X obj 102 239 >; +#X obj 102 281 sel 1; +#X obj 201 158 f; +#X obj 203 354 outlet; +#X obj 203 267 f; +#X obj 292 42 inlet; +#X text 339 42 reset to float; +#X text 148 44 test against high; +#X obj 102 91 t b f b f; +#X obj 292 89 t b f; +#X connect 0 0 10 0; +#X connect 1 0 2 1; +#X connect 1 0 6 1; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 1 0; +#X connect 6 0 5 0; +#X connect 7 0 11 0; +#X connect 10 0 6 0; +#X connect 10 1 2 0; +#X connect 10 2 1 0; +#X connect 10 3 4 1; +#X connect 11 0 6 0; +#X connect 11 1 1 0; diff --git a/examples/playsample~.pd b/examples/playsample~.pd new file mode 100644 index 0000000..bf2b06e --- /dev/null +++ b/examples/playsample~.pd @@ -0,0 +1,56 @@ +#N canvas 27 300 849 403 10; +#X obj 38 354 table \$0music; +#X obj 148 160 soundfiler; +#X floatatom 148 183 5 0 0; +#X obj 243 207 phasor~ 1; +#X floatatom 266 181 8 0 0; +#X obj 243 237 *~ 0; +#X msg 148 137 read -resize \$1 \$2; +#X obj 199 83 symbol \$0music; +#X obj 148 110 pack s s; +#X obj 199 48 loadbang; +#X obj 12 13 inlet; +#X text 59 12 .aiff file name; +#X obj 311 15 inlet; +#X text 356 15 phasor speed; +#X obj 243 334 outlet~; +#X obj 243 267 tabread4~ \$0music; +#X obj 302 83 samplerate~; +#X floatatom 310 107 5 0 0; +#X obj 460 14 inlet; +#X text 505 14 gain; +#X obj 243 306 *~ 1; +#X obj 148 210 t b f; +#X obj 148 232 f; +#X obj 148 254 /; +#X obj 419 334 outlet~; +#X text 303 333 sample signal; +#X text 483 334 phasor signal; +#X msg 557 41 0; +#X obj 557 16 inlet; +#X text 601 16 restart; +#X connect 1 0 2 0; +#X connect 2 0 5 1; +#X connect 2 0 21 0; +#X connect 3 0 5 0; +#X connect 3 0 24 0; +#X connect 4 0 3 0; +#X connect 5 0 15 0; +#X connect 6 0 1 0; +#X connect 7 0 8 1; +#X connect 8 0 6 0; +#X connect 9 0 7 0; +#X connect 9 0 16 0; +#X connect 10 0 8 0; +#X connect 12 0 3 0; +#X connect 15 0 20 0; +#X connect 16 0 17 0; +#X connect 16 0 22 1; +#X connect 18 0 20 1; +#X connect 20 0 14 0; +#X connect 21 0 22 0; +#X connect 21 1 23 1; +#X connect 22 0 23 0; +#X connect 23 0 4 0; +#X connect 27 0 3 1; +#X connect 28 0 27 0; diff --git a/examples/recent.pd b/examples/recent.pd new file mode 100644 index 0000000..add6c7d --- /dev/null +++ b/examples/recent.pd @@ -0,0 +1,14 @@ +#N canvas 399 148 452 302 12; +#X obj 56 55 inlet; +#X msg 91 123 clear; +#X obj 59 252 outlet; +#X obj 166 54 inlet; +#X text 8 5 output only most "recent" messages; +#X obj 56 89 t a b; +#X obj 59 202 pipe \$1; +#X connect 0 0 5 0; +#X connect 1 0 6 0; +#X connect 3 0 6 1; +#X connect 5 0 6 0; +#X connect 5 1 1 0; +#X connect 6 0 2 0; diff --git a/examples/vbap-demo.pd b/examples/vbap-demo.pd new file mode 100644 index 0000000..27095db --- /dev/null +++ b/examples/vbap-demo.pd @@ -0,0 +1,38 @@ +#N canvas 11 22 871 352 10; +#X obj 50 80 playsample~; +#X obj 50 55 openpanel; +#X msg 50 31 bang; +#X text 96 30 click to load and play a sample; +#X floatatom 133 80 5 0 0 0 - - -; +#X floatatom 133 101 5 0 0 0 - - -; +#X text 182 80 pitch; +#X text 182 102 volume; +#X floatatom 76 142 5 0 0 0 - - -; +#X floatatom 122 142 5 0 0 0 - - -; +#X floatatom 168 142 5 0 0 0 - - -; +#X text 218 143 set azimuth \, elevation \, spread; +#N canvas 152 420 615 353 using 0; +#X obj 59 258 graph-to-aziele; +#X obj 59 233 pack f f; +#X floatatom 59 281 5 0 0 0 - - -; +#X obj 59 78 grid grid1 144 0 1 144 0 1 0 0.001 0.001 10 10 103 91 +; +#X floatatom 159 281 5 0 0 0 - - -; +#X text 21 17 To use Yves Degoyon's GRID (http://ydegoyon.free.fr) +use graph-to-aziele.pd to count the azimuth and elevation.; +#X text 25 49 (note: GRID must output values between 0 - 1); +#X connect 0 0 2 0; +#X connect 0 1 4 0; +#X connect 1 0 0 0; +#X connect 3 0 1 0; +#X connect 3 1 1 1; +#X restore 506 112 pd using GRID with vbap; +#X obj 50 174 vbapmodule 1; +#X connect 0 0 13 0; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 4 0 0 1; +#X connect 5 0 0 2; +#X connect 8 0 13 1; +#X connect 9 0 13 2; +#X connect 10 0 13 3; diff --git a/examples/vbap-level-config.pd b/examples/vbap-level-config.pd new file mode 100644 index 0000000..3448c19 --- /dev/null +++ b/examples/vbap-level-config.pd @@ -0,0 +1,23 @@ +#N canvas 334 22 636 372 10; +#X obj 19 100 noise~; +#X obj 19 153 *~ 0.01; +#X obj 61 128 hsl 128 15 0.01 1 1 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X floatatom 71 149 5 0 0 0 - - -; +#X obj 19 183 cyclone/reson~ 1 1000 20; +#X obj 18 269 dac~ 1 2 3 4 5 6 7 8; +#X text 217 131 B. Measure loudspeaker distances. Delay all loudspeakers +to mimic the distance between listener and farthest loudspeaker. The +amount of delay can be calculated as t = ((d - x) / 330) * 1000 \, +where d is the distance in metres between listener and one particular +loudspeaker \, and t is the amount of delay in milliseconds. Apply +the delay to function function ls-delays to corresponding channel. +; +#X text 217 80 A. Adjust gain each speaker's channel same level sweet +spot using this file. You use a sound pressure meter or your ears. +; +#X text 265 287 based on an example by Ville Pulkki 1999-2006; +#X connect 0 0 1 0; +#X connect 1 0 4 0; +#X connect 2 0 1 1; +#X connect 2 0 3 0; diff --git a/examples/vbapmodule.pd b/examples/vbapmodule.pd new file mode 100644 index 0000000..01484a8 --- /dev/null +++ b/examples/vbapmodule.pd @@ -0,0 +1,22 @@ +#N canvas 94 380 450 300 10; +#X obj 30 44 inlet~; +#X obj 62 158 send matrix; +#X obj 46 183 throw~ \$1chan; +#X floatatom 180 186 5 0 0; +#X floatatom 225 186 5 0 0; +#X floatatom 270 186 5 0 0; +#X text 137 217 actual azi / ele / spread; +#X obj 82 44 inlet; +#X obj 122 44 inlet; +#X obj 162 44 inlet; +#X text 210 44 azi / ele / spread; +#X obj 46 112 vbapsnd \$1; +#X connect 0 0 11 0; +#X connect 7 0 11 1; +#X connect 8 0 11 2; +#X connect 9 0 11 3; +#X connect 11 0 2 0; +#X connect 11 1 1 0; +#X connect 11 2 3 0; +#X connect 11 3 4 0; +#X connect 11 4 5 0; diff --git a/graph-to-aziele.pd b/graph-to-aziele.pd deleted file mode 100644 index 0597f8a..0000000 --- a/graph-to-aziele.pd +++ /dev/null @@ -1,51 +0,0 @@ -#N canvas 549 17 647 652 12; -#X obj 42 505 expr acos($f1/$f3) * 180 / 3.1415 * $f2; -#X obj 323 366 expr sqrt($f1); -#X obj 323 338 + 0; -#X obj 78 313 * 0; -#X obj 343 276 * 0; -#X msg 460 505 0; -#X msg 233 265 -1; -#X msg 268 265 1; -#X obj 42 249 expr ($f1-0.5)/0.5; -#X obj 233 145 expr ($f1-0.5)/0.5; -#X obj 42 16 inlet; -#X obj 42 570 outlet; -#X obj 488 569 outlet; -#X obj 407 431 expr 90 - ($f1*90.0); -#X obj 460 479 moses 0; -#X obj 233 238 moses 0; -#X obj 42 279 t f f f; -#X obj 233 179 t f f f; -#X obj 42 99 unpack f f; -#X msg 42 67 \$2 \$1; -#X text 101 66 reverse order; -#X text 101 16 float x \, float y; -#X obj 323 393 t f f; -#X connect 0 0 11 0; -#X connect 1 0 22 0; -#X connect 2 0 1 0; -#X connect 3 0 2 0; -#X connect 4 0 2 1; -#X connect 5 0 12 0; -#X connect 6 0 0 1; -#X connect 7 0 0 1; -#X connect 8 0 16 0; -#X connect 9 0 17 0; -#X connect 10 0 19 0; -#X connect 13 0 14 0; -#X connect 14 0 5 0; -#X connect 14 1 12 0; -#X connect 15 0 6 0; -#X connect 15 1 7 0; -#X connect 16 0 0 0; -#X connect 16 1 3 0; -#X connect 16 2 3 1; -#X connect 17 0 15 0; -#X connect 17 1 4 0; -#X connect 17 2 4 1; -#X connect 18 0 8 0; -#X connect 18 1 9 0; -#X connect 19 0 18 0; -#X connect 22 0 0 2; -#X connect 22 1 13 0; diff --git a/high.pd b/high.pd deleted file mode 100644 index f6bbfba..0000000 --- a/high.pd +++ /dev/null @@ -1,27 +0,0 @@ -#N canvas 0 0 576 425 10; -#X obj 102 43 inlet; -#X obj 124 188 f 0; -#X obj 102 239 >; -#X obj 102 281 sel 1; -#X obj 201 158 f; -#X obj 203 354 outlet; -#X obj 203 267 f; -#X obj 292 42 inlet; -#X text 339 42 reset to float; -#X text 148 44 test against high; -#X obj 102 91 t b f b f; -#X obj 292 89 t b f; -#X connect 0 0 10 0; -#X connect 1 0 2 1; -#X connect 1 0 6 1; -#X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 4 0 1 0; -#X connect 6 0 5 0; -#X connect 7 0 11 0; -#X connect 10 0 6 0; -#X connect 10 1 2 0; -#X connect 10 2 1 0; -#X connect 10 3 4 1; -#X connect 11 0 6 0; -#X connect 11 1 1 0; diff --git a/playsample~.pd b/playsample~.pd deleted file mode 100644 index bf2b06e..0000000 --- a/playsample~.pd +++ /dev/null @@ -1,56 +0,0 @@ -#N canvas 27 300 849 403 10; -#X obj 38 354 table \$0music; -#X obj 148 160 soundfiler; -#X floatatom 148 183 5 0 0; -#X obj 243 207 phasor~ 1; -#X floatatom 266 181 8 0 0; -#X obj 243 237 *~ 0; -#X msg 148 137 read -resize \$1 \$2; -#X obj 199 83 symbol \$0music; -#X obj 148 110 pack s s; -#X obj 199 48 loadbang; -#X obj 12 13 inlet; -#X text 59 12 .aiff file name; -#X obj 311 15 inlet; -#X text 356 15 phasor speed; -#X obj 243 334 outlet~; -#X obj 243 267 tabread4~ \$0music; -#X obj 302 83 samplerate~; -#X floatatom 310 107 5 0 0; -#X obj 460 14 inlet; -#X text 505 14 gain; -#X obj 243 306 *~ 1; -#X obj 148 210 t b f; -#X obj 148 232 f; -#X obj 148 254 /; -#X obj 419 334 outlet~; -#X text 303 333 sample signal; -#X text 483 334 phasor signal; -#X msg 557 41 0; -#X obj 557 16 inlet; -#X text 601 16 restart; -#X connect 1 0 2 0; -#X connect 2 0 5 1; -#X connect 2 0 21 0; -#X connect 3 0 5 0; -#X connect 3 0 24 0; -#X connect 4 0 3 0; -#X connect 5 0 15 0; -#X connect 6 0 1 0; -#X connect 7 0 8 1; -#X connect 8 0 6 0; -#X connect 9 0 7 0; -#X connect 9 0 16 0; -#X connect 10 0 8 0; -#X connect 12 0 3 0; -#X connect 15 0 20 0; -#X connect 16 0 17 0; -#X connect 16 0 22 1; -#X connect 18 0 20 1; -#X connect 20 0 14 0; -#X connect 21 0 22 0; -#X connect 21 1 23 1; -#X connect 22 0 23 0; -#X connect 23 0 4 0; -#X connect 27 0 3 1; -#X connect 28 0 27 0; diff --git a/recent.pd b/recent.pd deleted file mode 100644 index add6c7d..0000000 --- a/recent.pd +++ /dev/null @@ -1,14 +0,0 @@ -#N canvas 399 148 452 302 12; -#X obj 56 55 inlet; -#X msg 91 123 clear; -#X obj 59 252 outlet; -#X obj 166 54 inlet; -#X text 8 5 output only most "recent" messages; -#X obj 56 89 t a b; -#X obj 59 202 pipe \$1; -#X connect 0 0 5 0; -#X connect 1 0 6 0; -#X connect 3 0 6 1; -#X connect 5 0 6 0; -#X connect 5 1 1 0; -#X connect 6 0 2 0; diff --git a/rvbap.c b/rvbap.c index 9b023c3..75604b9 100644 --- a/rvbap.c +++ b/rvbap.c @@ -7,7 +7,7 @@ Unversity of California at Berkeley and written by Olaf Matthes 2003, 2007 Pd port by Frank Barknecht -See copyright in file with name COPYRIGHT */ +See copyright in file with name LICENSE.txt */ #include diff --git a/vbap-demo.pd b/vbap-demo.pd deleted file mode 100644 index 27095db..0000000 --- a/vbap-demo.pd +++ /dev/null @@ -1,38 +0,0 @@ -#N canvas 11 22 871 352 10; -#X obj 50 80 playsample~; -#X obj 50 55 openpanel; -#X msg 50 31 bang; -#X text 96 30 click to load and play a sample; -#X floatatom 133 80 5 0 0 0 - - -; -#X floatatom 133 101 5 0 0 0 - - -; -#X text 182 80 pitch; -#X text 182 102 volume; -#X floatatom 76 142 5 0 0 0 - - -; -#X floatatom 122 142 5 0 0 0 - - -; -#X floatatom 168 142 5 0 0 0 - - -; -#X text 218 143 set azimuth \, elevation \, spread; -#N canvas 152 420 615 353 using 0; -#X obj 59 258 graph-to-aziele; -#X obj 59 233 pack f f; -#X floatatom 59 281 5 0 0 0 - - -; -#X obj 59 78 grid grid1 144 0 1 144 0 1 0 0.001 0.001 10 10 103 91 -; -#X floatatom 159 281 5 0 0 0 - - -; -#X text 21 17 To use Yves Degoyon's GRID (http://ydegoyon.free.fr) -use graph-to-aziele.pd to count the azimuth and elevation.; -#X text 25 49 (note: GRID must output values between 0 - 1); -#X connect 0 0 2 0; -#X connect 0 1 4 0; -#X connect 1 0 0 0; -#X connect 3 0 1 0; -#X connect 3 1 1 1; -#X restore 506 112 pd using GRID with vbap; -#X obj 50 174 vbapmodule 1; -#X connect 0 0 13 0; -#X connect 1 0 0 0; -#X connect 2 0 1 0; -#X connect 4 0 0 1; -#X connect 5 0 0 2; -#X connect 8 0 13 1; -#X connect 9 0 13 2; -#X connect 10 0 13 3; diff --git a/vbap-help.pd b/vbap-help.pd index deefca7..18aa9d5 100644 --- a/vbap-help.pd +++ b/vbap-help.pd @@ -124,7 +124,6 @@ front). This is a classic 5.1 setup.; #X text 257 199 (0-360); #X text 21 490 Vector Base Amplitude Panning; #X text 241 489 (C) 1998-2003 \, 2006 Ville Pulkki; -#X text 476 487 1.0.3 - 11 Mar 2006; #X connect 0 0 25 1; #X connect 1 0 25 2; #X connect 2 0 25 0; diff --git a/vbap-meta.pd b/vbap-meta.pd new file mode 100644 index 0000000..59b255b --- /dev/null +++ b/vbap-meta.pd @@ -0,0 +1,7 @@ +#N canvas 10 10 200 200 10; +#N canvas 20 20 420 300 META 0; +#X text 10 30 NAME vbap; +#X text 10 50 AUTHOR Ville Pulkki; +#X text 10 70 DESCRIPTION spatialization using Vector Based Amplitude Panning; +#X text 10 90 VERSION 1.0.3.1; +#X restore 10 10 pd META; diff --git a/vbap.c b/vbap.c index 7cf4a64..3bf09fd 100644 --- a/vbap.c +++ b/vbap.c @@ -1,11 +1,11 @@ -/* vbap.c vers 1.00b1 for ------ > xmax4.2 +/* vbap.c written by Ville Pulkki 1999-2003 Helsinki University of Technology and University of California at Berkeley -See copyright in file with name COPYRIGHT */ +See copyright in file with name LICENSE.txt */ // Indicate that we are within VBAP object (specific to include define_loudspeakers content within vbap) #define VBAP_OBJECT diff --git a/vbap.h b/vbap.h index 3da2157..dd588ac 100644 --- a/vbap.h +++ b/vbap.h @@ -14,8 +14,8 @@ #define MAX_LS_AMOUNT 55 // maximum amount of loudspeakers, can be increased #define MIN_VOL_P_SIDE_LGTH 0.01 -#define VBAP_VERSION "vbap - v1.0.3 - 12 Aug 2006 - (c) Ville Pulkki 1999-2006 (Pd port by HCS)" -#define DFLS_VERSION "define_loudspeakers - v1.0.3 - 12 Aug 2006 - (c) Ville Pulkki 1999-2006" +#define VBAP_VERSION "vbap - v1.0.3.1 - 20 Nov 2010 - (c) Ville Pulkki 1999-2006 (Pd port by HCS)" +#define DFLS_VERSION "define_loudspeakers - v1.0.3.1 - 20 Nov 2010 - (c) Ville Pulkki 1999-2006" static float rad2ang = 360.0 / ( 2.0f * M_PI ); static float atorad = (2.0f * M_PI) / 360.0f ; diff --git a/vbapmodule.pd b/vbapmodule.pd deleted file mode 100644 index 01484a8..0000000 --- a/vbapmodule.pd +++ /dev/null @@ -1,22 +0,0 @@ -#N canvas 94 380 450 300 10; -#X obj 30 44 inlet~; -#X obj 62 158 send matrix; -#X obj 46 183 throw~ \$1chan; -#X floatatom 180 186 5 0 0; -#X floatatom 225 186 5 0 0; -#X floatatom 270 186 5 0 0; -#X text 137 217 actual azi / ele / spread; -#X obj 82 44 inlet; -#X obj 122 44 inlet; -#X obj 162 44 inlet; -#X text 210 44 azi / ele / spread; -#X obj 46 112 vbapsnd \$1; -#X connect 0 0 11 0; -#X connect 7 0 11 1; -#X connect 8 0 11 2; -#X connect 9 0 11 3; -#X connect 11 0 2 0; -#X connect 11 1 1 0; -#X connect 11 2 3 0; -#X connect 11 3 4 0; -#X connect 11 4 5 0; -- cgit v1.2.1