Loop Points of Wav files in PD
no, i think absalom is talking about loop and region points stored within the header of the .wav file itself.
i asked about this a year or so ago, and didn't get any result.
a mild workaround is to create your regions in audacity, because it saves the region data as a text file, which you can hack to get read in pd.
but really, getting the header data out of the .wav files themselves should just be a really simple process for someone with the coding knowledge. just doesn't seem to have been done yet.
( ps..not sure if it will help you, but i made this patch to mark regions in drumloops.
http://puredata.hurleur.com/sujet-1953-sample-slicer-user-selectable-slices )
Cyclone: can't load library
I found the answer myself:
The Pd installation file .pdsettings (located it the home directory) had wrong path set. This is confusing because the installation program did the mess-up.
With the correct settings one can start PD without any error messages.
Here is my file:
audioapi: 2
noaudioin: False
audioindev1: 0 2
noaudioout: False
audiooutdev1: 0 2
audiobuf: 50
rate: 44100
nomidiin: True
nomidiout: True
path1: ~/pd-externals
path2: /usr/local/lib/pd-externals
path3: /var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType
path4: /usr/lib/pd/extra/cyclone
path5: /usr/lib/pd/extra/zexy
path6: /usr/lib/pd/extra/creb
path7: /usr/lib/pd/extra/cxc
path8: /usr/lib/pd/extra/iemlib
path9: /usr/lib/pd/extra/list-abs
path10: /usr/lib/pd/extra/mapping
path11: /usr/lib/pd/extra/markex
path12: /usr/lib/pd/extra/maxlib
path13: /usr/lib/pd/extra/memento
path14: /usr/lib/pd/extra/mjlib
path15: /usr/lib/pd/extra/motex
path16: /usr/lib/pd/extra/oscx
path17: /usr/lib/pd/extra/pddp
path18: /usr/lib/pd/extra/pdogg
path19: /usr/lib/pd/extra/pixeltango
path20: /usr/lib/pd/extra/pmpd
path21: /usr/lib/pd/extra/rradical
path22: /usr/lib/pd/extra/sigpack
path23: /usr/lib/pd/extra/smlib
path24: /usr/lib/pd/extra/toxy
path25: /usr/lib/pd/extra/unauthorized
path26: /usr/lib/pd/extra/pan
path27: /usr/lib/pd/extra/freeverb
path28: /usr/lib/pd/extra/hcs
path29: /usr/lib/pd/extra/jmmmp
path30: /usr/lib/pd/extra/ext13
path31: /usr/lib/pd/extra/ggee
path32: /usr/lib/pd/extra/flib
path33: /usr/lib/pd/extra/ekext
path34: /usr/lib/pd/extra/flatspace
npath: 34
standardpath: 1
verbose: 0
loadlib1: libdir
loadlib2: Gem
loadlib3: cyclone
loadlib4: zexy
loadlib5: creb
loadlib6: cxc
loadlib7: iemlib
loadlib8: list-abs
loadlib9: mapping
loadlib10: markex
loadlib11: maxlib
loadlib12: memento
loadlib13: mjlib
loadlib14: motex
loadlib15: oscx
loadlib16: pddp
loadlib17: pdogg
loadlib18: pixeltango
loadlib19: pmpd
loadlib20: rradical
loadlib21: sigpack
loadlib22: smlib
loadlib23: toxy
loadlib24: unauthorized
loadlib25: vbap
loadlib26: pan
loadlib27: freeverb
loadlib28: hcs
loadlib29: jmmmp
loadlib30: ext13
loadlib31: ggee
loadlib32: iem_anything
loadlib33: flib
loadlib34: ekext
loadlib35: flatspace
loadlib36: pdp
loadlib37: pidip
nloadlib: 37
defeatrt: 0
flags: -helppath ~/pd -helppath /usr/share/pd
Axiome: live sample cutting
That's a good question domien: i spent so much time on it that i figured that it would be pretty self-explanatory. My mistake...
I'll write it as a start for a manual:
To play a slicer, you have to push a "radio" (they're vsl's too ). The sample starts at the position of the button (you have to imagine your sample apportionned on the eight buttons, even if it's 4bars length). To stop the sample, press "PLAYING" (i know this is not common sense, but wait for the next release...).
The sample-cutter (eight buttons) actions are quantized to 1/16. So you can start a loop and when it comes at the end, start a second one and if you get the good 1/16 timing, it will sync to the first one. And so on...
Now, the pattern section (darker grey):
A pattern is a recording of actions on the cutter-buttons.
Set the length. (in 1/16)
Press "record" -> it shows "press", waiting for an action on one of the cutter-buttons (not necessarily the first one) to start recording. You can cancel record-enabled, recording or playing states anytime by hitting the record button again.
So, if you enable record and press a cutter-button, you start the record counter (record button became "recording").
Play on the cutter-buttons to record a pattern loop.
At the end of the record loop, the pattern recording plays back automatically what you've just played and becomes "playing".
You can stop the slicer (press "PLAYING"), but the pattern is still playing in the background until you press ("playing") to stop it. You can start the slicer again (press any cutter-button and the pattern is plays at its current position).
@domien:
To start or stop several slicers simultaneously, you'll need to have either:
-several mouse pointers (duh!!?)
-a computer keyboard or a midi keyboard, with key assignments (you'll have to create an abstraction or subpatch. But that would not be difficult, just send bangs to the button's inputs... i may work on that later)
-Other hardware... like the monome, which buttons are mapped to the ui (see the subpatch monome_com inside the slicer abstracts.
Anyway, you can still get the samples in sync by waiting for the end/beginning of the other loop(s).
Hope i didn't confuse you with my long explanations.
Putting the draft into the package...
Oh and thanks for the compliment .
Cheers
Axiome: live sample cutting
Hi,
Here is my first Pd project.
I think i'm like most of Pd n00bs: amazed by the promises of such power, but quite lost in the objects jungle.
Fortunately, there are some serious Pd gurus walking this forum and they are not knowledge-greedy at all.
Special thanks to hardoff who's sample slicer with user selectable slices got me started.
Here's a screenshot of version 0.1 (click to enlarge):
Version 0.2 on its way, with lots of improvements and feature-adds.
You can visit the project page, or just download axiome-0.1 directly.
Any help, comment, feedback, bug report, modding appreciated...
Sample slicer with user-selectable slices
for a long time, i have been using 'cut everything into 16 equal sized chunks and then rearrange them' sample slicers. however, unless you use really even 4/4 loops, the end result never sounds really good.
so today i made a couple of abstractions that let me visually choose which sections of a loop i want to trigger.
the first is [breakpoint-maker], which you can use to line up your sample cut points and create a message box with all your cut-point data.
and then the second is a little player abstraction called [smp-slice] that allows for pitched playback and sequencing of the sample sections.
much nicer and cleaner sample cutting for sure.
(edit - just added a little 5ms envelope to the player to avoid some clicks)
Zexy crashes PD in linux!
hey
Anyone had bad experience with zexy 2.1?
I'm starting pd like this:
/usr/local/bin/pd \
-alsa -mididev 2,3 \
-path /usr/local/lib/pd/extra/iemabs \
-path /home/blabla/pd/cyclone-bin/bin \
-path /home/blabla/pd/pd-abstractions \
-path /usr/local/lib/pd/extra \
-lib zexyiemlib1:iemlib2:iem_mp3:iem_t3_lib \
patch.pd
The terminal shows this:
(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)
(c) the zexy external 2.1 (c)
(c) (l) forum::für::umläute (c)
(c) compiled: May 13 2008 (c)
(c) send me a 'help' message (c)
(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)(c)
then it outputs this and quits:
*** glibc detected *** /usr/local/bin/pd: free(): invalid next size (fast): 0x0a3a0638 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7d67a00]
/lib/libc.so.6(cfree+0x89)[0xb7d696f9]
/usr/local/lib/pd/extra/zexy.pd_linux[0xb7ced389]
/usr/local/bin/pd(pd_typedmess+0xf7)[0x80915a7]
/usr/local/bin/pd(outlet_anything+0x4a)[0x8092eea]
/usr/local/bin/pd(pd_typedmess+0xf7)[0x80915a7]
/usr/local/bin/pd(binbuf_eval+0x297)[0x8094547]
/usr/local/bin/pd[0x8063be7]
/usr/local/bin/pd(outlet_bang+0x3b)[0x80933cb]
/usr/local/bin/pd[0x807e6cb]
/usr/local/bin/pd(outlet_bang+0x3b)[0x80933cb]
/usr/local/bin/pd[0x80b422b]
/usr/local/bin/pd[0x80b4393]
/usr/local/bin/pd(outlet_bang+0x3b)[0x80933cb]
/usr/local/bin/pd[0x807e6cb]
/usr/local/bin/pd(outlet_bang+0x3b)[0x80933cb]
/usr/local/bin/pd[0x807e50d]
/usr/local/bin/pd(pd_typedmess+0xf7)[0x80915a7]
/usr/local/bin/pd(outlet_anything+0x4a)[0x8092eea]
/usr/local/bin/pd(pd_typedmess+0xf7)[0x80915a7]
/usr/local/bin/pd(binbuf_eval+0x297)[0x8094547]
/usr/local/bin/pd[0x8063be7]
/usr/local/bin/pd(outlet_bang+0x3b)[0x80933cb]
/usr/local/bin/pd[0x80b422b]
/usr/local/bin/pd[0x80b4393]
/usr/local/bin/pd(outlet_bang+0x3b)[0x80933cb]
/usr/local/bin/pd(outlet_bang+0x3b)[0x80933cb]
/usr/local/bin/pd(pd_typedmess+0x365)[0x8091815]
/usr/local/bin/pd(pd_vmess+0x9a)[0x8091bca]
/usr/local/bin/pd(canvas_loadbangsubpatches+0x237)[0x805d0b7]
anyone got a clue?
I compiled both PD and zexy on my Gentoo machine.
Problem compiling external on Windows
Hey,
thanks to everyone who responded to my posts both here and in the mailing list. Since then, I've figured out how to compile externals written in C using Microsoft Visual C++ 2005. There's more to document, however, such as how to compile externals using some of the other Windows compilers (Borland, djgpp, etc.), and also how to compile externals written in C++ in Windows. But one thing at a time.
one little thing to note... steps 4 and 7 may seem a little roundabout, but they account for the fact that MSVC sometimes has trouble with spaces in directory names (eg. C://Program Files/). If anyone knows how to override this behavior, post a reply, and I'll try to simplify the steps accordingly.
Updated June 29, 2007:
use [b]C://Progra~1/[/b] instead of [b]C://Program Files/[/b],
use [b]C://Docume~1/[/b] instead of [b]C://Documents and Settings/[/b], etc.
So, without further ado...
How to compile a pd external written in C using Microsoft Visual C++ 2005:
Compared to Windows, linux offers a much more user-friendly environment for compiling pd externals. However, with a little patience, a usable environment can be set up in Windows, and the good news is that everything you need is available for free. There are several reputable Windows-compatible C/C++ compilers out there, but here I'll discuss compiling externals with Microsoft Visual C++ 2005 (MSVC for short).
1. Download and Install Microsoft Visual C++ 2005 Express Edition.
a. Click the link above, then click Go! in the Visual C++ box.
b. Run vcsetup.exe to install the program
(the setup wizard should guide you through the process).
2. Download [url=http://download.microsoft.com/download/7/7/3/7737290f-98e8-45bf-9075-85cc6ae34bf1/VS80sp1-KB9267
]Visual C++ 2005 Express Service Pack 1.
a. Click the link above to download the Service Pack.
b. Run VS80sp1-KB926748-X86-INTL.exe to install the program.
3. Create a new project:
a. Open Visual C++.
b. Open the New Project window (Ctrl+Shift+N).
c. In the Project Types pane, select Visual C++.
d. In the Templates pane, select emptyproj.
e. Enter object name (helloworld).
f. Leave Create directory for solution unchecked, and click OK.
4. Import the pd header file:
a. Get m_pd.h here, or, using pd-vanilla (not pd-extended):
1. Open Windows Explorer or My Computer.
2. Navigate to the pd/src/ directory on your system.
3. Open m_pd.h in a text editor (file type is: C/C++ header).
b. Select all (Ctrl+A).
c. Copy selection to the clipboard (Ctrl+C).
d. Back in Visual C++, open the New File window (Ctrl+N).
e. In the Categories pane, select General.
f. In the Templates pane, select Text File, and click Open.
g. Copy the contents of m_pd.h into the editor window (Ctrl+V).
h. Open the Save File As Window (Ctrl+S).
i. Save as m_pd.h.
j. From the File Menu, select Move m_pd.h into; select helloworld.
5. Write the source code for the external in C.
a. Open the New File window (Ctrl+N).
b. In the Categories pane, select General.
c. In the Templates pane, select Text File, and click Open.
d. Write your source code in the editor window.
The following example is taken from the tutorial by Johannes M. Zmoelnig.
#include "m_pd.h"
static t_class *helloworld_class;
typedef struct _helloworld {
t_object x_obj;
} t_helloworld;
void helloworld_bang(t_helloworld *x)
{
post("Hello world !!");
}
void *helloworld_new(void)
{
t_helloworld *x = (t_helloworld *)pd_new(helloworld_class);
return (void *)x;
}
void helloworld_setup(void) {
helloworld_class = class_new(gensym("helloworld"),
(t_newmethod)helloworld_new,
0, sizeof(t_helloworld),
CLASS_DEFAULT, 0);
class_addbang(helloworld_class, helloworld_bang);
}
6. Save and import the source code into the project:
a. Open the Save File As Window (Ctrl+S).
b. Save as helloworld.c.
c. From the File Menu, select Move helloworld.c into; select helloworld.
7. Access the pd library file:
a. Open Windows Explorer or My Computer.
b. Navigate to the pd/bin/ directory on your system.
c. Right-click on pd.lib (file type is: Object File Library) and select Copy.
d. Navigate to the C://TEMP/ directory on your system.
e. Paste the copy of pd.lib in the C://TEMP/ directory (right-click or Ctrl-V).
8. Set configuration properties:
a. Set configuration type to .dll:
1. Back in Visual C++, open the helloworld Property Pages window (Alt+F7).
2. In the left pane, select Configuration Properties >> General.
3. In the right pane, under Project Defaults, click on
Configuration Type, and select Dynamic Library (.dll)
(using the arrow on the right).
b. Add MSW to preprocessor definitions:
1. In the left pane, select
Configuration Properties >> C/C++ >> Preprocessor.
2. In the right pane, type MSW in the Preprocessor Definitions field.
c. Tell compiler which language to use:
1. In the left pane, select
Configuration Properties >> C/C++ >> Advanced.
2. In the right pane, select Compile As.
3. Select Compile as C Code (/TC) by clicking the arrow on the right.
d. Tell linker where to find pd.lib:
1. In the left pane, select Configuration Properties >> Linker >> Input.
2. In the right pane, select Additional Dependencies and enter
C://TEMP/pd.lib.
e. Tell linker to export the setup function:
1. In the left pane, select
Configuration Properties >> Linker >> Command Line.
2. In the right pane, type
/export:helloworld_setup in the Additional options field.
3. Click OK.
9. Compile and link:
a. Use the Build Solution command (F7).
10. Copy the new helloworld.dll file into pd.
a. Open Windows Explorer or My Computer.
b. Navigate to the
My Documents/Visual Studio 2005/Projects/helloworld/Debug/
directory on your system.
c. Right-click on helloworld.dll (file type is: Application Extension)
and select Copy.
d. Navigate to the pd/extra directory on your system.
e. Paste the copy of helloworld.dll in the pd/extra directory
(right-click or Ctrl-V).
11. Test the external in pd.
a. the external should now be a useable object in pd.
b. open a new pd patch and try to create a helloworld object.
c. add a bang to the left inlet and test it out.
d. if the main pd console window displays "Hello world !!",
the external has succeeded.
Hope this helps!
-- middlepedal
Install gridflow on linux
the last lines for 'make install' are:
cp bin/jmax2pd /usr/local/bin; chmod 755 /usr/local/bin/jmax2pd
mkdir -p /usr/lib/pd/doc/5.reference/gridflow/flow_classes
cp pd_help/*.pd /usr/lib/pd/doc/5.reference/gridflow
cp doc/*.html /usr/lib/pd/doc/5.reference/gridflow
cp doc/flow_classes/*.p* /usr/lib/pd/doc/5.reference/gridflow/flow_classes
cp -r images/ /usr/lib/pd/extra/gridflow
cp gridflow.pd_linux pd_abstractions/*.pd /usr/lib/pd/extra
for z in camera_control motion_detection color mouse centroid centre_of_gravity fade \
apply_colormap_channelwise checkers contrast posterize ravel remap_image solarize spread \
rgb_to_greyscale greyscale_to_rgb rgb_to_yuv yuv_to_rgb; do \
cp pd_abstractions/\#$z.pd /usr/lib/pd/extra/\@$z.pd; done
mkdir -p /usr/lib/pd/extra/gridflow/icons
install -m 644 java/peephole.gif /usr/lib/pd/extra/gridflow/icons/peephole.gif
(cd devices4ruby; make install)
make[1]: Entering directory `/home/bastien/Desktop/gridflow-0.8.0/devices4ruby'
install -m644 ioctl.rb /usr/local/lib/ruby/1.8/linux//ioctl.rb
install -m644 SoundPCM.rb /usr/local/lib/ruby/1.8/linux//SoundPCM.rb
install -m644 ParallelPort.rb /usr/local/lib/ruby/1.8/linux//ParallelPort.rb
install -m644 SoundMixer.rb /usr/local/lib/ruby/1.8/linux//SoundMixer.rb
make[1]: Leaving directory `/home/bastien/Desktop/gridflow-0.8.0/devices4ruby'
I don't have any other PD install. Just the ccrma.
I think (i don't remember) that i have installed ruby from the source.
Install gridflow on linux
I've tried to install under root session but it still doesn't work!...
the full output for 'make install' is (sorry this is very very very long!!!):
ruby -w base/source_filter.rb base/grid.h base/grid.h.fcs
ruby -w base/source_filter.rb base/grid.c base/grid.c.fcs
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -c base/grid.c.fcs -o base/grid.o
ruby -w base/source_filter.rb base/main.c base/main.c.fcs
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -c base/main.c.fcs -o base/main.o
ruby -w base/source_filter.rb base/number.c base/number.c.fcs
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -DPASS1
-c base/num ber.c.fcs -o base/number.1.o
base/number.c.fcs: In static member function `static bool Op<T>::is_neutral(T, L eftRight)':
base/number.c.fcs:47: attention : « return » manquant dans une fonction devant r etourner une valeur
base/number.c.fcs: In static member function `static bool Op<T>::is_absorbent(T, LeftRight)':
base/number.c.fcs:48: attention : « return » manquant dans une fonction devant r etourner une valeur
base/number.c.fcs: In static member function `static bool Ymulshr8<T>::is_neutra l(T, LeftRight) [with T = uint8]':
base/number.c.fcs:266: instantiated from here
base/number.c.fcs:200: attention : comparaison est toujours fausse en raison d'u ne gamme limitée de type de données
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -DPASS2 -c base/num ber.c.fcs -o base/number.2.o
base/number.c.fcs: In static member function `static bool Op<T>::is_neutral(T, L eftRight)':
base/number.c.fcs:47: attention : « return » manquant dans une fonction devant r etourner une valeur
base/number.c.fcs: In static member function `static bool Op<T>::is_absorbent(T, LeftRight)':
base/number.c.fcs:48: attention : « return » manquant dans une fonction devant r etourner une valeur
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -DPASS3 -c base/num ber.c.fcs -o base/number.3.o
base/number.c.fcs: In static member function `static bool Op<T>::is_neutral(T, L eftRight)':
base/number.c.fcs:47: attention : « return » manquant dans une fonction devant r etourner une valeur
base/number.c.fcs: In static member function `static bool Op<T>::is_absorbent(T, LeftRight)':
base/number.c.fcs:48: attention : « return » manquant dans une fonction devant r etourner une valeur
ruby -w base/source_filter.rb base/bitpacking.c base/bitpacking.c.fcs
g++ -fPIC -g -O2 -I/Applications/Pd.app/Contents/Resources/include -I/sw/include -I/usr/local/include -I/include -xc++ -fno-operator-names -fno-omit-frame-point er -I/usr/X11R6/include -I /usr/local/lib/ruby/1.8/i686-linux -mcpu=pentium -mar ch=pentium -Wall -Wno-unused -O3 -funroll-loops -fno-omit-frame-pointer -g -fPIC -I. -I/home/bastien/Desktop/gridflow-0.8.0 -I -I. -c base/bitpacking. c.fcs -o base/bitpacking.o
ruby -w base/source_filter.rb base/flow_objects.c base/flow_objects.c.fcs
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
base/source_filter.rb:38: warning: regexp has invalid interval
bas