shambles07 / foo-yc20

Automatically exported from code.google.com/p/foo-yc20
Other
0 stars 0 forks source link

LV2, please :) #1

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
Now that you have vectorized DSP code, maybe it's time to create an LV2 version 
of the synth? :)

Original issue reported on code.google.com by alexandr...@gmail.com on 12 Dec 2010 at 2:02

GoogleCodeExporter commented 8 years ago
I second that :)

Original comment by dazg...@gmail.com on 13 Dec 2010 at 11:35

GoogleCodeExporter commented 8 years ago
I've started refactoring the project to allow for a headless client in addition 
to the GUI. An LV2 version will be coming after I get that work stable.

Original comment by sampo.sa...@gmail.com on 19 Dec 2010 at 11:30

GoogleCodeExporter commented 8 years ago
Which LV2 hosts would you like to use? I'm asking because the code is quite far 
already but I want to test it in different hosts before considering a release.

Original comment by sampo.sa...@gmail.com on 25 Dec 2010 at 9:32

GoogleCodeExporter commented 8 years ago
I'm thinking about Ardour 3 and Qtractor in the first place.

Original comment by alexandr...@gmail.com on 26 Dec 2010 at 3:58

GoogleCodeExporter commented 8 years ago
Revision 147 in SVN contains a very newly baked LV2 plugin. I'd appreciate if 
you could give it a go. I've tested that it indeed can be run in qtractor (at 
least svn few days ago), ardour3 (svn of today) and ingen. I'd love some 
feedback on it.

Especially note that qtractor is a bit weird about audio output of instrument 
plugins: it expects there to be two outputs. Currently the LV2 plugin has the 
same three outputs as the standalone program: main, treble and bass. I am 
thinking about switching to a stereo output with the "main" coming out of both 
ports. Any thoughts?

Original comment by sampo.sa...@gmail.com on 27 Dec 2010 at 9:35

GoogleCodeExporter commented 8 years ago
g++ src/foo-yc20.o src/configuration.o src/yc20-jack.o src/main-gui.o 
src/foo-yc20-ui.o src/faust-dsp.o `pkg-config --libs gtkmm-2.4 jack` -o foo-yc20
g++: src/faust-dsp.o: No such file or directory
make: *** [foo-yc20] Error 1

Original comment by alexandr...@gmail.com on 28 Dec 2010 at 6:45

GoogleCodeExporter commented 8 years ago
Makefile fixed.

Original comment by sampo.sa...@gmail.com on 28 Dec 2010 at 7:10

GoogleCodeExporter commented 8 years ago
Qtractor (rev1729) crashes:

0x030c9634 in mydsp::compute(int, float**, float**) () from 
/usr/local/lib/lv2/foo-yc20.lv2/foo-yc20.so
(gdb) bt
#0  0x030c9634 in mydsp::compute(int, float**, float**) () from 
/usr/local/lib/lv2/foo-yc20.lv2/foo-yc20.so
#1  0x030b6624 in run_FooYC20 () from 
/usr/local/lib/lv2/foo-yc20.lv2/foo-yc20.so
#2  0x080b8d32 in ?? ()
#3  0x08118ba5 in ?? ()
#4  0x080c05ee in ?? ()
#5  0x08078abb in ?? ()
#6  0x00136c00 in jack_client_thread_aux (arg=0x8c34420) at client.c:1974
#7  0x00136d2f in jack_client_thread (arg=0x8c34420) at client.c:2015
#8  0x0013bc11 in jack_thread_proxy (varg=0x842e9b0) at thread.c:127
#9  0x01cb296e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#10 0x01ecea4e in clone () from /lib/tls/i686/cmov/libc.so.6

Original comment by alexandr...@gmail.com on 28 Dec 2010 at 7:33

GoogleCodeExporter commented 8 years ago
Ardour3 (rev 8340) crashes as well

Original comment by alexandr...@gmail.com on 28 Dec 2010 at 7:35

GoogleCodeExporter commented 8 years ago
Strange. Just a few questions: Did it crash before opening the UI? Did you 
install before running? Do the command line clients work?

Original comment by sampo.sa...@gmail.com on 28 Dec 2010 at 8:00

GoogleCodeExporter commented 8 years ago
Both Qtractor and Ardour 3 crash as soon as I add the plug-in. Didn't try any 
console clients. I hardly remember how to.

Original comment by alexandr...@gmail.com on 28 Dec 2010 at 12:11

GoogleCodeExporter commented 8 years ago
Please try the command line clients. They are located in the same directory you 
invoked "make". Simply ./foo-yc20 or ./foo-yc20-cli should do it.

Original comment by sampo.sa...@gmail.com on 28 Dec 2010 at 12:19

GoogleCodeExporter commented 8 years ago
The plugin seems to work fine for multiple people. Is there anything strange 
about your system? Perhaps it doesn't have SSE support (check /proc/cpuinfo for 
supported flags), but gcc decides to compile SSE code?

