Imported Upstream version 1.2

parents
This diff is collapsed.
This diff is collapsed.
freeverb~ version 1.2
reverb external for Pure Data and Max/MSP
written by Olaf Matthes <olaf.matthes@gmx.de>
based on Freeverb, the free, studio-quality reverb SOURCE CODE in the public
domain, Written by Jezar at Dreampoint - http://www.dreampoint.co.uk
This software is published under GPL terms, see file LICENSE.
This is software with ABSOLUTELY NO WARRANTY.
Use it at your OWN RISK. It's possible to damage e.g. hardware or your hearing
due to a bug or for other reasons.
Recent changes:
- added check for NANs
- added a hand unrolled version of the perform routine for DSP vector sizes that
are a multiple of 8. This should speed up things a bit
Below some notes taken from Freeverb readme:
-------------------------------------------------------------------------------------
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.
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.
#N canvas 556 82 596 570 10;
#X msg -77 536 pddp;
#X obj -173 4 cnv 15 90 553 empty empty empty 20 12 0 14 -233017 -66577
0;
#N canvas 316 127 613 636 More_Info 0;
#X obj 451 407 metro 580;
#X obj 479 429 delay 120;
#X msg 479 450 0;
#X obj 405 471 noise~;
#X obj 435 494 *~;
#X msg 450 450 1;
#X msg 361 450 0;
#X obj 317 494 *~;
#X msg 332 450 1;
#X obj 333 407 metro 700;
#X obj 361 429 delay 200;
#X obj 273 471 osc~ 400;
#X obj 26 536 freeverb~;
#X obj 43 562 dac~;
#X obj 385 364 tgl 30 0 empty empty start 1 15 1 12 -90049 -1 -1 0
1;
#X obj 187 480 readsf~ 2;
#X msg 177 413 open \$1;
#X obj 177 394 openpanel;
#X msg 269 363 \; pd dsp 1;
#X obj 177 361 bng 30 250 50 0 empty empty open 1 15 1 12 -4080 -1
-228;
#X obj 177 432 t b a;
#X msg 164 456 1;
#X msg 25 42 roomsize \$1;
#X msg 25 87 damping \$1;
#X msg 25 131 width \$1;
#X msg 25 175 wet \$1;
#X msg 25 219 dry \$1;
#X msg 59 242 print;
#X msg 78 281 freeze \$1;
#X msg 83 318 bypass \$1;
#X obj 83 299 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X obj 78 262 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1
;
#X text 154 274 - start and stop "freeze" mode (off by default). If
on \, reverb tail gets freezed (sample and hold).;
#X obj 37 196 hsl 60 18 0 1 0 1 empty empty dry 2 9 1 12 -225271 -1
-1 0 0;
#X obj 37 152 hsl 60 18 0 1 0 1 empty empty wet 2 9 1 12 -225271 -1
-1 1770 0;
#X obj 37 108 hsl 60 18 0 1 0 1 empty empty width 2 9 1 12 -262131
-1 -1 5900 0;
#X obj 37 64 hsl 60 18 0 2 0 1 empty empty damping 2 9 1 12 -261689
-1 -1 1475 0;
#X obj 37 19 hsl 60 18 0.11 1.1 0 1 empty empty roomsize 2 9 1 12 -261689
-1 -1 4410 0;
#X text 117 18 - size of the room to be simulated. Larger values result
in longer reverb. Values above 1 will result in feedback or 'room resonance'
(i.e. reverb getting louder);
#X floatatom 7 23 3 0 0 0 - - -;
#X text 116 110 - stereo width of the reverb \, i.e. how much of the
reverb part from the left and right channel mix. Turning this to 1
(nearly gives two separate mono reverbs.;
#X text 115 152 - level of the wet (reverbed) signal \, between 0 and
1;
#X text 113 197 - level of the dry (i.e. unprocessed or original) signal
\, between 0 and 1 Note that wet and dry signals mix and thus can cause
clipping if both are set at high levels.;
#X text 115 242 - print the current values of these parameters.;
#X text 157 305 - bypass reverb processing when set to 1 Can be used
to compare reverbed signal with original signal \, and to save CPU
when reverb is not needed.;
#X floatatom 7 68 3 0 0 0 - - -;
#X floatatom 7 113 3 0 0 0 - - -;
#X floatatom 7 156 3 0 0 0 - - -;
#X floatatom 7 200 3 0 0 0 - - -;
#X text 114 65 - amount of damping of the room's surfaces. <=1 means
nearly no damping \, resulting in a lot of reflection (long reverb)
\, >1 means high damping of signals (short reverb).;
#X connect 0 0 1 0;
#X connect 0 0 5 0;
#X connect 1 0 2 0;
#X connect 2 0 4 1;
#X connect 3 0 4 0;
#X connect 4 0 12 1;
#X connect 5 0 4 1;
#X connect 6 0 7 1;
#X connect 7 0 12 0;
#X connect 8 0 7 1;
#X connect 9 0 8 0;
#X connect 9 0 10 0;
#X connect 10 0 6 0;
#X connect 11 0 7 0;
#X connect 12 0 13 0;
#X connect 12 1 13 1;
#X connect 14 0 9 0;
#X connect 14 0 0 0;
#X connect 15 0 12 0;
#X connect 15 1 12 1;
#X connect 16 0 20 0;
#X connect 17 0 16 0;
#X connect 19 0 17 0;
#X connect 20 0 21 0;
#X connect 20 1 15 0;
#X connect 21 0 15 0;
#X connect 22 0 12 0;
#X connect 23 0 12 0;
#X connect 24 0 12 0;
#X connect 25 0 12 0;
#X connect 26 0 12 0;
#X connect 27 0 12 0;
#X connect 28 0 12 0;
#X connect 29 0 12 0;
#X connect 30 0 29 0;
#X connect 31 0 28 0;
#X connect 33 0 26 0;
#X connect 33 0 48 0;
#X connect 34 0 25 0;
#X connect 34 0 47 0;
#X connect 35 0 24 0;
#X connect 35 0 46 0;
#X connect 36 0 23 0;
#X connect 36 0 45 0;
#X connect 37 0 22 0;
#X connect 37 0 39 0;
#X restore -77 510 pd More_Info;
#N canvas 85 22 403 252 Related_Objects 0;
#X restore -77 484 pd Related_Objects;
#X text -165 37 ARGUMENTS:;
#X text -149 266 OUTLETS:;
#X text -158 301 EXAMPLES:;
#X text -161 483 SEE ALSO:;
#X obj -162 12 freeverb~;
#X text -142 219 INLETS:;
#X text -73 12 stereo reverb using the Schroeder/Moorer model;
#X text -75 245 Right: audio input for the right channel.;
#X text -75 219 Left: audio input for the left channel and message
input for settings messages.;
#X text -75 266 Signal: the two outlets are the left and right channels
of a stereo output pair.;
#X obj 301 346 metro 580;
#X obj 329 368 delay 120;
#X msg 329 389 0;
#X obj 255 410 noise~;
#X obj 285 433 *~;
#X msg 300 389 1;
#X msg 211 389 0;
#X obj 167 433 *~;
#X msg 182 389 1;
#X obj 183 346 metro 700;
#X obj 211 368 delay 200;
#X obj 123 410 osc~ 400;
#X obj 167 461 freeverb~;
#X obj 184 487 dac~;
#X obj 235 303 tgl 30 0 empty empty start 1 15 1 12 -90049 -1 -1 0
1;
#X obj -1 432 readsf~ 2;
#X msg -11 365 open \$1;
#X obj -11 346 openpanel;
#X obj -11 303 bng 30 250 50 0 empty empty open 1 15 1 12 -4080 -1
-228;
#X obj -11 384 t b a;
#X msg -24 408 1;
#X msg -74 40 roomsize \$1;
#X msg -74 62 damping \$1;
#X msg -74 84 width \$1;
#X msg -74 106 wet \$1;
#X msg -74 128 dry \$1;
#X msg -74 150 print;
#X msg -74 172 freeze \$1;
#X msg -74 194 bypass \$1;
#X text -11 149 - print the current values of the above parameters
;
#X text 2 172 - start/stop freeze of reverb tail \, using 1 or 0;
#X text 6 193 - bypass the reverb processing \, using a 1 or 0;
#N canvas 0 22 454 304 algorithm 0;
#X text 32 52 freeverb~ is a simple implementation of the standard
Schroeder/Moorer reverb model. It uses 8 comb filters in parallel on
both channels. It then feeds the result of the reverb through 4 allpass
filters in series on both channels. These "smooth" the sound. The filters
on the right channel are slightly detuned compared to the left channel
in order to create a stereo effect.;
#X restore 19 510 pd algorithm notes;
#X text -13 127 - level of unprocessed signal \, between 0 and 1 (default:
0);
#X text -9 106 - level of reverbed signal \, between 0 and 1 (default:
0.3);
#X text 13 61 - amount of damping of room's surfaces (default: 0.5)
;
#X text -5 85 - stereo width of reverb (default: 1);
#X text 17 39 - size of the room to be simulated (default=0.85);
#X text -29 537 Hans-Christoph Steiner 2005 \, based on Olaf Matthes'
Max help;
#X obj 98 310 pddp/dsp;
#X connect 14 0 15 0;
#X connect 14 0 19 0;
#X connect 15 0 16 0;
#X connect 16 0 18 1;
#X connect 17 0 18 0;
#X connect 18 0 26 1;
#X connect 19 0 18 1;
#X connect 20 0 21 1;
#X connect 21 0 26 0;
#X connect 22 0 21 1;
#X connect 23 0 22 0;
#X connect 23 0 24 0;
#X connect 24 0 20 0;
#X connect 25 0 21 0;
#X connect 26 0 27 0;
#X connect 26 1 27 1;
#X connect 28 0 23 0;
#X connect 28 0 14 0;
#X connect 29 0 26 0;
#X connect 29 1 26 1;
#X connect 30 0 33 0;
#X connect 31 0 30 0;
#X connect 32 0 31 0;
#X connect 33 0 34 0;
#X connect 33 1 29 0;
#X connect 34 0 29 0;
#N canvas 10 10 200 200 10;
#N canvas 20 20 420 300 META 0;
#X text 10 10 META this is a prototype of a libdir meta file;
#X text 10 30 NAME freeverb~;
#X text 10 50 AUTHOR Olaf Matthes and Jezar Wakefield;
#X text 10 70 DESCRIPTION Freeverb is a simple implementation of the standard Schroeder/Moorer reverb model;
#X text 10 90 LICENSE GNU GPL;
#X text 10 110 VERSION 1.2;
#X restore 10 10 pd META;
This diff is collapsed.
# Microsoft Developer Studio Project File - Name="freeverb~" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=freeverb~ - WIN32 RELEASE
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "freeverb~.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "freeverb~.mak" CFG="freeverb~ - WIN32 RELEASE"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "freeverb~ - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE "freeverb~ - Win32 Intel Release" (based on "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 1
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=xicl6.exe
MTL=midl.exe
RSC=rc.exe
!IF "$(CFG)" == "freeverb~ - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "build-win\"
# PROP Intermediate_Dir "obj\"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "freeverb~_EXPORTS" /YX /FD /c
# ADD CPP /nologo /G6 /Zp2 /MT /W3 /GX /O2 /Ob2 /I "..\..\c74support\max-includes" /I "..\..\c74support\msp-includes" /D "WIN_VERSION" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "WIN_EXT_VERSION" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /win32
# SUBTRACT MTL /mktyplib203
# ADD BASE RSC /l 0xc07 /d "NDEBUG"
# ADD RSC /l 0xc07
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=xilink6.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
# ADD LINK32 ..\..\c74support\max-includes\win-includes\release\MaxAPI.lib ..\..\c74support\max-includes\win-includes\release\MaxExt.lib ..\..\c74support\msp-includes\win-includes\release\MaxAudio.lib /nologo /dll /machine:I386 /out:"freeverb~.mxe" /libpath:"../../bin" /export:main
# SUBTRACT LINK32 /pdb:none /incremental:yes /nodefaultlib
!ELSEIF "$(CFG)" == "freeverb~ - Win32 Intel Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "freeverb____Win32_Intel_Release"
# PROP BASE Intermediate_Dir "freeverb____Win32_Intel_Release"
# PROP BASE Ignore_Export_Lib 0
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "build-intel\"
# PROP Intermediate_Dir "obj\"
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /Zp2 /MT /W3 /GX /O2 /Ob2 /I "..\..\c74support\max-includes" /I "..\..\c74support\msp-includes" /D "WIN_VERSION" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "WIN_EXT_VERSION" /D "_LANGUAGE_C_PLUS_PLUS" /YX /FD /c
# ADD CPP /nologo /Zp2 /MT /W3 /GX /I "..\..\c74support\max-includes" /I "..\..\c74support\msp-includes" /D "WIN_VERSION" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "WIN_EXT_VERSION" /D "_LANGUAGE_C_PLUS_PLUS" /YX /FD /O3 /G7 /QaxW /c
# ADD BASE MTL /nologo /win32
# SUBTRACT BASE MTL /mktyplib203
# ADD MTL /nologo /win32
# SUBTRACT MTL /mktyplib203
# ADD BASE RSC /l 0xc07
# ADD RSC /l 0xc07
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=xilink6.exe
# ADD BASE LINK32 ..\..\c74support\max-includes\win-includes\release\MaxAPI.lib ..\..\c74support\max-includes\win-includes\release\MaxExt.lib ..\..\c74support\msp-includes\win-includes\release\MaxAudio.lib /nologo /dll /machine:I386 /out:"freeverb~.mxe" /libpath:"../../bin" /export:main
# SUBTRACT BASE LINK32 /pdb:none /incremental:yes /nodefaultlib
# ADD LINK32 ..\..\c74support\max-includes\win-includes\release\MaxAPI.lib ..\..\c74support\max-includes\win-includes\release\MaxExt.lib ..\..\c74support\msp-includes\win-includes\release\MaxAudio.lib /nologo /dll /machine:I386 /out:"freeverb~.mxe" /libpath:"../../bin" /export:main
# SUBTRACT LINK32 /pdb:none /incremental:yes /nodefaultlib
!ENDIF
# Begin Target
# Name "freeverb~ - Win32 Release"
# Name "freeverb~ - Win32 Intel Release"
# Begin Group "Quellcodedateien"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\freeverb~.c
# End Source File
# End Group
# Begin Group "Header-Dateien"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE="..\..\c74support\max-includes\ext.h"
# End Source File
# Begin Source File
SOURCE="..\..\c74support\msp-includes\z_dsp.h"
# End Source File
# End Group
# End Target
# End Project
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment