Commit 18b3700d authored by IOhannes zmölnig's avatar IOhannes zmölnig

New upstream version 19

parent 083e99ba
Snd is a sound editor written by Bill Schottstaedt (bil@ccrma.stanford.edu).
Except where otherwise noted, it is Copyright 1996-2016 Bill Schottstaedt.
Except where otherwise noted, it is Copyright 1996-2006 The Board of Trustees
of Stanford University.
......
Snd change log
20-Nov: Snd 18.9.
8-Oct: Snd 18.8.
31-Aug: Snd 18.7.
1-Aug: Snd 18.6.
......
Snd 18.8:
Snd 18.9:
in clm, Kjetil improved the granulate generator.
Kjetil updated the s7webserver directory
in s7, byte? (for byte-* signatures)
typed (homogenous) vectors of any built-in type, and typed hash-tables
multidimensional byte-vectors (byte-vectors are vectors now)
c-object-type (split from c-object?)
s7_list_nl in s7.h: NULL terminated version of s7_list.
s7: variables can be statically typed via the built-in type checkers like integer?
for example, (set! (setter 'x) integer?)
checked: sbcl 1.4.12
audio.c: added JACK_AUTO_SRC (defaults to 1).
Thanks!: Kjetil Matheussen
checked: FC 29 (gcc 8.2.1), macOS Mojave, sbcl 1.4.13
Thanks!: Kjetil Matheussen
\ No newline at end of file
......@@ -4405,7 +4405,6 @@ static void *jack_mus_audio_watchdog(void *arg){
}
static void jack_mus_audio_set_realtime(void){
#if HAVE_JACK_IN_LINUX
struct sched_param par;
......@@ -4442,6 +4441,10 @@ static void jack_mus_audio_set_non_realtime(void){
#endif
}
#ifndef JACK_AUTO_SRC
#define JACK_AUTO_SRC 1
#endif
int jack_mus_audio_open_output(int dev, int srate, int chans, mus_sample_t samp_type, int size){
if (sndjack_client==NULL){
if (jack_mus_audio_initialize()==MUS_ERROR)
......@@ -4464,7 +4467,7 @@ int jack_mus_audio_open_output(int dev, int srate, int chans, mus_sample_t samp_
sj_writeplace=0;
sj_readplace=0;
#if JACK_AUTO_SRC
if (srate!=(int)jack_get_sample_rate(sndjack_client)){
int lokke;
//printf("Warning, sample-rate differs between snd and jack. Sound will not be played correctly! %d/%d\n",srate,jack_get_sample_rate(sndjack_client));
......@@ -4475,6 +4478,9 @@ int jack_mus_audio_open_output(int dev, int srate, int chans, mus_sample_t samp_
}else{
sndjack_srcratio=1.0;
}
#else
sndjack_srcratio=1.0;
#endif
sndjack_format=samp_type;
sndjack_num_channels_inuse=chans;
......
......@@ -6552,14 +6552,14 @@ typedef struct {
/* rand taken from the ANSI C standard (essentially the same as the Cmix form used earlier) */
static unsigned long randx = 1;
static uint64_t randx = 1;
#define INVERSE_MAX_RAND 0.0000610351563
#define INVERSE_MAX_RAND2 0.000030517579
void mus_set_rand_seed(unsigned long val) {randx = val;}
void mus_set_rand_seed(uint64_t val) {randx = val;}
unsigned long mus_rand_seed(void) {return(randx);}
uint64_t mus_rand_seed(void) {return(randx);}
static mus_float_t next_random(void)
......@@ -13706,7 +13706,7 @@ typedef struct {
mus_float_t *grain; /* grain data */
int grain_len;
bool first_samp;
unsigned long randx; /* gen-local random number seed */
uint64_t randx; /* gen-local random number seed */
} grn_info;
......@@ -13837,7 +13837,7 @@ static mus_float_t *granulate_data(mus_any *ptr) {return(((grn_info *)ptr)->grai
int mus_granulate_grain_max_length(mus_any *ptr) {return(((grn_info *)ptr)->in_data_len);}
static mus_long_t grn_location(mus_any *ptr) {return((mus_long_t)(((grn_info *)ptr)->randx));}
static mus_long_t grn_set_location(mus_any *ptr, mus_long_t val) {((grn_info *)ptr)->randx = (unsigned long)val; return(val);}
static mus_long_t grn_set_location(mus_any *ptr, mus_long_t val) {((grn_info *)ptr)->randx = (uint64_t)val; return(val);}
static mus_float_t grn_jitter(mus_any *ptr) {return(((grn_info *)ptr)->jitter);}
static mus_float_t grn_set_jitter(mus_any *ptr, mus_float_t val) /* K Matheussen 15-Jul-18 */
......
......@@ -2,8 +2,8 @@
#define CLM_H
#define MUS_VERSION 6
#define MUS_REVISION 18
#define MUS_DATE "22-Sep-17"
#define MUS_REVISION 19
#define MUS_DATE "17-Nov-18"
/* isn't mus_env_interp backwards? */
......@@ -326,8 +326,8 @@ MUS_EXPORT mus_any *mus_make_pulse_train(mus_float_t freq, mus_float_t amp, mus_
MUS_EXPORT bool mus_is_pulse_train(mus_any *gen);
MUS_EXPORT mus_float_t mus_pulse_train_unmodulated(mus_any *ptr);
MUS_EXPORT void mus_set_rand_seed(unsigned long seed);
MUS_EXPORT unsigned long mus_rand_seed(void);
MUS_EXPORT void mus_set_rand_seed(uint64_t seed);
MUS_EXPORT uint64_t mus_rand_seed(void);
MUS_EXPORT mus_float_t mus_random(mus_float_t amp);
MUS_EXPORT mus_float_t mus_frandom(mus_float_t amp);
MUS_EXPORT int mus_irandom(int amp);
......@@ -616,7 +616,8 @@ MUS_EXPORT mus_any *mus_bank_generator(mus_any *g, int i);
/* Change log.
*
* 15-Jul: granulate method to set jitter (K Matheussen).
* 17-Nov: changed rand seed unsigned long to uint64_t.
* 15-Jul-18: granulate method to set jitter (K Matheussen).
* --------
* 22-Sep: removed clm_default_frequency.
* 3-Aug: mus_long_t is now int64_t.
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for snd 18.8.
# Generated by GNU Autoconf 2.69 for snd 19.0.
#
# Report bugs to <bil@ccrma.stanford.edu>.
#
......@@ -579,9 +579,9 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='snd'
PACKAGE_TARNAME='ftp://ccrma-ftp.stanford.edu/pub/Lisp/snd-18.tar.gz'
PACKAGE_VERSION='18.8'
PACKAGE_STRING='snd 18.8'
PACKAGE_TARNAME='ftp://ccrma-ftp.stanford.edu/pub/Lisp/snd-19.tar.gz'
PACKAGE_VERSION='19.0'
PACKAGE_STRING='snd 19.0'
PACKAGE_BUGREPORT='bil@ccrma.stanford.edu'
PACKAGE_URL=''
......@@ -1324,7 +1324,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures snd 18.8 to adapt to many kinds of systems.
\`configure' configures snd 19.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
......@@ -1374,7 +1374,7 @@ Fine tuning of the installation directories:
--localedir=DIR locale-dependent data [DATAROOTDIR/locale]
--mandir=DIR man documentation [DATAROOTDIR/man]
--docdir=DIR documentation root
[DATAROOTDIR/doc/ftp://ccrma-ftp.stanford.edu/pub/Lisp/snd-18.tar.gz]
[DATAROOTDIR/doc/ftp://ccrma-ftp.stanford.edu/pub/Lisp/snd-19.tar.gz]
--htmldir=DIR html documentation [DOCDIR]
--dvidir=DIR dvi documentation [DOCDIR]
--pdfdir=DIR pdf documentation [DOCDIR]
......@@ -1395,7 +1395,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of snd 18.8:";;
short | recursive ) echo "Configuration of snd 19.0:";;
esac
cat <<\_ACEOF
......@@ -1514,7 +1514,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
snd configure 18.8
snd configure 19.0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
......@@ -1975,7 +1975,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by snd $as_me 18.8, which was
It was created by snd $as_me 19.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
......@@ -3322,7 +3322,7 @@ LOCAL_LANGUAGE="None"
GRAPHICS_TOOLKIT="None"
PACKAGE=Snd
VERSION=18.8
VERSION=19.0
#--------------------------------------------------------------------------------
# configuration options
......@@ -6888,7 +6888,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by snd $as_me 18.8, which was
This file was extended by snd $as_me 19.0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
......@@ -6950,7 +6950,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
snd config.status 18.8
snd config.status 19.0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
......
......@@ -5,7 +5,7 @@
# gmp, mpfr, and mpc deliberately have none!
AC_INIT(snd, 18.8, bil@ccrma.stanford.edu, ftp://ccrma-ftp.stanford.edu/pub/Lisp/snd-18.tar.gz)
AC_INIT(snd, 19.0, bil@ccrma.stanford.edu, ftp://ccrma-ftp.stanford.edu/pub/Lisp/snd-19.tar.gz)
AC_CONFIG_SRCDIR(snd.c)
AC_CANONICAL_HOST # needed by case $host below
......@@ -24,7 +24,7 @@ LOCAL_LANGUAGE="None"
GRAPHICS_TOOLKIT="None"
PACKAGE=Snd
VERSION=18.8
VERSION=19.0
#--------------------------------------------------------------------------------
# configuration options
......
......@@ -40,7 +40,7 @@
(gtk_window_set_default_size (GTK_WINDOW window) 170 40)
(let ((label (gtk_label_new text)))
(gtk_container_add (GTK_CONTAINER window) label)
(g_timeout_add 1000 update-temps label)
(g_timeout_add 60000 update-temps label) ; once a minute?
(gtk_widget_show label)
(gtk_widget_show window)))))
......
This diff is collapsed.
......@@ -339,7 +339,7 @@ squeezing in the frequency domain, then using the inverse DFT to get the time do
(data1 (make-float-vector (+ len 1))))
(copy data data1 1)
(float-vector-abs! (float-vector-multiply! data1 data))
(float-vector-multiply! data (subvector data1 (list len) 1))
(float-vector-multiply! data (subvector data1 len 1))
(let ((amp1 (/ amp (float-vector-peak data))))
(float-vector->channel (float-vector-scale! data amp1) 0 len snd chn current-edit-position "spike")))))))
......
(define* (linear-expr-1D data (generations 100))
(let ((size 100)
(range 1.0)
(data-size (length data)))
(let ((population (make-vector size)))
(define (initial-generation)
(do ((i 0 (+ i 1)))
((= i size))
(set! (population i) (vector (- (random range) (/ range 2)) (- (random range) (/ range 2))))))
(define (distance coeff offset)
(let ((dist 0.0))
(do ((k 0 (+ k 1)))
((= k data-size) dist)
(let ((err (- (data k) (+ (* coeff k) offset))))
(set! dist (+ dist (* err err)))))))
(define (next-generation)
(let ((distances (make-vector size 0.0)))
(do ((i 0 (+ i 1)))
((= i size))
(set! (distances i) (cons (distance ((population i) 0) ((population i) 1)) i)))
(sort! distances (lambda (a b) (< (car a) (car b))))
(do ((i (/ size 2) (+ i 1))
(j 0 (+ j 1)))
((= i size))
(let* ((loc (cdr (distances j))) ; location (in population) of a good one
(coeff ((population loc) 0)) ; its coeff
(offset ((population loc) 1)) ; and offset
(new-loc (cdr (distances i)))) ; location of the bad one
;(format #t "~D: replace ~A using ~A~%" j (distances i) (distances j))
(set! (population new-loc) (vector (+ coeff (- (random range) (/ range 2)))
(+ offset (- (random range) (/ range 2)))))))
(distances 0)))
(initial-generation)
(let ((last-dist size)
(best #f))
(call-with-exit
(lambda (done)
(do ((i 0 (+ i 1)))
((= i generations))
(set! best (next-generation))
;(format #t "~D: ~A ~A ~A~%" i range (car best) (population (cdr best)))
(if (< (car best) 1e-9)
(done))
(let* ((new-dist (car best))
(improvement (abs (- new-dist last-dist))))
(if (< improvement range)
(set! range (max 0.001 (* range 0.5)))
(if (> improvement range)
(set! range (min 1024.0 (* 2 range)))))
(set! last-dist new-dist)))))
(let ((simpler-coeff (rationalize ((population (cdr best)) 0) .1))
(simpler-offset (rationalize ((population (cdr best)) 1) .1)))
(let ((dist (distance simpler-coeff simpler-offset)))
(if (< dist (* 2 (car best)))
(format #f "~A * k + ~A, err: ~A~%" simpler-coeff simpler-offset dist)
(format #f "~A * k + ~A, err: ~A~%" ((population (cdr best)) 0) ((population (cdr best)) 1) (car best)))))))))
#|
(linear-expr-1D (let ((v (make-vector 100)))
(do ((i 0 (+ i 1)))
((= i 100))
(set! (v i) (+ 1 (* i 2))) )
v))
"2 * k + 1, err: 0.0"
(linear-expr-1D (let ((v (make-vector 100)))
(do ((i 0 (+ i 1)))
((= i 100))
(set! (v i) (+ 1 (- (random .01) .005) (* i 2))))
v))
"2 * k + 1, err: 0.00079150685524436"
;; so noise is not a problem
|#
(define *show-progress* #f)
(define* (poly-expr data (generations 100) (top-power 10) (xscale 1.0))
(let ((size 100)
(range 1.0)
(data-size (length data)))
(let ((population (make-vector size)))
(define (new-coeffs good-coeffs bad-coeffs power)
(let* ((len (length good-coeffs))
(coeffs (make-vector len 0.0)))
(do ((k 0 (+ k 1)))
((> k power) coeffs)
(let ((local-diff (/ (- (good-coeffs k) (bad-coeffs k)) 2.0)))
(set! (coeffs k) (+ (good-coeffs k) local-diff (- (random range) (/ range 2))))))))
(define (initial-generation power)
(let ((len (+ 1 power)))
(do ((i 0 (+ i 1)))
((= i size))
(set! (population i) (new-coeffs (make-vector len 0.0) (make-vector len 0.0) power)))))
(define (poly coeffs x power)
;; 0 => offset, 1 => x, 2 => x^2 etc
(if (= power 1)
(+ (coeffs 0) (* (coeffs 1) x))
(let ((sum (coeffs power)))
(do ((k (- power 1) (- k 1)))
((< k 0) sum)
(set! sum (+ (coeffs k) (* x sum)))))))
(define (distance coeffs power)
(let ((dist 0.0))
(do ((k 0 (+ k 1)))
((= k data-size) dist)
(let ((err (- (data k) (poly coeffs (* xscale k) power))))
(set! dist (+ dist (* err err)))))))
(define (iterate-distance coeffs power)
;; distance if using iterated function, rather than just polynomial
(call-with-exit
(lambda (return)
(let* ((dist 0.0)
(y 0.0))
(do ((k 0 (+ k 1)))
((= k data-size) dist)
(let ((err (modulo (- (data k) y) 2.0)))
(if (nan? err) ; modulo returns NaN if either arg is inf
(return 1.0e50))
(if (> err 1.0)
(set! err (- 2.0 err)))
(set! dist (+ dist (* err err)))
(set! y (poly coeffs y power))))))))
(define (display-expr coeffs power)
(do ((k power (- k 1)))
((= k 1))
(format #t "~,3g k^~D + " (coeffs k) k))
(format #t "~,3g k + ~,3g" (coeffs 1) (coeffs 0)))
(define (next-generation power)
(let ((distances (make-vector size 0.0)))
(do ((i 0 (+ i 1)))
((= i size))
(set! (distances i) (cons (distance (population i) power) i)))
(sort! distances (lambda (a b) (< (car a) (car b))))
(do ((i (/ size 2) (+ i 1))
(j 0 (+ j 1)))
((= i size))
(let* ((good-loc (cdr (distances j))) ; location (in population) of a good one
(good-coeffs (population good-loc)) ; its coeffs
(bad-loc (cdr (distances i))) ; location of the bad one
(bad-coeffs (population bad-loc))) ; its coeffs
(set! (population bad-loc) (new-coeffs good-coeffs bad-coeffs power))))
(distances 0)))
(do ((power 1 (+ power 1)))
((> power top-power))
(initial-generation power)
(let ((last-dist size)
(best #f))
(call-with-exit
(lambda (done)
(do ((i 0 (+ i 1)))
((= i generations))
(let ((new-best (next-generation power)))
(if (and *show-progress*
best
(< (car new-best) (car best)))
(begin
(format #t " ")
(display-expr (population (cdr new-best)) power)
(format #t ", err: ~,3g~%" (car new-best))))
(set! best new-best))
(if (< (car best) 1e-9)
(done))
(let* ((new-dist (car best))
(improvement (abs (- new-dist last-dist))))
(if (< improvement range)
(set! range (max 0.001 (* range 0.5)))
(if (> improvement range)
(set! range (min 1024.0 (* 2 range)))))
(set! last-dist new-dist)))))
(let ((simpler-coeffs (apply vector (map (lambda (x) (rationalize x .1)) (population (cdr best))))))
(let ((dist (distance simpler-coeffs power)))
(if (< dist (* 2 (car best)))
(begin
(display-expr simpler-coeffs power)
(format #t ", err: ~,3g~%~%" dist))
(begin
(display-expr (population (cdr best)) power)
(format #t ", err: ~,3g~%~%" (car best)))))))))))
#|
:(poly-expr (let ((v (make-vector 100)))
(do ((i 0 (+ i 1)))
((= i 100))
(set! (v i) (+ 1.5 (* i 2))))
v)
100 2)
()
2 * k + 3/2, err: 0.0
0 * k^2 + 2 * k + 3/2, err: 0.0
:(poly-expr (let ((v (make-vector 100)))
(do ((i 0 (+ i 1)))
((= i 100))
(set! (v i) (+ 1.5 (* i 2) (* i i))))
v)
100 2)
()
101 * k + -3231/2, err: 55527780.0
1 * k^2 + 2 * k + 3/2, err: 0.0
(poly-expr (let ((v (make-vector 100)))
(do ((i 0 (+ i 1)))
((= i 100))
(set! (v i) (+ 10 (* i 3) (* i i) (* 2 i i i))))
v)
500 3)
71211/4 * k + -775493/2, err: 5073746188744.4
298 * k^2 + -46797/4 * k + 282358/3, err: 142657213706.32
1.9999646468097 * k^3 + 1.0060760943148 * k^2 + 2.7343239562578 * k + 10.395190849075, err: 341.7343511583
(poly-expr (let ((v (make-vector 100)))
(do ((i 0 (+ i 1)))
((= i 100))
(set! (v i) (+ 10 (* i 3) (* i i) (* .02 i i i))))
v)
500 3)
279 * k + -16405/3, err: 889433525.53111
4 * k^2 + -114 * k + 4756/5, err: 16055636.02
0.01993019520734 * k^3 + 1.0122316382516 * k^2 + 2.423061574187 * k + 16.287894409628, err: 451.01103769494
if scaled by .01:
(poly-expr (let ((v (make-vector 100)))
(do ((i 0 (+ i 1)))
((= i 100))
(set! (v i) (+ 1.0 (* i 32 .01) (* i i 3 .01 .01) (* 1 i i i .01 .01 .01))))
v)
500 3 .01)
179/5 k + 1/3, err: 11.3
4.48 k^2 + 31.4 k + 1.05, err: 0.0357
1 k^3 + 3 k^2 + 32 k + 1, err: 4.76e-28
|#
Freeverb - Free, studio-quality reverb SOURCE CODE in the public domain
-----------------------------------------------------------------------
Written by Jezar at Dreampoint - http://www.dreampoint.co.uk
Introduction
------------
Hello.
I'll try to keep this "readme" reasonably small. There are few things in the world that I hate more than long "readme" files. Except "coding conventions" - but more on that later...
In this zip file you will find two folders of C++ source code:
"Components" - Contains files that should clean-compile ON ANY TYPE OF COMPUTER OR SYSTEM WHATSOEVER. It should not be necessary to make ANY changes to these files to get them to compile, except to make up for inadequacies of certain compilers. These files create three classes - a comb filter, an allpass filter, and a reverb model made up of a number of instances of the filters, with some features to control the filters at a macro level. You will need to link these classes into another program that interfaces with them. The files in the components drawer are completely independant, and can be built without dependancies on anything else. Because of the simple interface, it should be possible to interface these files to any system - VST, DirectX, anything - without changing them AT ALL.
"FreeverbVST" - Contains a Steinberg VST implementation of this version of Freeverb, using the components in (surprise) the components folder. It was built on a PC but may compile properly for the Macintosh with no problems. I don't know - I don't have a Macintosh. If you've figured out how to compile the examples in the Steinberg VST Development Kit, then you should easilly figure out how to bring the files into a project and get it working in a few minutes. It should be very simple.
Note that this version of Freeverb doesn't contain predelay, or any EQ. I thought that might make it difficult to understand the "reverb" part of the code. Once you figure out how Freeverb works, you should find it trivial to add such features with little CPU overhead.
Also, the code in this version of Freeverb has been optimised. This has changed the sound *slightly*, but not significantly compared to how much processing power it saves.
Finally, note that there is also a built copy of this version of Freeverb called "Freeverb3.dll" - this is a VST plugin for the PC. If you want a version for the Mac or anything else, then you'll need to build it yourself from the code.
Technical Explanation
---------------------
Freeverb is a simple implementation of the standard Schroeder/Moorer reverb model. I guess the only reason why it sounds better than other reverbs, is simply because I spent a long while doing listening tests in order to create the values found in "tuning.h". It uses 8 comb filters on both the left and right channels), and you might possibly be able to get away with less if CPU power is a serious constraint for you. It then feeds the result of the reverb through 4 allpass filters on both the left and right channels. These "smooth" the sound. Adding more than four allpasses doesn't seem to add anything significant to the sound, and if you use less, the sound gets a bit "grainy". The filters on the right channel are slightly detuned compared to the left channel in order to create a stereo effect.
Hopefully, you should find the code in the components drawer a model of brevity and clarity. Notice that I don't use any "coding conventions". Personally, I think that coding conventions suck. They are meant to make the code "clearer", but they inevitably do the complete opposite, making the code completely unfathomable. Anyone whose done Windows programming with its - frankly stupid - "Hungarian notation" will know exactly what I mean. Coding conventions typically promote issues that are irrelevant up to the status of appearing supremely important. It may have helped back people in the days when compilers where somewhat feeble in their type-safety, but not in the new millenium with advanced C++ compilers.
Imagine if we rewrote the English language to conform to coding conventions. After all, The arguments should be just as valid for the English language as they are for a computer language. For example, we could put a lower-case "n" in front of every noun, a lower-case "p" in front of a persons name, a lower-case "v" in front of every verb, and a lower-case "a" in front of every adjective. Can you imagine what the English language would look like? All in the name of "clarity". It's just as stupid to do this for computer code as it would be to do it for the English language. I hope that the code for Freeverb in the components drawer demonstrates this, and helps start a movement back towards sanity in coding practices.
Background
----------
Why is the Freeverb code now public domain? Simple. I only intended to create Freeverb to provide me and my friends with studio-quality reverb for free. I never intended to make any money out of it. However, I simply do not have the time to develop it any further. I'm working on a "concept album" at the moment, and I'll never finish it if I spend any more time programming.
In any case, I make more far money as a contract programmer - making Mobile Internet products - than I ever could writing plugins, so it simply doesn't make financial sense for me to spend any more time on it.
Rather than give Freeverb to any particular individual or organisation to profit from it, I've decided to give it away to the internet community at large, so that quality, FREE (or at the very least, low-cost) reverbs can be developed for all platforms.
Feel free to use the source code for Freeverb in any of your own products, whether they are also available for free, or even if they are commercial - I really don't mind. You may do with the code whatever you wish. If you use it in a product (whether commercial or not), it would be very nice of you, if you were to send me a copy of your product - although I appreciate that this isn't always possible in all circumstances.
HOWEVER, please don't bug me with questions about how to use this code. I gave away Freeverb because I don't have time to maintain it. That means I *certainly* don't have time to answer questions about the source code, so please don't email questions to me. I *will* ignore them. If you can't figure the code for Freeverb out - then find somebody who can. I hope that either way, you enjoy experimenting with it.
Disclaimer
----------
This software and source code is given away for free, without any warranties of any kind. It has been given away to the internet community as a free gift, so please treat it in the same spirit.
I hope this code is useful and interesting to you all!
I hope you have lots of fun experimenting with it and make good products!
Very best regards,
Jezar.
Technology Consultant
Dreampoint Design and Engineering
http://www.dreampoint.co.uk
//ends
(define-envelope pna '(0 0 1 1 10 .6000 25 .3000 100 0 ))
(define-envelope ind2 '(0 1 25 .4000 75 .6000 100 0 ))
(define-envelope high_att_ind '(0 1 25 .2000 75 .4000 100 0 ))
(define-envelope no_att_ind '(0 .6000 75 .6000 100 0 ))
(define-envelope no_dec_ind '(0 1 25 .4000 75 .6000 100 .6000 ))
(define-envelope no_att_or_dec_ind '(0 .6000 100 .6000 ))
(define-envelope ampf '(0 0 25 1 60 .7000 75 1 100 0 ))
(define-envelope rampf '(0 0 100 1 ))
(define-envelope fast_up '(0 0 25 1 100 1 ))
(define-envelope slow_up '(0 0 25 0 100 1 ))
(define-envelope tapf '(0 0 1 1 99 1 100 0 ))
(define-envelope skwfrq '(0 -1 5 .2500 10 0 100 .1000 ))
(define-envelope oldpizzf '(0 0 1 1 5 .6000 10 .3000 25 .1000 100 0 ))
(define-envelope newpizzf '(0 0 1 1 5 .6000 10 .3000 25 .1000 99 .0200 100 0 ))
(define-envelope pizzf '(0 0 1 1 5 .6000 10 .3000 25 .1000 100 0 ))
(define-envelope legatof '(0 0 30 1 90 1 100 0 ))
(define-envelope marcatof '(0 0 3 1 10 .8000 95 1 100 0 ))
(define-envelope onef '(0 1 100 1 ))
(define-envelope mod_up '(0 0 25 0 75 1 100 1 ))
(define-envelope mod_down '(0 1 25 1 75 0 100 0 ))
(define-envelope one_to_zero '(0 1 75 1 100 0 ))
(define-envelope zero_to_one '(0 0 75 0 100 1 ))
(define-envelope down_flat '(0 1 25 0 75 .0500 100 0 ))
(define-envelope down_down '(0 1 25 0 75 .0500 100 -1 ))
(define-envelope down_up '(0 1 25 0 75 .0500 100 1 ))
(define-envelope flat_down '(0 -.1000 10 .1000 25 0 75 .0500 100 -1 ))
(define-envelope flat_up '(0 -.1000 10 .1000 25 0 75 0 100 1 ))
(define-envelope up_flat '(0 -1 25 .0500 75 0 100 0 ))
(define-envelope up_up '(0 -1 25 .0500 75 0 100 1 ))
(define-envelope up_down '(0 -1 25 .0500 75 0 100 -1 ))
(define-envelope swellf '(0 0 25 .8000 50 1 75 .8000 100 0 ))
(define-envelope fpf '(0 0 25 1 50 .3000 75 .3000 100 0 ))
(define-envelope indswell '(1 1 25 .4000 75 1 100 0 ))
(define-envelope pyr '(0 1 25 .1000 95 .1000 100 0 ))
(define-envelope fbell '(0 1 2 1.1000 25 .7500 75 .5000 100 .2000 ))
(define-envelope lowbell '(0 1 5 1.2500 25 .8000 75 .5000 100 .2000 ))
(define-envelope abell '(0 0 .1000 1 10 .6000 25 .3000 50 .1500 90 .1000 100 0 ))
(define-envelope dwnup '(0 1 10 .4000 20 1 35 .3000 45 .8000 60 .2000 80 .6000 100 0 ))
(define-envelope up50down '(0 0 50 1 100 0 ))
(define-envelope metalamp '(0 0 .5000 1 5 1 10 .5000 15 .2500 35 .1000 100 0 ))
(define-envelope slowupfastdown '(0 0 25 1 97 1 100 0 ))
(define-envelope slowup '(0 0 50 .1000 95 1 100 0 ))
(define-envelope indtoone '(0 1 25 .4000 100 .6500 ))
(define-envelope whoosh '(0 0 75 .1000 90 .3000 97 .6000 100 1 ))
(define-envelope mamp '(0 0 50 1 100 0 ))
(define-envelope n_amp '(0 0 65 1 100 0 ))
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#! /bin/sh
# mkinstalldirs --- make directory hierarchy
scriptversion=2009-04-28.21; # UTC
# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
# Public domain.
#
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
nl='
'
IFS=" "" $nl"
errstatus=0
dirmode=
usage="\
Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
Create each directory DIR (with mode MODE, if specified), including all
leading file name components.
Report bugs to <bug-automake@gnu.org>."
# process command line arguments
while test $# -gt 0 ; do
case $1 in
-h | --help | --h*) # -h for help
echo "$usage"
exit $?
;;
-m) # -m PERM arg
shift
test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
dirmode=$1
shift
;;
--version)
echo "$0 $scriptversion"
exit $?
;;
--) # stop option processing
shift
break
;;
-*) # unknown option
echo "$usage" 1>&2