Original comment by sampo.sa...@gmail.com on 28 Dec 2010 at 9:49

GoogleCodeExporter commented 8 years ago
For foo-yc20-cli I get:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb779eb70 (LWP 2526)]
0x0805ecf4 in mydsp::compute(int, float**, float**) ()
(gdb) bt
#0  0x0805ecf4 in mydsp::compute(int, float**, float**) ()
#1  0x08052be4 in YC20Jack::process(unsigned int) ()
#2  0x08052c55 in YC20Jack::process_callback(unsigned int, void*) ()
#3  0x00136c00 in jack_client_thread_aux (arg=0x80c3950) at client.c:1974
#4  0x00136d2f in jack_client_thread (arg=0x80c3950) at client.c:2015
#5  0x0013bc11 in jack_thread_proxy (varg=0x80c70f0) at thread.c:127
#6  0x0014f96e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#7  0x00374a4e in clone () from /lib/tls/i686/cmov/libc.so.6

$ cat /proc/cpuinfo | grep sse
flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon 
pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr 
pdcm sse4_1 lahf_lm tpr_shadow vnmi flexpriority
flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon 
pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr 
pdcm sse4_1 lahf_lm tpr_shadow vnmi flexpriority
flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon 
pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr 
pdcm sse4_1 lahf_lm tpr_shadow vnmi flexpriority
flags       : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon 
pebs bts aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr 
pdcm sse4_1 lahf_lm tpr_shadow vnmi flexpriority

Original comment by alexandr...@gmail.com on 28 Dec 2010 at 9:53

GoogleCodeExporter commented 8 years ago
What CPU is that and what version of gcc are you using?

Original comment by sampo.sa...@gmail.com on 28 Dec 2010 at 9:57

GoogleCodeExporter commented 8 years ago
model name  : Intel(R) Core(TM)2 Quad  CPU   Q9300  @ 2.50GHz

gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) 

Original comment by alexandr...@gmail.com on 29 Dec 2010 at 4:28

GoogleCodeExporter commented 8 years ago
Can you try compiling the plugin with debug flags?:

make CFLAGS=-g

This will produce a very slow plugin, but it will skip any platform dependent 
optimizations. This way we can rule out if gcc selects inappropriate 
compilation flags. If that works, try the next:

make CFLAGS="-O3 -msse -mfpmath=sse -ffast-math -ftree-vectorize"

If that segfaults again, start taking out parameters to see which flag(s) cause 
the non-working binary.

Original comment by sampo.sa...@gmail.com on 30 Dec 2010 at 1:29

GoogleCodeExporter commented 8 years ago
I've changed the compile flags to something that should work even on the 
processors gcc fails to select good flags for with mtune. Also the plugin 
version now has two outputs instead of one (two channel mono to support 
qtractor and zynjacku better. Can you give it another go?

Original comment by sampo.sa...@gmail.com on 2 Jan 2011 at 9:34

GoogleCodeExporter commented 8 years ago
Revision 155 still segfaults. For foo-yc20-cli:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb779eb70 (LWP 22548)]
0x0807a322 in mydsp::compute(int, float**, float**) ()
(gdb) bt
#0  0x0807a322 in mydsp::compute(int, float**, float**) ()
#1  0x08052b2a in YC20Jack::process(unsigned int) ()
#2  0x08052b95 in YC20Jack::process_callback(unsigned int, void*) ()
#3  0x00136c00 in jack_client_thread_aux (arg=0x80de950) at client.c:1974
#4  0x00136d2f in jack_client_thread (arg=0x80de950) at client.c:2015
#5  0x0013bc11 in jack_thread_proxy (varg=0x80e20f0) at thread.c:127
#6  0x0014f96e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#7  0x00374a4e in clone () from /lib/tls/i686/cmov/libc.so.6

Original comment by alexandr...@gmail.com on 2 Jan 2011 at 3:49

GoogleCodeExporter commented 8 years ago
Just to make extra sure: did you "make clean" before recompiling?

Also, did you ever try "make CFLAGS=-g" ?

Original comment by sampo.sa...@gmail.com on 3 Jan 2011 at 9:00

GoogleCodeExporter commented 8 years ago
I've found a serious bug in the Faust  code for the plugin (missing volume 
control). Can you retest? It's quite certain this is at least in part 
responsible for your bug.

Original comment by sampo.sa...@gmail.com on 9 Jan 2011 at 7:21

GoogleCodeExporter commented 8 years ago
Clean checkout of revision 191 with "make CFLAGS=-g":

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb779eb70 (LWP 11382)]
0x0805cc8a in mydsp::compute (this=0x80c9ad0, fullcount=1024, input=0x0, 
output=0xb7724150)
    at src/../gen/yc20-dsp-standalone.cpp:3330
3330                    fZec17[i] = ((fConst1 * float((6644.875161279122f * (fZec1[i] * 
fSlow9)))) + fRec13[i-1]);
(gdb) bt
#0  0x0805cc8a in mydsp::compute (this=0x80c9ad0, fullcount=1024, input=0x0, 
output=0xb7724150)
    at src/../gen/yc20-dsp-standalone.cpp:3330
#1  0x0804f5e6 in YC20Jack::process (this=0xbffff030, nframes=1024) at 
src/yc20-jack.cpp:94
#2  0x0804fac8 in YC20Jack::process_callback (nframes=1024, ptr=0xbffff030) at 
src/yc20-jack.cpp:215
#3  0x00136c00 in jack_client_thread_aux (arg=0x80c8950) at client.c:1974
#4  0x00136d2f in jack_client_thread (arg=0x80c8950) at client.c:2015
#5  0x0013bc11 in jack_thread_proxy (varg=0x80cc100) at thread.c:127
#6  0x0014f96e in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#7  0x00374a4e in clone () from /lib/tls/i686/cmov/libc.so.6

Original comment by alexandr...@gmail.com on 10 Jan 2011 at 8:23

GoogleCodeExporter commented 8 years ago
This is very weird. Can you describe your system a bit? What distro are you 
running, what version of gcc are you using. Could you also post the environment 
variables in your shell you compiled from?

Original comment by sampo.sa...@gmail.com on 10 Jan 2011 at 8:32

GoogleCodeExporter commented 8 years ago
> What distro are you running, what version of gcc are you using.

It's a regular Ubuntu 10.04 with GCC 4.4.3, with JACK compiled from SVN few 
months ago to have JACK Session around.

> Could you also post the environment variables in your shell you compiled from?

How do I do that?

Original comment by alexandr...@gmail.com on 10 Jan 2011 at 8:37

GoogleCodeExporter commented 8 years ago
Write "set" on the command line. You can also redirect the output to a file and 
attach that to the issue:

~$ set > environment_variables.txt

Original comment by sampo.sa...@gmail.com on 10 Jan 2011 at 8:39

GoogleCodeExporter commented 8 years ago
Thanks, attached.

Original comment by alexandr...@gmail.com on 10 Jan 2011 at 8:51

Attachments:

GoogleCodeExporter commented 8 years ago
Can you induce the crash again in gdb and then:

print i
print fRec13
print fRec13_tmp

?

Thanks

Original comment by sampo.sa...@gmail.com on 10 Jan 2011 at 9:09

GoogleCodeExporter commented 8 years ago
Oh. add print fZec17 to that list as well.

Original comment by sampo.sa...@gmail.com on 10 Jan 2011 at 9:13

GoogleCodeExporter commented 8 years ago
(gdb) print i
$1 = 0

(gdb) print fRec13
$2 = (float *) 0xb741ed20

(gdb) print fRec13_tmp
$3 = {0, 0, 0, 0, 0.199797899, 0.215167388, 0.230536938, 0.245906562, 
0.261276245, 0.276645988, 0.292015791, 0.307385653, 0.322755575, 
  0.338125557, 0.353495598, 0.368865728, 0.384235889, 0.399606109, 0.414976418, 0.430346757, 0.445717186, 0.461087644, 0.476458192, 
  0.491828799, 0 <repeats 12 times>}
(gdb) 
$4 = {0, 0, 0, 0, 0.199797899, 0.215167388, 0.230536938, 0.245906562, 
0.261276245, 0.276645988, 0.292015791, 0.307385653, 0.322755575, 
  0.338125557, 0.353495598, 0.368865728, 0.384235889, 0.399606109, 0.414976418, 0.430346757, 0.445717186, 0.461087644, 0.476458192, 
  0.491828799, 0 <repeats 12 times>}

(gdb) print fZec17
$5 = {0 <repeats 32 times>}

Original comment by alexandr...@gmail.com on 20 Jan 2011 at 5:42

GoogleCodeExporter commented 8 years ago
Can you try this with Jack SVN revision 3995?

Original comment by sampo.sa...@gmail.com on 13 Mar 2011 at 1:06

GoogleCodeExporter commented 8 years ago
Or the latest SVN Jack with the attached patch.

Original comment by sampo.sa...@gmail.com on 13 Mar 2011 at 4:03

Attachments:

GoogleCodeExporter commented 8 years ago
Hey svnversion 322 on a gentoo 64-bit host.
It works like a charm, as a standalone instrument and also as a lv2 plugin in 
ardour3

thanks.

Original comment by niemandv...@googlemail.com on 9 Jul 2011 at 5:28

GoogleCodeExporter commented 8 years ago
Upgrading to Ubuntu 11.04 has solved this

Original comment by alexandr...@gmail.com on 9 Jul 2011 at 6:24

GoogleCodeExporter commented 8 years ago
Good. I would however like to point out the actual cause of the crash: jack1 
between an unknown version and 0.120.2 was broken in the sense that it stole a 
large amount of stack space from all jack audio threads. Audio threads often 
don't need a lot of stack, but Foo-YC20 does because of a combination of lots 
of processing and how Faust code is compiled.

Original comment by sampo.sa...@gmail.com on 9 Jul 2011 at 8:57