[Demudi-commits] r40 - in ams/trunk: . debian debian/patches
Free Ekanayaka
free-guest@haydn.debian.org
Thu, 28 Oct 2004 05:14:23 -0600
Author: free-guest
Date: 2004-10-28 05:14:07 -0600 (Thu, 28 Oct 2004)
New Revision: 40
Added:
ams/trunk/.#Makefile.1.3
ams/trunk/.#configdialog.h.1.2
ams/trunk/.#modularsynth.cpp.1.2
ams/trunk/.#modularsynth.cpp.1.4
ams/trunk/debian/
ams/trunk/debian/.#changelog.1.3
ams/trunk/debian/ams.1
ams/trunk/debian/changelog
ams/trunk/debian/control
ams/trunk/debian/copyright
ams/trunk/debian/dirs
ams/trunk/debian/docs
ams/trunk/debian/manpages
ams/trunk/debian/menu
ams/trunk/debian/patches/
ams/trunk/debian/patches/00list
ams/trunk/debian/patches/10makefile.dpatch
ams/trunk/debian/patches/11ams_launch_script.dpatch
ams/trunk/debian/patches/12default_patch_dir.dpatch
ams/trunk/debian/rules
ams/trunk/debian/watch
Log:
Load newtrunk into ams/trunk.
Added: ams/trunk/.#Makefile.1.3
===================================================================
--- ams/trunk/.#Makefile.1.3 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/.#Makefile.1.3 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,404 @@
+####### Configuration
+
+BINARY = ams.real
+DESTDIR =
+BIN = $(DESTDIR)/usr/share/ams
+
+
+QT_BASE_DIR=/usr/share/qt3
+QT_LIB_DIR=$(QT_BASE_DIR)/lib
+QT_BIN_DIR=$(QT_BASE_DIR)/bin
+QT_INCLUDE_DIR=$(QT_BASE_DIR)/include
+X11_LIB_DIR=/usr/X11R6/lib
+
+$(BINARY): synth.o capture.o synthdata.o \
+ module.o module.moc.o \
+ configdialog.o configdialog.moc.o \
+ port.o port.moc.o \
+ midiguicomponent.o midiguicomponent.moc.o \
+ midislider.o midislider.moc.o \
+ intmidislider.o intmidislider.moc.o \
+ floatintmidislider.o floatintmidislider.moc.o \
+ midicombobox.o midicombobox.moc.o \
+ midicheckbox.o midicheckbox.moc.o \
+ midipushbutton.o midipushbutton.moc.o \
+ midicontroller.o midicontroller.moc.o \
+ midicontrollerlist.o midicontrollerlist.moc.o \
+ midiwidget.o midiwidget.moc.o \
+ guiwidget.o guiwidget.moc.o \
+ ladspadialog.o ladspadialog.moc.o \
+ envelope.o envelope.moc.o \
+ multi_envelope.o multi_envelope.moc.o \
+ scopescreen.o scopescreen.moc.o \
+ spectrumscreen.o spectrumscreen.moc.o \
+ m_sh.o m_sh.moc.o \
+ m_vcswitch.o m_vcswitch.moc.o \
+ m_vcorgan.o m_vcorgan.moc.o \
+ m_dynamicwaves.o m_dynamicwaves.moc.o \
+ m_vco.o m_vco.moc.o \
+ m_vca.o m_vca.moc.o \
+ m_vcf.o m_vcf.moc.o \
+ m_lfo.o m_lfo.moc.o \
+ m_noise.o m_noise.moc.o \
+ m_delay.o m_delay.moc.o \
+ m_seq.o m_seq.moc.o \
+ m_mcv.o m_mcv.moc.o \
+ m_advmcv.o m_advmcv.moc.o \
+ m_scmcv.o m_scmcv.moc.o \
+ m_env.o m_env.moc.o \
+ m_vcenv.o m_vcenv.moc.o \
+ m_advenv.o m_advenv.moc.o \
+ m_ringmod.o m_ringmod.moc.o \
+ m_inv.o m_inv.moc.o \
+ m_conv.o m_conv.moc.o \
+ m_cvs.o m_cvs.moc.o \
+ m_slew.o m_slew.moc.o \
+ m_quantizer.o m_quantizer.moc.o \
+ m_scquantizer.o m_scquantizer.moc.o \
+ m_mix.o m_mix.moc.o \
+ m_stereomix.o m_stereomix.moc.o \
+ m_ladspa.o m_ladspa.moc.o \
+ m_out.o m_out.moc.o \
+ m_jackout.o m_jackout.moc.o \
+ m_jackin.o m_jackin.moc.o \
+ m_wavout.o m_wavout.moc.o \
+ m_midiout.o m_midiout.moc.o \
+ m_scope.o m_scope.moc.o \
+ m_spectrum.o m_spectrum.moc.o \
+ m_in.o m_in.moc.o \
+ textedit.o textedit.moc.o \
+ modularsynth.o modularsynth.moc.o \
+ main.o
+ gcc -g -o $(BINARY) \
+ synth.o capture.o synthdata.o \
+ module.o module.moc.o \
+ configdialog.o configdialog.moc.o \
+ port.o port.moc.o \
+ midiguicomponent.o midiguicomponent.moc.o \
+ midislider.o midislider.moc.o \
+ intmidislider.o intmidislider.moc.o \
+ floatintmidislider.o floatintmidislider.moc.o \
+ midicombobox.o midicombobox.moc.o \
+ midicheckbox.o midicheckbox.moc.o \
+ midipushbutton.o midipushbutton.moc.o \
+ midicontroller.o midicontroller.moc.o \
+ midicontrollerlist.o midicontrollerlist.moc.o \
+ midiwidget.o midiwidget.moc.o \
+ guiwidget.o guiwidget.moc.o \
+ ladspadialog.o ladspadialog.moc.o \
+ envelope.o envelope.moc.o \
+ multi_envelope.o multi_envelope.moc.o \
+ scopescreen.o scopescreen.moc.o \
+ spectrumscreen.o spectrumscreen.moc.o \
+ m_sh.o m_sh.moc.o \
+ m_vcswitch.o m_vcswitch.moc.o \
+ m_vcorgan.o m_vcorgan.moc.o \
+ m_dynamicwaves.o m_dynamicwaves.moc.o \
+ m_vco.o m_vco.moc.o \
+ m_vca.o m_vca.moc.o \
+ m_vcf.o m_vcf.moc.o \
+ m_lfo.o m_lfo.moc.o \
+ m_noise.o m_noise.moc.o \
+ m_delay.o m_delay.moc.o \
+ m_seq.o m_seq.moc.o \
+ m_mcv.o m_mcv.moc.o \
+ m_advmcv.o m_advmcv.moc.o \
+ m_scmcv.o m_scmcv.moc.o \
+ m_env.o m_env.moc.o \
+ m_vcenv.o m_vcenv.moc.o \
+ m_advenv.o m_advenv.moc.o \
+ m_ringmod.o m_ringmod.moc.o \
+ m_inv.o m_inv.moc.o \
+ m_conv.o m_conv.moc.o \
+ m_cvs.o m_cvs.moc.o \
+ m_slew.o m_slew.moc.o \
+ m_quantizer.o m_quantizer.moc.o \
+ m_scquantizer.o m_scquantizer.moc.o \
+ m_mix.o m_mix.moc.o \
+ m_stereomix.o m_stereomix.moc.o \
+ m_ladspa.o m_ladspa.moc.o \
+ m_out.o m_out.moc.o \
+ m_jackout.o m_jackout.moc.o \
+ m_jackin.o m_jackin.moc.o \
+ m_wavout.o m_wavout.moc.o \
+ m_midiout.o m_midiout.moc.o \
+ m_scope.o m_scope.moc.o \
+ m_spectrum.o m_spectrum.moc.o \
+ m_in.o m_in.moc.o \
+ textedit.o textedit.moc.o \
+ modularsynth.o modularsynth.moc.o \
+ main.o \
+ -L$(QT_LIB_DIR) -L$(X11_LIB_DIR) \
+ -lqt-mt -ljack -lasound -lsrfftw -lsfftw -lm
+
+CXXFLAGS=-DQT_THREAD_SUPPORT -I$(QT_INCLUDE_DIR) -I/usr/X11R6/include -I. -O2 -g -Wall
+
+synth.o: synth.cpp synth.h synthdata.h module.h m_out.h m_wavout.h m_scope.h m_spectrum.h m_midiout.h
+capture.o: capture.cpp capture.h synthdata.h m_in.h m_jackout.h m_jackin.h
+synthdata.o: synthdata.cpp synthdata.h module.h port.h m_env.h m_advenv.h m_vcenv.h
+modularsynth.o: modularsynth.cpp modularsynth.h synth.h module.h port.h textedit.h \
+ synthdata.h midicontroller.h midicontrollerlist.h midiwidget.h guiwidget.h m_vcf.h m_sh.h \
+ m_vco.h m_vca.h m_lfo.h m_delay.h m_ringmod.h m_inv.h m_mix.h \
+ m_stereomix.h m_ladspa.h m_out.h m_wavout.h m_conv.h \
+ m_mcv.h m_advmcv.h m_seq.h m_env.h m_slew.h m_quantizer.h m_in.h ladspadialog.h m_cvs.h m_midiout.h m_vcenv.h \
+ m_vcorgan.h m_dynamicwaves.h m_advenv.h m_scope.h m_spectrum.h m_vcswitch.h m_jackout.h m_jackin.h \
+ m_scmcv.h m_scquantizer.h
+modularsynth.moc.o: modularsynth.moc.cpp modularsynth.h module.h port.h textedit.h \
+ synth.h synthdata.h midicontroller.h midicontrollerlist.h midiwidget.h guiwidget.h m_vcf.h m_sh.h \
+ m_vco.h m_vca.h m_lfo.h m_delay.h m_ringmod.h m_inv.h m_mix.h \
+ m_stereomix.h m_ladspa.h m_out.h m_wavout.h m_conv.h \
+ m_mcv.h m_advmcv.h m_seq.h m_env.h m_slew.h m_quantizer.h m_in.h ladspadialog.h m_cvs.h m_midiout.h m_vcenv.h \
+ m_vcorgan.h m_dynamicwaves.h m_advenv.h m_scope.h m_spectrum.h m_vcswitch.h m_jackout.h m_jackin.h \
+ m_scmcv.h m_scquantizer.h
+modularsynth.moc.cpp: modularsynth.h modularsynth.cpp
+ $(QT_BIN_DIR)/moc modularsynth.h -o modularsynth.moc.cpp
+main.o: main.cpp modularsynth.h
+configdialog.o: configdialog.cpp configdialog.h midicontroller.h envelope.h multi_envelope.h \
+ midicontrollerlist.h midiwidget.h guiwidget.h midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h synthdata.h \
+ scopescreen.h spectrumscreen.h midipushbutton.h
+configdialog.moc.o: configdialog.moc.cpp configdialog.h midicontroller.h envelope.h multi_envelope.h \
+ midicontrollerlist.h midiwidget.h guiwidget.h midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h synthdata.h \
+ scopescreen.h spectrumscreen.h midipushbutton.h
+configdialog.moc.cpp: configdialog.h configdialog.cpp
+ $(QT_BIN_DIR)/moc configdialog.h -o configdialog.moc.cpp
+module.o: module.cpp module.h synthdata.h configdialog.h port.h
+module.moc.o: module.moc.cpp module.h synthdata.h configdialog.h port.h
+module.moc.cpp: module.h module.cpp
+ $(QT_BIN_DIR)/moc module.h -o module.moc.cpp
+port.o: port.cpp port.h synthdata.h
+port.moc.o: port.moc.cpp port.h synthdata.h
+port.moc.cpp: port.h port.cpp
+ $(QT_BIN_DIR)/moc port.h -o port.moc.cpp
+midiguicomponent.o: midiguicomponent.cpp midiguicomponent.h midicontroller.h midicontrollerlist.h
+midiguicomponent.moc.o: midiguicomponent.moc.cpp midiguicomponent.h midicontroller.h midicontrollerlist.h
+midiguicomponent.moc.cpp: midiguicomponent.h midiguicomponent.cpp
+ $(QT_BIN_DIR)/moc midiguicomponent.h -o midiguicomponent.moc.cpp
+midislider.o: midislider.cpp midislider.h intmidislider.h synthdata.h midiwidget.h guiwidget.h \
+ midicontroller.h midiguicomponent.h
+midislider.moc.o: midislider.moc.cpp midislider.h intmidislider.h synthdata.h midiwidget.h guiwidget.h \
+ midicontroller.h midiguicomponent.h
+midislider.moc.cpp: midislider.h midislider.cpp
+ $(QT_BIN_DIR)/moc midislider.h -o midislider.moc.cpp
+intmidislider.o: intmidislider.cpp intmidislider.h synthdata.h midiwidget.h guiwidget.h \
+ midicontroller.h midiguicomponent.h
+intmidislider.moc.o: intmidislider.moc.cpp intmidislider.h synthdata.h midiwidget.h guiwidget.h \
+ midicontroller.h midiguicomponent.h
+intmidislider.moc.cpp: intmidislider.h intmidislider.cpp
+ $(QT_BIN_DIR)/moc intmidislider.h -o intmidislider.moc.cpp
+floatintmidislider.o: floatintmidislider.cpp floatintmidislider.h synthdata.h midiwidget.h guiwidget.h \
+ midicontroller.h midiguicomponent.h
+floatintmidislider.moc.o: floatintmidislider.moc.cpp floatintmidislider.h synthdata.h midiwidget.h guiwidget.h \
+ midicontroller.h midiguicomponent.h
+floatintmidislider.moc.cpp: floatintmidislider.h floatintmidislider.cpp
+ $(QT_BIN_DIR)/moc floatintmidislider.h -o floatintmidislider.moc.cpp
+midicombobox.o: midicombobox.cpp midicombobox.h synthdata.h midiwidget.h guiwidget.h \
+ midicontroller.h midiguicomponent.h
+midicombobox.moc.o: midicombobox.moc.cpp midicombobox.h synthdata.h midiwidget.h guiwidget.h \
+ midicontroller.h midiguicomponent.h
+midicombobox.moc.cpp: midicombobox.h midicombobox.cpp
+ $(QT_BIN_DIR)/moc midicombobox.h -o midicombobox.moc.cpp
+midicheckbox.o: midicheckbox.cpp midicheckbox.h synthdata.h midiwidget.h guiwidget.h \
+ midicontroller.h midiguicomponent.h
+midicheckbox.moc.o: midicheckbox.moc.cpp midicheckbox.h synthdata.h midiwidget.h guiwidget.h midicontroller.h
+midicheckbox.moc.cpp: midicheckbox.h midicheckbox.cpp
+ $(QT_BIN_DIR)/moc midicheckbox.h -o midicheckbox.moc.cpp
+midipushbutton.o: midipushbutton.cpp midipushbutton.h synthdata.h midiwidget.h guiwidget.h \
+ midicontroller.h midiguicomponent.h
+midipushbutton.moc.o: midipushbutton.moc.cpp midipushbutton.h synthdata.h midiwidget.h midicontroller.h guiwidget.h
+midipushbutton.moc.cpp: midipushbutton.h midipushbutton.cpp
+ $(QT_BIN_DIR)/moc midipushbutton.h -o midipushbutton.moc.cpp
+envelope.o: envelope.cpp envelope.h synthdata.h
+envelope.moc.o: envelope.moc.cpp envelope.h synthdata.h
+envelope.moc.cpp: envelope.h envelope.cpp
+ $(QT_BIN_DIR)/moc envelope.h -o envelope.moc.cpp
+multi_envelope.o: multi_envelope.cpp multi_envelope.h synthdata.h
+multi_envelope.moc.o: multi_envelope.moc.cpp multi_envelope.h synthdata.h
+multi_envelope.moc.cpp: multi_envelope.h multi_envelope.cpp
+ $(QT_BIN_DIR)/moc multi_envelope.h -o multi_envelope.moc.cpp
+scopescreen.o: scopescreen.cpp scopescreen.h synthdata.h
+scopescreen.moc.o: scopescreen.moc.cpp scopescreen.h synthdata.h
+scopescreen.moc.cpp: scopescreen.h scopescreen.cpp
+ $(QT_BIN_DIR)/moc scopescreen.h -o scopescreen.moc.cpp
+spectrumscreen.o: spectrumscreen.cpp spectrumscreen.h synthdata.h
+spectrumscreen.moc.o: spectrumscreen.moc.cpp spectrumscreen.h synthdata.h
+spectrumscreen.moc.cpp: spectrumscreen.h spectrumscreen.cpp
+ $(QT_BIN_DIR)/moc spectrumscreen.h -o spectrumscreen.moc.cpp
+midicontroller.o: midicontroller.cpp midicontroller.h
+midicontroller.moc.o: midicontroller.moc.cpp midicontroller.h
+midicontroller.moc.cpp: midicontroller.h midicontroller.cpp
+ $(QT_BIN_DIR)/moc midicontroller.h -o midicontroller.moc.cpp
+midicontrollerlist.o: midicontrollerlist.cpp midicontrollerlist.h midicontroller.h
+midicontrollerlist.moc.o: midicontrollerlist.moc.cpp midicontrollerlist.h midicontroller.h
+midicontrollerlist.moc.cpp: midicontrollerlist.h midicontrollerlist.cpp
+ $(QT_BIN_DIR)/moc midicontrollerlist.h -o midicontrollerlist.moc.cpp
+midiwidget.o: midiwidget.cpp midiwidget.h midicontroller.h midicontrollerlist.h synthdata.h guiwidget.h \
+ midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h midipushbutton.h
+midiwidget.moc.o: midiwidget.moc.cpp midiwidget.h midicontroller.h midicontrollerlist.h synthdata.h guiwidget.h \
+ midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h midipushbutton.h
+midiwidget.moc.cpp: midiwidget.h midiwidget.cpp
+ $(QT_BIN_DIR)/moc midiwidget.h -o midiwidget.moc.cpp
+guiwidget.o: guiwidget.cpp guiwidget.h midicontroller.h midicontrollerlist.h synthdata.h \
+ midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h midipushbutton.h
+guiwidget.moc.o: guiwidget.moc.cpp guiwidget.h midicontroller.h midicontrollerlist.h synthdata.h \
+ midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h midipushbutton.h
+guiwidget.moc.cpp: guiwidget.h guiwidget.cpp
+ $(QT_BIN_DIR)/moc guiwidget.h -o guiwidget.moc.cpp
+ladspadialog.o: ladspadialog.cpp ladspadialog.h synthdata.h
+ladspadialog.moc.o: ladspadialog.moc.cpp ladspadialog.h synthdata.h
+ladspadialog.moc.cpp: ladspadialog.h ladspadialog.cpp
+ $(QT_BIN_DIR)/moc ladspadialog.h -o ladspadialog.moc.cpp
+m_vco.o: m_vco.cpp m_vco.h synthdata.h module.h port.h
+m_vco.moc.o: m_vco.moc.cpp m_vco.h synthdata.h module.h port.h
+m_vco.moc.cpp: m_vco.h m_vco.cpp
+ $(QT_BIN_DIR)/moc m_vco.h -o m_vco.moc.cpp
+m_vca.o: m_vca.cpp m_vca.h synthdata.h module.h port.h
+m_vca.moc.o: m_vca.moc.cpp m_vca.h synthdata.h module.h port.h
+m_vca.moc.cpp: m_vca.h m_vca.cpp
+ $(QT_BIN_DIR)/moc m_vca.h -o m_vca.moc.cpp
+m_vcf.o: m_vcf.cpp m_vcf.h synthdata.h module.h port.h
+m_vcf.moc.o: m_vcf.moc.cpp m_vcf.h synthdata.h module.h port.h
+m_vcf.moc.cpp: m_vcf.h m_vcf.cpp
+ $(QT_BIN_DIR)/moc m_vcf.h -o m_vcf.moc.cpp
+m_lfo.o: m_lfo.cpp m_lfo.h synthdata.h module.h port.h
+m_lfo.moc.o: m_lfo.moc.cpp m_lfo.h synthdata.h module.h port.h
+m_lfo.moc.cpp: m_lfo.h m_lfo.cpp
+ $(QT_BIN_DIR)/moc m_lfo.h -o m_lfo.moc.cpp
+m_noise.o: m_noise.cpp m_noise.h synthdata.h module.h port.h
+m_noise.moc.o: m_noise.moc.cpp m_noise.h synthdata.h module.h port.h
+m_noise.moc.cpp: m_noise.h m_noise.cpp
+ $(QT_BIN_DIR)/moc m_noise.h -o m_noise.moc.cpp
+m_delay.o: m_delay.cpp m_delay.h synthdata.h module.h port.h
+m_delay.moc.o: m_delay.moc.cpp m_delay.h synthdata.h module.h port.h
+m_delay.moc.cpp: m_delay.h m_delay.cpp
+ $(QT_BIN_DIR)/moc m_delay.h -o m_delay.moc.cpp
+m_env.o: m_env.cpp m_env.h synthdata.h module.h port.h
+m_env.moc.o: m_env.moc.cpp m_env.h synthdata.h module.h port.h
+m_env.moc.cpp: m_env.h m_env.cpp
+ $(QT_BIN_DIR)/moc m_env.h -o m_env.moc.cpp
+m_vcenv.o: m_vcenv.cpp m_vcenv.h synthdata.h module.h port.h
+m_vcenv.moc.o: m_vcenv.moc.cpp m_vcenv.h synthdata.h module.h port.h
+m_vcenv.moc.cpp: m_vcenv.h m_vcenv.cpp
+ $(QT_BIN_DIR)/moc m_vcenv.h -o m_vcenv.moc.cpp
+m_advenv.o: m_advenv.cpp m_advenv.h synthdata.h module.h port.h
+m_advenv.moc.o: m_advenv.moc.cpp m_advenv.h synthdata.h module.h port.h
+m_advenv.moc.cpp: m_advenv.h m_advenv.cpp
+ $(QT_BIN_DIR)/moc m_advenv.h -o m_advenv.moc.cpp
+m_mcv.o: m_mcv.cpp m_mcv.h synthdata.h module.h port.h
+m_mcv.moc.o: m_mcv.moc.cpp m_mcv.h synthdata.h module.h port.h
+m_mcv.moc.cpp: m_mcv.h m_mcv.cpp
+ $(QT_BIN_DIR)/moc m_mcv.h -o m_mcv.moc.cpp
+m_advmcv.o: m_advmcv.cpp m_advmcv.h synthdata.h module.h port.h
+m_advmcv.moc.o: m_advmcv.moc.cpp m_advmcv.h synthdata.h module.h port.h
+m_advmcv.moc.cpp: m_advmcv.h m_advmcv.cpp
+ $(QT_BIN_DIR)/moc m_advmcv.h -o m_advmcv.moc.cpp
+m_scmcv.o: m_scmcv.cpp m_scmcv.h synthdata.h module.h port.h
+m_scmcv.moc.o: m_scmcv.moc.cpp m_scmcv.h synthdata.h module.h port.h
+m_scmcv.moc.cpp: m_scmcv.h m_scmcv.cpp
+ $(QT_BIN_DIR)/moc m_scmcv.h -o m_scmcv.moc.cpp
+m_seq.o: m_seq.cpp m_seq.h synthdata.h module.h port.h
+m_seq.moc.o: m_seq.moc.cpp m_seq.h synthdata.h module.h port.h
+m_seq.moc.cpp: m_seq.h m_seq.cpp
+ $(QT_BIN_DIR)/moc m_seq.h -o m_seq.moc.cpp
+m_ringmod.o: m_ringmod.cpp m_ringmod.h synthdata.h module.h port.h
+m_ringmod.moc.o: m_ringmod.moc.cpp m_ringmod.h synthdata.h module.h port.h
+m_ringmod.moc.cpp: m_ringmod.h m_ringmod.cpp
+ $(QT_BIN_DIR)/moc m_ringmod.h -o m_ringmod.moc.cpp
+m_inv.o: m_inv.cpp m_inv.h synthdata.h module.h port.h
+m_inv.moc.o: m_inv.moc.cpp m_inv.h synthdata.h module.h port.h
+m_inv.moc.cpp: m_inv.h m_inv.cpp
+ $(QT_BIN_DIR)/moc m_inv.h -o m_inv.moc.cpp
+m_conv.o: m_conv.cpp m_conv.h synthdata.h module.h port.h
+m_conv.moc.o: m_conv.moc.cpp m_conv.h synthdata.h module.h port.h
+m_conv.moc.cpp: m_conv.h m_conv.cpp
+ $(QT_BIN_DIR)/moc m_conv.h -o m_conv.moc.cpp
+m_cvs.o: m_cvs.cpp m_cvs.h synthdata.h module.h port.h
+m_cvs.moc.o: m_cvs.moc.cpp m_cvs.h synthdata.h module.h port.h
+m_cvs.moc.cpp: m_cvs.h m_cvs.cpp
+ $(QT_BIN_DIR)/moc m_cvs.h -o m_cvs.moc.cpp
+m_sh.o: m_sh.cpp m_sh.h synthdata.h module.h port.h
+m_sh.moc.o: m_sh.moc.cpp m_sh.h synthdata.h module.h port.h
+m_sh.moc.cpp: m_sh.h m_sh.cpp
+ $(QT_BIN_DIR)/moc m_sh.h -o m_sh.moc.cpp
+m_vcswitch.o: m_vcswitch.cpp m_vcswitch.h synthdata.h module.h port.h
+m_vcswitch.moc.o: m_vcswitch.moc.cpp m_vcswitch.h synthdata.h module.h port.h
+m_vcswitch.moc.cpp: m_vcswitch.h m_vcswitch.cpp
+ $(QT_BIN_DIR)/moc m_vcswitch.h -o m_vcswitch.moc.cpp
+m_vcorgan.o: m_vcorgan.cpp m_vcorgan.h synthdata.h module.h port.h
+m_vcorgan.moc.o: m_vcorgan.moc.cpp m_vcorgan.h synthdata.h module.h port.h
+m_vcorgan.moc.cpp: m_vcorgan.h m_vcorgan.cpp
+ $(QT_BIN_DIR)/moc m_vcorgan.h -o m_vcorgan.moc.cpp
+m_dynamicwaves.o: m_dynamicwaves.cpp m_dynamicwaves.h synthdata.h module.h port.h
+m_dynamicwaves.moc.o: m_dynamicwaves.moc.cpp m_dynamicwaves.h synthdata.h module.h port.h
+m_dynamicwaves.moc.cpp: m_dynamicwaves.h m_dynamicwaves.cpp
+ $(QT_BIN_DIR)/moc m_dynamicwaves.h -o m_dynamicwaves.moc.cpp
+m_slew.o: m_slew.cpp m_slew.h synthdata.h module.h port.h
+m_slew.moc.o: m_slew.moc.cpp m_slew.h synthdata.h module.h port.h
+m_slew.moc.cpp: m_slew.h m_slew.cpp
+ $(QT_BIN_DIR)/moc m_slew.h -o m_slew.moc.cpp
+m_quantizer.o: m_quantizer.cpp m_quantizer.h synthdata.h module.h port.h
+m_quantizer.moc.o: m_quantizer.moc.cpp m_quantizer.h synthdata.h module.h port.h
+m_quantizer.moc.cpp: m_quantizer.h m_quantizer.cpp
+ $(QT_BIN_DIR)/moc m_quantizer.h -o m_quantizer.moc.cpp
+m_scquantizer.o: m_scquantizer.cpp m_scquantizer.h synthdata.h module.h port.h
+m_scquantizer.moc.o: m_scquantizer.moc.cpp m_scquantizer.h synthdata.h module.h port.h
+m_scquantizer.moc.cpp: m_scquantizer.h m_scquantizer.cpp
+ $(QT_BIN_DIR)/moc m_scquantizer.h -o m_scquantizer.moc.cpp
+m_mix.o: m_mix.cpp m_mix.h synthdata.h module.h port.h
+m_mix.moc.o: m_mix.moc.cpp m_mix.h synthdata.h module.h port.h
+m_mix.moc.cpp: m_mix.h m_mix.cpp
+ $(QT_BIN_DIR)/moc m_mix.h -o m_mix.moc.cpp
+m_stereomix.o: m_stereomix.cpp m_stereomix.h synthdata.h module.h port.h
+m_stereomix.moc.o: m_stereomix.moc.cpp m_stereomix.h synthdata.h module.h port.h
+m_stereomix.moc.cpp: m_stereomix.h m_stereomix.cpp
+ $(QT_BIN_DIR)/moc m_stereomix.h -o m_stereomix.moc.cpp
+m_ladspa.o: m_ladspa.cpp m_ladspa.h synthdata.h module.h port.h
+m_ladspa.moc.o: m_ladspa.moc.cpp m_ladspa.h synthdata.h module.h port.h
+m_ladspa.moc.cpp: m_ladspa.h m_ladspa.cpp
+ $(QT_BIN_DIR)/moc m_ladspa.h -o m_ladspa.moc.cpp
+m_out.o: m_out.cpp m_out.h synthdata.h module.h port.h
+m_out.moc.o: m_out.moc.cpp m_out.h synthdata.h module.h port.h
+m_out.moc.cpp: m_out.h m_out.cpp
+ $(QT_BIN_DIR)/moc m_out.h -o m_out.moc.cpp
+m_jackout.o: m_jackout.cpp m_jackout.h synthdata.h module.h port.h
+m_jackout.moc.o: m_jackout.moc.cpp m_jackout.h synthdata.h module.h port.h
+m_jackout.moc.cpp: m_jackout.h m_jackout.cpp
+ $(QT_BIN_DIR)/moc m_jackout.h -o m_jackout.moc.cpp
+m_jackin.o: m_jackin.cpp m_jackin.h synthdata.h module.h port.h
+m_jackin.moc.o: m_jackin.moc.cpp m_jackin.h synthdata.h module.h port.h
+m_jackin.moc.cpp: m_jackin.h m_jackin.cpp
+ $(QT_BIN_DIR)/moc m_jackin.h -o m_jackin.moc.cpp
+m_wavout.o: m_wavout.cpp m_wavout.h synthdata.h module.h port.h
+m_wavout.moc.o: m_wavout.moc.cpp m_wavout.h synthdata.h module.h port.h
+m_wavout.moc.cpp: m_wavout.h m_wavout.cpp
+ $(QT_BIN_DIR)/moc m_wavout.h -o m_wavout.moc.cpp
+m_midiout.o: m_midiout.cpp m_midiout.h synthdata.h module.h port.h
+m_midiout.moc.o: m_midiout.moc.cpp m_midiout.h synthdata.h module.h port.h
+m_midiout.moc.cpp: m_midiout.h m_midiout.cpp
+ $(QT_BIN_DIR)/moc m_midiout.h -o m_midiout.moc.cpp
+m_scope.o: m_scope.cpp m_scope.h synthdata.h module.h port.h
+m_scope.moc.o: m_scope.moc.cpp m_scope.h synthdata.h module.h port.h
+m_scope.moc.cpp: m_scope.h m_scope.cpp
+ $(QT_BIN_DIR)/moc m_scope.h -o m_scope.moc.cpp
+m_spectrum.o: m_spectrum.cpp m_spectrum.h synthdata.h module.h port.h
+m_spectrum.moc.o: m_spectrum.moc.cpp m_spectrum.h synthdata.h module.h port.h
+m_spectrum.moc.cpp: m_spectrum.h m_spectrum.cpp
+ $(QT_BIN_DIR)/moc m_spectrum.h -o m_spectrum.moc.cpp
+m_in.o: m_in.cpp m_in.h synthdata.h module.h port.h
+m_in.moc.o: m_in.moc.cpp m_in.h synthdata.h module.h port.h
+m_in.moc.cpp: m_in.h m_in.cpp
+ $(QT_BIN_DIR)/moc m_in.h -o m_in.moc.cpp
+textedit.o: textedit.cpp textedit.h synthdata.h
+textedit.moc.o: textedit.moc.cpp textedit.h synthdata.h
+textedit.moc.cpp: textedit.h textedit.cpp
+ $(QT_BIN_DIR)/moc textedit.h -o textedit.moc.cpp
+
+####### Install
+
+install: $(BINARY)
+ install -d $(BIN)
+ install $(BINARY) $(BIN)
+
+####### Clean
+clean:
+ rm *.o *.moc.cpp $(BINARY)
+
Added: ams/trunk/.#configdialog.h.1.2
===================================================================
--- ams/trunk/.#configdialog.h.1.2 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/.#configdialog.h.1.2 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,95 @@
+#ifndef CONFIGDIALOG_H
+#define CONFIGDIALOG_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <qwidget.h>
+#include <qstring.h>
+#include <qslider.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qvbox.h>
+#include <qhbox.h>
+#include <qspinbox.h>
+#include <qradiobutton.h>
+#include <qpushbutton.h>
+#include <qdialog.h>
+#include <qstrlist.h>
+#include <qscrollview.h>
+#include <qtabwidget.h>
+#include <qlineedit.h>
+#include <alsa/asoundlib.h>
+#include "synthdata.h"
+#include "midislider.h"
+#include "intmidislider.h"
+#include "floatintmidislider.h"
+#include "midicombobox.h"
+#include "midicheckbox.h"
+#include "midipushbutton.h"
+#include "midiguicomponent.h"
+#include "envelope.h"
+#include "multi_envelope.h"
+#include "scopescreen.h"
+#include "spectrumscreen.h"
+
+class ConfigDialog : public QVBox
+{
+ Q_OBJECT
+
+ private:
+ SynthData *synthdata;
+ QVBox *configBox;
+ QScrollView *scroll;
+
+ public:
+ QList<MidiSlider> midiSliderList;
+ QList<IntMidiSlider> intMidiSliderList;
+ QList<FloatIntMidiSlider> floatIntMidiSliderList;
+ QList<MidiComboBox> midiComboBoxList;
+ QList<MidiCheckBox> midiCheckBoxList;
+ QList<MidiPushButton> midiPushButtonList;
+ QList<Envelope> envelopeList;
+ QList<ScopeScreen> scopeScreenList;
+ QList<SpectrumScreen> spectrumScreenList;
+ QList<MultiEnvelope> multiEnvelopeList;
+ QList<MidiGUIcomponent> midiGUIcomponentList;
+ QList<QLineEdit> lineEditList;
+ QList<QHBox> hboxList;
+ QList<QVBox> vboxList;
+ QList<QLabel> labelList;
+ QPushButton *removeButton;
+ QObject *parentModule;
+ QTabWidget *tabWidget;
+
+ public:
+ ConfigDialog(QObject *p_parentModule, QWidget* parent=0, const char *name=0, SynthData *p_synthdata=0);
+ ~ConfigDialog();
+ int addSlider(float minValue, float maxValue, float value, const char *name, float *valueRef, bool isLog=false, QWidget *parent=0);
+ int addIntSlider(int minValue, int maxValue, int value, const char *name, int *valueRef, QWidget *parent=0);
+ int addFloatIntSlider(float minValue, float maxValue, float value, const char *name, float *valueRef, QWidget *parent=0);
+ int addComboBox(int value, const char * name, int *valueRef, int itemCount, QStrList *itemNames, QWidget *parent=0);
+ int addCheckBox(float value, const char * name, float *valueRef, QWidget *parent=0);
+ int addPushButton(const char * name, QWidget *parent=0);
+ int addEnvelope(float *delayRef, float *attackRef, float *holdRef,
+ float *decayRef, float *sustainRef, float *releaseRef, QWidget *parent=0);
+ int addMultiEnvelope(int envCount, float *timeScaleRef, float *attackRef, float *sustainRef, float *releaseRef, QWidget *parent=0);
+ int addLabel(QString label, QWidget *parent=0);
+ int addScopeScreen(float *timeScaleRef, int *modeRef, int *edgeRef, int *triggerModeRef,
+ float *triggerThrsRef, float *zoomRef, QWidget *parent=0);
+ int addSpectrumScreen(QWidget *parent=0);
+ int addTab(QWidget *tabPage, QString tabLabel);
+ QHBox *addHBox(QWidget *parent=0);
+ QVBox *addVBox(QWidget *parent=0);
+ int addLineEdit(QString lineName, QWidget *parent=0);
+ int initTabWidget();
+
+ signals:
+ void removeModuleClicked();
+
+ public slots:
+ void removeButtonClicked();
+};
+
+#endif
+
Added: ams/trunk/.#modularsynth.cpp.1.2
===================================================================
--- ams/trunk/.#modularsynth.cpp.1.2 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/.#modularsynth.cpp.1.2 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,2027 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <glob.h>
+#include <dlfcn.h>
+#include <qregexp.h>
+#include <qthread.h>
+#include <qwidget.h>
+#include <qstring.h>
+#include <qslider.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qvbox.h>
+#include <qpopupmenu.h>
+#include <qpointarray.h>
+#include <qmessagebox.h>
+#include <qsocketnotifier.h>
+#include <qfiledialog.h>
+#include <qmainwindow.h>
+#include <qimage.h>
+#include <qpen.h>
+#include <qscrollview.h>
+#include <qlistview.h>
+#include <alsa/asoundlib.h>
+#include <ladspa.h>
+#include <jack/jack.h>
+#include "modularsynth.h"
+#include "port.h"
+#include "midiwidget.h"
+#include "guiwidget.h"
+#include "midicontroller.h"
+#include "ladspadialog.h"
+
+ModularSynth::ModularSynth(int poly, int periodsize, QWidget *parent, const char *name)
+ : QScrollView(parent, name, Qt::WResizeNoErase | Qt::WRepaintNoErase | Qt::WStaticContents) {
+
+ firstPort = true;
+ connectingPort[0] = NULL;
+ connectingPort[1] = NULL;
+ connectorStyle = CONNECTOR_BEZIER;
+ aboutWidget = new QMessageBox(this);
+ mainWindow = (QMainWindow *)parent;
+ clientid = 0;
+ portid = 0;
+ jack_in_ports = 2;
+ jack_out_ports = 2;
+ synthdata = new SynthData(poly, periodsize);
+ midiWidget = new MidiWidget(synthdata, NULL);
+ midiWidget->setCaption("AlsaModularSynth Control Center");
+ synthdata->midiWidget = (QObject *)midiWidget;
+ guiWidget = new GuiWidget(synthdata, NULL);
+ guiWidget->setCaption("AlsaModularSynth Parameter View");
+ synthdata->guiWidget = (QObject *)guiWidget;
+ PCMname = DEFAULT_PCMNAME;
+ presetPath = "";
+ ladspaDialog = new LadspaDialog(synthdata, NULL);
+ QObject::connect(ladspaDialog, SIGNAL(createLadspaModule(int, int, bool, bool)),
+ this, SLOT(newM_ladspa(int, int, bool, bool)));
+ setPalette(QPalette(QColor(117, 67, 21), QColor(117, 67, 21)));
+ loadingPatch = false;
+}
+
+ModularSynth::~ModularSynth()
+{
+ delete synthdata;
+}
+
+void ModularSynth::viewportPaintEvent(QPaintEvent *pe) {
+
+ QPixmap pm(visibleWidth(), visibleHeight());
+ QPainter p(&pm);
+ QPen *pen;
+ QPointArray qpa(4);
+ int l1, l2;
+ Port *port[2];
+ int port_x[2], port_y[2];
+ QPoint port_pos[2];
+ int moduleX[2], moduleY[2];
+
+ pm.fill(QColor(130, 90, 25));
+ p.setPen(QColor(220, 216, 216));
+ pen = new QPen(QColor(220, 216, 216), 3);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ for (l2 = 0; l2 < listModule.at(l1)->portList.count(); l2++) {
+ port[0] = listModule.at(l1)->portList.at(l2);
+ if ((port[0]->dir == PORT_IN) && port[0]->connectedPortList.count()) {
+ port[1] = port[0]->connectedPortList.at(0);
+ port_pos[0] = port[0]->pos();
+ port_pos[1] = port[1]->pos();
+ contentsToViewport(childX(port[0]->parentModule), childY(port[0]->parentModule), moduleX[0], moduleY[0]);
+ contentsToViewport(childX(port[1]->parentModule), childY(port[1]->parentModule), moduleX[1], moduleY[1]);
+ port_x[0] = port_pos[0].x() + moduleX[0];
+ port_x[1] = port_pos[1].x() + port[1]->width() + moduleX[1];
+ port_y[0] = port_pos[0].y() + moduleY[0] + port[0]->height()/2;
+ port_y[1] = port_pos[1].y() + moduleY[1] + port[1]->height()/2;
+ if (connectorStyle == CONNECTOR_BEZIER) {
+ qpa.setPoint(0, port_x[0], port_y[0]);
+ qpa.setPoint(1, (port_x[1] - port_x[0]) / 2 + port_x[0],
+ (port_y[1] - port_y[0]) / 2 + port_y[0] + 50);
+ qpa.setPoint(2, port_x[1], port_y[1]);
+ qpa.setPoint(3, port_x[1], port_y[1]);
+ pen->setWidth(5);
+ pen->setColor(QColor(150, 140, 140));
+ p.setPen(*pen);
+ p.drawCubicBezier(qpa);
+ pen->setWidth(3);
+ pen->setColor(QColor(180, 170, 170));
+ p.setPen(*pen);
+ p.drawCubicBezier(qpa);
+ pen->setWidth(1);
+ pen->setColor(QColor(220, 216, 216));
+ p.setPen(*pen);
+ p.drawCubicBezier(qpa);
+ }
+ if (connectorStyle == CONNECTOR_STRAIGHT) {
+ p.drawLine(port_x[0], port_y[0], port_x[1], port_y[1]);
+ }
+ if (port[0]->parentModule->x() < port[1]->parentModule->x()) {
+ pen->setWidth(5);
+ pen->setColor(QColor(150, 140, 140));
+ p.setPen(*pen);
+ p.drawLine(port_x[0], port_y[0], port_x[0] - 5, port_y[0]);
+ pen->setWidth(3);
+ pen->setColor(QColor(180, 170, 170));
+ p.setPen(*pen);
+ p.drawLine(port_x[0], port_y[0], port_x[0] - 6, port_y[0]);
+ pen->setWidth(1);
+ pen->setColor(QColor(220, 216, 216));
+ p.setPen(*pen);
+ p.drawLine(port_x[0], port_y[0], port_x[0] - 7, port_y[0]);
+ }
+ if (port[1]->parentModule->x() > port[0]->parentModule->x()) {
+ pen->setWidth(5);
+ pen->setColor(QColor(150, 140, 140));
+ p.setPen(*pen);
+ p.drawLine(port_x[1], port_y[1], port_x[1] + 5, port_y[1]);
+ pen->setWidth(3);
+ pen->setColor(QColor(180, 170, 170));
+ p.setPen(*pen);
+ p.drawLine(port_x[1], port_y[1], port_x[1] + 6, port_y[1]);
+ pen->setWidth(1);
+ pen->setColor(QColor(220, 216, 216));
+ p.setPen(*pen);
+ p.drawLine(port_x[1], port_y[1], port_x[1] + 7, port_y[1]);
+ }
+ }
+ }
+ }
+ bitBlt(viewport(), 0, 0, &pm);
+ delete pen;
+}
+
+void ModularSynth::mousePressEvent(QMouseEvent *ev) {
+
+ switch (ev->button()) {
+ case Qt::LeftButton:
+ break;
+ case Qt::RightButton:
+ break;
+ case Qt::MidButton:
+ break;
+ default:
+ break;
+ }
+}
+
+void ModularSynth::mouseReleaseEvent(QMouseEvent *ev) {
+
+ switch (ev->button()) {
+ case Qt::LeftButton:
+ break;
+ case Qt::RightButton:
+ break;
+ case Qt::MidButton:
+ if (connectorStyle == CONNECTOR_STRAIGHT) {
+ connectorStyle = CONNECTOR_BEZIER;
+ } else {
+ connectorStyle = CONNECTOR_STRAIGHT;
+ }
+ repaintContents(false);
+ break;
+ default:
+ break;
+ }
+}
+
+QSize ModularSynth::sizeHint() const {
+
+ return QSize(SYNTH_MINIMUM_WIDTH, SYNTH_MINIMUM_HEIGHT);
+}
+
+QSizePolicy ModularSynth::sizePolicy() const {
+
+ return QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+}
+
+
+int ModularSynth::go(bool withJack) {
+
+ synthdata->seq_handle = open_seq();
+ initSeqNotifier();
+ if (withJack) {
+ synthdata->initJack(jack_in_ports, jack_out_ports);
+ synthdata->doSynthesis = true;
+ } else {
+ synth = new Synth(synthdata);
+ capture = new Capture(synthdata);
+ synthdata->doSynthesis = true;
+ synthdata->doCapture = false;
+ synth->start();
+ }
+ return(0);
+}
+
+void ModularSynth::displayAbout() {
+
+ aboutWidget->about(this, "About AlsaModularSynth", "AlsaModularSynth 1.6.0\n"
+ "by Matthias Nagorni\n"
+ "(c)2002-2003 SuSE AG Nuremberg\n\n"
+ "Documentation and examples can be found in\n"
+ "/usr/share/doc/packages/kalsatools\n\n"
+ "More presets and updates are available from\n"
+ "http://alsamodular.sourceforge.net"
+ "\n\nAcknowledgements\n"
+ "----------------------\n\n"
+ "The VCF Module uses the resonant low-pass filter by Paul Kellett\n"
+ "and the Cookbook formulae for audio EQ biquad filter coefficients\n"
+ "by Robert Bristow-Johnson. The experimental 24 dB Lowpass filters have\n"
+ "been taken from http://musicdsp.org. They are based on the CSound source\n"
+ "code, the paper by Stilson/Smith and modifications by Paul Kellett\n"
+ "and Timo Tossavainen. The pink noise conversion formula is by Paul\n"
+ "Kellett and has been taken from http://musicdsp.org as well.\n\n"
+ "The author is grateful to Takashi Iwai for instructions about ALSA.\n"
+ "Klaas Freitag, Helmut Herold, Stefan Hundhammer and Arvin Schnell\n"
+ "answered many questions about QT. Thanks to Jörg Arndt for valuable\n"
+ "hints regarding speed optimization. Torsten Rahn has helped to\n"
+ "improve the color scheme of the program. Thanks to Bernhard Kaindl\n"
+ "for helpful discussion. Fons Adriaensen has contributed patches for the\n"
+ "MCV and Spectrum View modules. He has also contributed many valuable ideas.\n");
+ aboutWidget->raise();
+}
+
+void ModularSynth::displayMidiController() {
+
+ midiWidget->show();
+ midiWidget->raise();
+}
+
+void ModularSynth::displayParameterView() {
+
+ guiWidget->show();
+ guiWidget->raise();
+}
+
+void ModularSynth::displayLadspaPlugins() {
+
+ ladspaDialog->show();
+ ladspaDialog->raise();
+}
+
+int ModularSynth::setPeriodsize(int p_periodsize){
+
+ synthdata->setPeriodsize(p_periodsize);
+ synthdata->setCycleSize(synthdata->periodsize); // TODO allow cyclesize < periodsize
+ fprintf(stderr, "Cyclesize: %d Periodsize: %d\n", synthdata->cyclesize, synthdata->periodsize);
+ return(0);
+}
+
+int ModularSynth::setPeriods(int p_periods){
+
+ synthdata->setPeriods(p_periods);
+ return(0);
+}
+
+int ModularSynth::setRate(int p_rate){
+
+ synthdata->setRate(p_rate);
+ return(0);
+}
+
+int ModularSynth::setChannels(int p_channels){
+
+ synthdata->setChannels(p_channels);
+ return(0);
+}
+
+int ModularSynth::setPCMname(QString p_name){
+
+ PCMname = p_name;
+ return(0);
+}
+
+int ModularSynth::setPresetPath(QString name) {
+
+ presetPath = name;
+ return(0);
+}
+
+int ModularSynth::setSavePath(QString name) {
+
+ savePath = name;
+ return(0);
+}
+
+snd_pcm_t *ModularSynth::open_pcm(bool openCapture) {
+
+ snd_pcm_t *pcm_handle;
+ snd_pcm_stream_t stream;
+ snd_pcm_hw_params_t *hwparams;
+ int buffersize_return;
+
+ stream = (openCapture) ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK;
+ if (snd_pcm_open(&pcm_handle, PCMname.latin1(), stream, 0) < 0) {
+ fprintf(stderr, "Error opening PCM device %s\n", PCMname.latin1());
+ exit(1);
+ }
+ snd_pcm_hw_params_alloca(&hwparams);
+ if (snd_pcm_hw_params_any(pcm_handle, hwparams) < 0) {
+ fprintf(stderr, "Can not configure this PCM device.\n");
+ exit(1);
+ }
+ if (snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) {
+ fprintf(stderr, "Error setting access.\n");
+ exit(1);
+ }
+ if (snd_pcm_hw_params_set_format(pcm_handle, hwparams, SND_PCM_FORMAT_S16_LE) < 0) {
+ fprintf(stderr, "Error setting format.\n");
+ exit(1);
+ }
+ if (snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, synthdata->rate, 0) < 0) {
+ fprintf(stderr, "Error setting rate.\n");
+ exit(1);
+ }
+ if (snd_pcm_hw_params_set_channels(pcm_handle, hwparams, synthdata->channels) < 0) {
+ fprintf(stderr, "Error setting channels.\n");
+ exit(1);
+ }
+ if (snd_pcm_hw_params_set_periods(pcm_handle, hwparams, synthdata->periods, 0) < 0) {
+ fprintf(stderr, "Error setting periods.\n");
+ exit(1);
+ }
+ if ((buffersize_return = snd_pcm_hw_params_set_buffer_size_near(pcm_handle, hwparams,
+ synthdata->periodsize * synthdata->periods)) < 0) {
+ fprintf(stderr, "Error setting buffersize.\n");
+ exit(1);
+ }
+ if (buffersize_return != synthdata->periodsize * synthdata->periods) {
+ fprintf(stderr, "Buffersize %d is not available on your hardware. Using %d instead.\n",
+ synthdata->periodsize, buffersize_return * synthdata->periods);
+ setPeriodsize(buffersize_return / synthdata->periods);
+ }
+ if (snd_pcm_hw_params(pcm_handle, hwparams) < 0) {
+ fprintf(stderr, "Error setting HW params.\n");
+ exit(1);
+ }
+ return(pcm_handle);
+}
+
+snd_seq_t *ModularSynth::open_seq() {
+
+ snd_seq_t *seq_handle;
+ int l1;
+ QString qs;
+
+ if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
+ fprintf(stderr, "Error opening ALSA sequencer.\n");
+ exit(1);
+ }
+ snd_seq_set_client_name(seq_handle, "AlsaModularSynth");
+ clientid = snd_seq_client_id(seq_handle);
+ if ((portid = snd_seq_create_simple_port(seq_handle, "ams",
+ SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE,
+ SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
+ fprintf(stderr, "Error creating sequencer port.\n");
+ exit(1);
+ }
+ for (l1 = 0; l1 < 2; l1++) {
+ if ((synthdata->midi_out_port[l1] = snd_seq_create_simple_port(seq_handle, "ams",
+ SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ,
+ SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
+ fprintf(stderr, "Error creating sequencer port.\n");
+ exit(1);
+ }
+ }
+ qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d", clientid, portid);
+ mainWindow->setCaption(qs);
+ synthdata->jackName.sprintf("ams_%d_%d", clientid, portid);
+ return(seq_handle);
+}
+
+int ModularSynth::initSeqNotifier() {
+
+ int alsaEventFd = 0;
+
+ struct pollfd pfd[1];
+ snd_seq_poll_descriptors(synthdata->seq_handle, pfd, 1, POLLIN);
+ alsaEventFd = pfd[0].fd;
+ seqNotifier = new QSocketNotifier(alsaEventFd, QSocketNotifier::Read);
+ QObject::connect(seqNotifier, SIGNAL(activated(int)),
+ this, SLOT(midiAction(int)));
+ return(0);
+}
+
+void ModularSynth::midiAction(int fd) {
+
+ snd_seq_event_t *ev;
+ QString qs;
+ int l1, l2, osc;
+ bool noteActive, foundOsc;
+ float min_e;
+ MidiController *midiController;
+
+ do {
+ snd_seq_event_input(synthdata->seq_handle, &ev);
+ if (midiWidget->isVisible()) {
+ if ((ev->type == SND_SEQ_EVENT_CONTROLLER)
+ ||(ev->type == SND_SEQ_EVENT_CONTROL14)
+ ||(ev->type == SND_SEQ_EVENT_PITCHBEND)) {
+ MidiController *midiController = new MidiController();
+ midiController->type = ev->type;
+ midiController->ch = ev->data.control.channel;
+ midiController->param = (ev->type==SND_SEQ_EVENT_PITCHBEND)
+ ? 0 : ev->data.control.param;
+ if (!midiWidget->midiControllerList.contains(midiController)) {
+ midiWidget->addMidiController(midiController);
+ } else {
+ delete midiController;
+ }
+ }
+ if (midiWidget->noteControllerEnabled &&((ev->type == SND_SEQ_EVENT_NOTEON)
+ ||(ev->type == SND_SEQ_EVENT_NOTEOFF))) {
+ MidiController *midiController = new MidiController();
+ midiController->type = ev->type;
+ midiController->ch = ev->data.control.channel;
+ midiController->param = ev->data.note.note;
+ if (!midiWidget->midiControllerList.contains(midiController)) {
+ midiWidget->addMidiController(midiController);
+ } else {
+ delete midiController;
+ }
+ }
+ }
+ if (midiWidget->followMidi) {
+ for(l1 = 0; l1 < midiWidget->midiControllerList.count(); l1++) {
+ midiController = midiWidget->midiControllerList.at(l1);
+ if ((midiController->type == ev->type)
+ &&(midiController->ch == ev->data.control.channel)) {
+ if (ev->type == SND_SEQ_EVENT_PITCHBEND) {
+ emit midiController->sendMidiValue((ev->data.control.value + 8192) / 128);
+ midiWidget->setSelectedController(midiController);
+ }
+ if ((ev->type == SND_SEQ_EVENT_CONTROL14)
+ && (midiController->param == ev->data.control.param)) {
+ emit midiController->sendMidiValue(ev->data.control.value / 128);
+ midiWidget->setSelectedController(midiController);
+ }
+ if ((ev->type == SND_SEQ_EVENT_CONTROLLER)
+ && (midiController->param == ev->data.control.param)) {
+ emit midiController->sendMidiValue(ev->data.control.value);
+ midiWidget->setSelectedController(midiController);
+ }
+ if ((ev->type == SND_SEQ_EVENT_NOTEON)
+ && (midiController->param == ev->data.note.note)) {
+ emit midiController->sendMidiValue(ev->data.note.velocity);
+ midiWidget->setSelectedController(midiController);
+ }
+ if ((ev->type == SND_SEQ_EVENT_NOTEOFF)
+ && (midiController->param == ev->data.note.note)) {
+ emit midiController->sendMidiValue(0);
+ midiWidget->setSelectedController(midiController);
+ }
+ }
+ }
+ } else {
+ for(l1 = 0; l1 < midiWidget->midiControllerList.count(); l1++) {
+ midiController = midiWidget->midiControllerList.at(l1);
+ if ((midiController->type == ev->type)
+ &&(midiController->ch == ev->data.control.channel)) {
+ if (ev->type == SND_SEQ_EVENT_PITCHBEND) {
+ emit midiController->sendMidiValue((ev->data.control.value + 8192) / 128);
+ }
+ if ((ev->type == SND_SEQ_EVENT_CONTROL14)
+ && (midiController->param == ev->data.control.param)) {
+ emit midiController->sendMidiValue(ev->data.control.value / 128);
+ }
+ if ((ev->type == SND_SEQ_EVENT_CONTROLLER)
+ && (midiController->param == ev->data.control.param)) {
+ emit midiController->sendMidiValue(ev->data.control.value);
+ }
+ if ((ev->type == SND_SEQ_EVENT_NOTEON)
+ && (midiController->param == ev->data.note.note)) {
+ emit midiController->sendMidiValue(ev->data.note.velocity);
+ }
+ if ((ev->type == SND_SEQ_EVENT_NOTEOFF)
+ && (midiController->param == ev->data.note.note)) {
+ emit midiController->sendMidiValue(0);
+ }
+ }
+ }
+ }
+ if (((ev->type == SND_SEQ_EVENT_NOTEON) || (ev->type == SND_SEQ_EVENT_NOTEOFF))
+ && ((synthdata->midiChannel < 0) || (synthdata->midiChannel == ev->data.control.channel))) {
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ noteActive = false;
+ for (l1 = 0; l1 < synthdata->listM_env.count(); l1++) {
+ if (((M_env *)synthdata->listM_env.at(l1))->noteActive[l2]) {
+ noteActive = true;
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_vcenv.count(); l1++) {
+ if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->noteActive[l2]) {
+ noteActive = true;
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_advenv.count(); l1++) {
+ if (((M_advenv *)synthdata->listM_advenv.at(l1))->noteActive[l2]) {
+ noteActive = true;
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_dynamicwaves.count(); l1++) {
+ if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->noteActive[l2]) {
+ noteActive = true;
+ }
+ }
+ synthdata->noteActive[l2] = noteActive || synthdata->notePressed[l2];
+ }
+ if ((ev->type == SND_SEQ_EVENT_NOTEON) && (ev->data.note.velocity > 0)) {
+ foundOsc = false;
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ if (!synthdata->noteActive[l2]) {
+ foundOsc = true;
+ synthdata->noteActive[l2] = true;
+ synthdata->notePressed[l2] = true;
+ synthdata->velocity[l2] = ev->data.note.velocity;
+ synthdata->channel[l2] = ev->data.note.channel;
+ synthdata->notes[l2] = ev->data.note.note;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ listModule.at(l1)->noteOnEvent(l2);
+ }
+ break;
+ }
+ }
+ if ((synthdata->listM_advenv.count()
+ || synthdata->listM_env.count()
+ || synthdata->listM_vcenv.count()
+ || synthdata->listM_dynamicwaves.count())
+ && !foundOsc) {
+ min_e = 1.0;
+ osc = 0;
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ for (l1 = 0; l1 < synthdata->listM_dynamicwaves.count(); l1++) {
+ if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->noteActive[l2]) {
+ if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->e[l2][0] < min_e) {
+ min_e = ((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->e[l2][0];
+ osc = l2;
+ }
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_env.count(); l1++) {
+ if (((M_env *)synthdata->listM_env.at(l1))->noteActive[l2]) {
+ if (((M_env *)synthdata->listM_env.at(l1))->e[l2] < min_e) {
+ min_e = ((M_env *)synthdata->listM_env.at(l1))->e[l2];
+ osc = l2;
+ }
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_vcenv.count(); l1++) {
+ if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->noteActive[l2]) {
+ if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->e[l2] < min_e) {
+ min_e = ((M_vcenv *)synthdata->listM_vcenv.at(l1))->e[l2];
+ osc = l2;
+ }
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_advenv.count(); l1++) {
+ if (((M_advenv *)synthdata->listM_advenv.at(l1))->noteActive[l2]) {
+ if (((M_advenv *)synthdata->listM_advenv.at(l1))->e[l2] < min_e) {
+ min_e = ((M_advenv *)synthdata->listM_advenv.at(l1))->e[l2];
+ osc = l2;
+ }
+ }
+ }
+ }
+ synthdata->noteActive[osc] = true;
+ synthdata->notePressed[osc] = true;
+ synthdata->velocity[osc] = ev->data.note.velocity;
+ synthdata->channel[osc] = ev->data.note.channel;
+ synthdata->notes[osc] = ev->data.note.note;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ listModule.at(l1)->noteOnEvent(osc);
+ }
+ }
+ } else {
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ if ((synthdata->notes[l2] == ev->data.note.note)
+ && (synthdata->channel[l2] == ev->data.note.channel)) {
+ synthdata->notePressed[l2] = false;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ listModule.at(l1)->noteOffEvent(l2);
+ }
+ }
+ }
+ }
+ }
+ if ((ev->type == SND_SEQ_EVENT_CONTROLLER) && (ev->data.control.param == MIDI_CTL_ALL_NOTES_OFF)) {
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ if (synthdata->notePressed[l2] && (synthdata->channel[l2] == ev->data.note.channel)) {
+ synthdata->notePressed[l2] = false;
+ synthdata->noteActive[l2] = false;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ listModule.at(l1)->noteOffEvent(l2);
+ }
+ }
+ }
+ }
+ if (ev->type == SND_SEQ_EVENT_PGMCHANGE) {
+ guiWidget->setCurrentPreset(ev->data.control.value);
+ }
+ for (l1 = 0; l1 < synthdata->listM_advmcv.count(); l1++) {
+ switch (ev->type) {
+ case SND_SEQ_EVENT_CHANPRESS:
+ ((M_advmcv *)synthdata->listM_advmcv.at(l1))->aftertouchEvent(ev->data.note.channel, ev->data.control.value);
+ break;
+ case SND_SEQ_EVENT_PITCHBEND:
+ ((M_advmcv *)synthdata->listM_advmcv.at(l1))->pitchbendEvent(ev->data.note.channel, ev->data.control.value);
+ break;
+ case SND_SEQ_EVENT_CONTROLLER:
+ ((M_advmcv *)synthdata->listM_advmcv.at(l1))->controllerEvent(ev->data.note.channel, ev->data.control.param, ev->data.control.value);
+ break;
+ }
+ }
+ snd_seq_free_event(ev);
+ } while (snd_seq_event_input_pending(synthdata->seq_handle, 0) > 0);
+}
+
+void ModularSynth::initPorts(Module *m) {
+
+ int l1;
+
+ for (l1 = 0; l1 < m->portList.count(); l1++) {
+ QObject::connect(m->portList.at(l1), SIGNAL(portClicked()),
+ this, SLOT(portSelected()));
+ QObject::connect(m->portList.at(l1), SIGNAL(portDisconnected()),
+ this, SLOT(updatePortConnections()));
+ }
+}
+
+void ModularSynth::initNewModule(Module *m) {
+
+ int cx, cy;
+
+ addChild(m);
+ viewportToContents((visibleWidth()-m->width())>>1, (visibleHeight()-m->height())>>1, cx, cy);
+ moveChild(m, cx, cy);
+ m->show();
+ QObject::connect(m, SIGNAL(dragged(QPoint)), this, SLOT(moveModule(QPoint)));
+ QObject::connect(m, SIGNAL(removeModule()), this, SLOT(deleteModule()));
+ listModule.append(m);
+ if (!loadingPatch) {
+ midiWidget->addModule(m);
+ }
+ initPorts(m);
+}
+
+void ModularSynth::new_textEdit() {
+
+ int cx, cy;
+
+ TextEdit *te = new TextEdit(viewport(), "textEdit", synthdata);
+ addChild(te);
+ viewportToContents((visibleWidth()-te->width())>>1, (visibleHeight()-te->height())>>1, cx, cy);
+ moveChild(te, cx, cy);
+ te->show();
+ QObject::connect(te, SIGNAL(dragged(QPoint)), this, SLOT(moveTextEdit(QPoint)));
+ QObject::connect(te, SIGNAL(sizeDragged(QPoint)), this, SLOT(resizeTextEdit(QPoint)));
+ QObject::connect(te, SIGNAL(removeTextEdit()), this, SLOT(deleteTextEdit()));
+ listTextEdit.append(te);
+}
+
+void ModularSynth::new_textEdit(int x, int y, int w, int h) {
+
+ TextEdit *te = new TextEdit(viewport(), "textEdit", synthdata);
+ addChild(te);
+ te->setFixedSize(w, h);
+ moveChild(te, x, y);
+ te->show();
+ QObject::connect(te, SIGNAL(dragged(QPoint)), this, SLOT(moveTextEdit(QPoint)));
+ QObject::connect(te, SIGNAL(sizeDragged(QPoint)), this, SLOT(resizeTextEdit(QPoint)));
+ QObject::connect(te, SIGNAL(removeTextEdit()), this, SLOT(deleteTextEdit()));
+ listTextEdit.append(te);
+}
+
+void ModularSynth::startSynth() {
+
+ if (!synthdata->withJack) {
+ synthdata->doSynthesis = true;
+ if (!synth->running()) {
+ synth->start();
+ }
+ if (synthdata->moduleInCount) {
+ synthdata->doCapture = true;
+ if (!capture->running()) {
+ capture->start();
+ }
+ }
+ } else {
+ synthdata->doSynthesis = true;
+// if (!synthdata->jackRunning && (synthdata->jackOutCount + synthdata->jackInCount > 0)) {
+// synthdata->activateJack();
+// }
+ }
+}
+
+void ModularSynth::stopSynth() {
+
+ synthdata->doSynthesis = false;
+ synthdata->doCapture = false;
+// if (synthdata->withJack) {
+// synthdata->deactivateJack();
+// }
+}
+
+void ModularSynth::newM_seq(int seqLen) {
+
+ M_seq *m = new M_seq(seqLen, viewport(), "M_seq", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_seq_8() {
+
+ newM_seq(8);
+}
+
+void ModularSynth::newM_seq_12() {
+
+ newM_seq(12);
+}
+
+void ModularSynth::newM_seq_16() {
+
+ newM_seq(16);
+}
+
+void ModularSynth::newM_seq_24() {
+
+ newM_seq(24);
+}
+
+void ModularSynth::newM_seq_32() {
+
+ newM_seq(32);
+}
+
+void ModularSynth::newM_vcorgan(int oscCount) {
+
+ M_vcorgan *m = new M_vcorgan(oscCount, viewport(), "M_vcorgan", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcorgan_4() {
+
+ newM_vcorgan(4);
+}
+
+void ModularSynth::newM_vcorgan_6() {
+
+ newM_vcorgan(6);
+}
+
+void ModularSynth::newM_vcorgan_8() {
+
+ newM_vcorgan(8);
+}
+
+void ModularSynth::newM_dynamicwaves(int oscCount) {
+
+ M_dynamicwaves *m = new M_dynamicwaves(oscCount, viewport(), "M_dynamicwaves", synthdata);
+ synthdata->listM_dynamicwaves.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_dynamicwaves_4() {
+
+ newM_dynamicwaves(4);
+}
+
+void ModularSynth::newM_dynamicwaves_6() {
+
+ newM_dynamicwaves(6);
+}
+
+void ModularSynth::newM_dynamicwaves_8() {
+
+ newM_dynamicwaves(8);
+}
+
+void ModularSynth::newM_mcv() {
+
+ M_mcv *m = new M_mcv(viewport(), "M_mcv", synthdata);
+ synthdata->listM_mcv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_advmcv() {
+
+ M_advmcv *m = new M_advmcv(viewport(), "M_advmcv", synthdata);
+ synthdata->listM_advmcv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scmcv() {
+
+ M_scmcv *m = new M_scmcv(viewport(), "M_scmcv", synthdata);
+ synthdata->listM_scmcv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scmcv(QString *p_scalaName) {
+
+ M_scmcv *m = new M_scmcv(viewport(), "M_scmcv", synthdata, p_scalaName);
+ synthdata->listM_scmcv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_env() {
+
+ M_env *m = new M_env(viewport(), "M_env", synthdata);
+ synthdata->listM_env.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcenv() {
+
+ M_vcenv *m = new M_vcenv(viewport(), "M_vcenv", synthdata);
+ synthdata->listM_vcenv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_advenv() {
+
+ M_advenv *m = new M_advenv(viewport(), "M_advenv", synthdata);
+ synthdata->listM_advenv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vco() {
+
+ M_vco *m = new M_vco(viewport(), "M_vco", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vca_lin() {
+
+ M_vca *m = new M_vca(false, viewport(), "M_vca", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vca_exp() {
+
+ M_vca *m = new M_vca(true, viewport(), "M_vca", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_lfo() {
+
+ M_lfo *m = new M_lfo(viewport(), "M_lfo", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_noise() {
+
+ M_noise *m = new M_noise(viewport(), "M_noise", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_ringmod() {
+
+ M_ringmod *m = new M_ringmod(viewport(), "M_ringmod", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_inv() {
+
+ M_inv *m = new M_inv(viewport(), "M_inv", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_conv() {
+
+ M_conv *m = new M_conv(viewport(), "M_conv", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_cvs() {
+
+ M_cvs *m = new M_cvs(viewport(), "M_cvs", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_sh() {
+
+ M_sh *m = new M_sh(viewport(), "M_sh", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcswitch() {
+
+ M_vcswitch *m = new M_vcswitch(viewport(), "M_vcswitch", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_slew() {
+
+ M_slew *m = new M_slew(viewport(), "M_slew", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_quantizer() {
+
+ M_quantizer *m = new M_quantizer(viewport(), "M_quantizer", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scquantizer(QString *p_scalaName) {
+
+ M_scquantizer *m = new M_scquantizer(viewport(), "M_scquantizer", synthdata, p_scalaName);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scquantizer() {
+
+ M_scquantizer *m = new M_scquantizer(viewport(), "M_scquantizer", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_delay() {
+
+ M_delay *m = new M_delay(viewport(), "M_delay", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_mix(int in_channels) {
+
+ M_mix *m = new M_mix(in_channels, viewport(), "M_mix", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_stereomix(int in_channels) {
+
+ M_stereomix *m = new M_stereomix(in_channels, viewport(), "M_stereomix", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_mix_2() {
+
+ newM_mix(2);
+}
+
+void ModularSynth::newM_mix_4() {
+
+ newM_mix(4);
+}
+
+void ModularSynth::newM_mix_8() {
+
+ newM_mix(8);
+}
+
+void ModularSynth::newM_stereomix_2() {
+
+ newM_stereomix(2);
+}
+
+void ModularSynth::newM_stereomix_4() {
+
+ newM_stereomix(4);
+}
+
+void ModularSynth::newM_stereomix_8() {
+
+ newM_stereomix(8);
+}
+
+void ModularSynth::newM_ladspa(int p_ladspaDesFuncIndex, int n, bool p_newLadspaPoly, bool p_extCtrlPorts) {
+
+ QString qs;
+
+ qs.sprintf("%s", synthdata->ladspa_dsc_func_list[p_ladspaDesFuncIndex](n)->Name);
+ M_ladspa *m = new M_ladspa(viewport(), "M_ladspa", synthdata, p_ladspaDesFuncIndex, n, p_newLadspaPoly, p_extCtrlPorts);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_out() {
+
+ if (!synthdata->moduleOutCount) {
+ synthdata->pcm_handle = open_pcm(false);
+ }
+ M_out *m = new M_out(viewport(), "M_out", synthdata);
+ synthdata->outModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+ synthdata->moduleOutCount++;
+}
+
+void ModularSynth::newM_wavout() {
+
+ M_wavout *m = new M_wavout(viewport(), "M_wavout", synthdata);
+ synthdata->wavoutModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_midiout() {
+
+ M_midiout *m = new M_midiout(viewport(), "M_midiout", synthdata);
+ synthdata->midioutModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_jackout() {
+
+ M_jackout *m = new M_jackout(viewport(), "M_jackout", synthdata);
+ synthdata->jackoutModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+ synthdata->jackOutCount++;
+// if (!synthdata->jackRunning) {
+// synthdata->activateJack();
+// }
+}
+void ModularSynth::newM_jackin() {
+
+ M_jackin *m = new M_jackin(viewport(), "M_jackin", synthdata);
+ synthdata->jackinModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+ synthdata->jackInCount++;
+// if (!synthdata->jackRunning) {
+// synthdata->activateJack();
+// }
+}
+
+void ModularSynth::newM_scope() {
+
+ M_scope *m = new M_scope(viewport(), "M_scope", synthdata);
+ synthdata->scopeModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_spectrum() {
+
+ M_spectrum *m = new M_spectrum(viewport(), "M_spectrum", synthdata);
+ synthdata->spectrumModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_in() {
+
+ if (!synthdata->moduleInCount) {
+ synthdata->pcm_capture_handle = open_pcm(true);
+ synthdata->doCapture = synthdata->doSynthesis;
+ if (!capture->running()) {
+ capture->start();
+ }
+ }
+ synthdata->moduleInCount++;
+ M_in *m = new M_in(viewport(), "M_in", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcf() {
+
+ M_vcf *m = new M_vcf(viewport(), "M_vcf", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::moveModule(QPoint pos) {
+
+ int l1;
+ Module *m;
+ int cx, cy;
+
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if ((m=listModule.at(l1)) == sender()) {
+ viewportToContents(pos.x() - m->getMousePressPos().x() + m->pos().x(),
+ pos.y() - m->getMousePressPos().y() + m->pos().y(),
+ cx, cy);
+ moveChild(m, cx, cy);
+ }
+ }
+}
+
+void ModularSynth::moveTextEdit(QPoint pos) {
+
+ int l1;
+ TextEdit *te;
+ int cx, cy;
+
+ for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+ if ((te=listTextEdit.at(l1)) == sender()) {
+ viewportToContents(pos.x() - te->getMousePressPos().x() + te->pos().x(),
+ pos.y() - te->getMousePressPos().y() + te->pos().y(),
+ cx, cy);
+ moveChild(te, cx, cy);
+ }
+ }
+}
+
+void ModularSynth::resizeTextEdit(QPoint pos) {
+
+ int l1;
+ TextEdit *te;
+ int cx, cy;
+
+ for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+ if ((te=listTextEdit.at(l1)) == sender()) {
+ cx = pos.x();
+ cy = pos.y();
+ if ((cx > 200) && (cy > 170)) {
+ te->setFixedSize(cx + 3, cy + 3);
+ }
+ }
+ }
+}
+
+void ModularSynth::portSelected() {
+
+ if (firstPort) {
+ firstPort = false;
+ connectingPort[0] = (Port *)sender();
+ connectingPort[0]->highlighted = true;
+ connectingPort[0]->repaint(false);
+ } else {
+ firstPort = true;
+ connectingPort[1] = (Port *)sender();
+ connectingPort[0]->highlighted = false;
+ connectingPort[0]->repaint(false);
+ connectingPort[1]->highlighted = false;
+ connectingPort[1]->repaint(false);
+ if ((((connectingPort[0]->dir == PORT_IN) && (connectingPort[1]->dir == PORT_OUT))
+ ||((connectingPort[1]->dir == PORT_IN) && (connectingPort[0]->dir == PORT_OUT)))
+ && (connectingPort[0]->parentModule != connectingPort[1]->parentModule)) {
+ connectingPort[0]->connectTo(connectingPort[1]);
+ connectingPort[1]->connectTo(connectingPort[0]);
+ repaintContents(false);
+ } else {
+ printf("Connection refused.\n");
+ connectingPort[0] = NULL;
+ connectingPort[1] = NULL;
+ }
+ }
+}
+
+void ModularSynth::updatePortConnections() {
+
+ repaintContents(false);
+}
+
+void ModularSynth::deleteModule() {
+
+ Module *m;
+
+ connectingPort[0] = NULL;
+ connectingPort[1] = NULL;
+ firstPort = true;
+ m = (Module *)sender();
+ midiWidget->deleteModule(m);
+ if (m->M_type == M_type_env) {
+ synthdata->listM_env.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_vcenv) {
+ synthdata->listM_vcenv.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_advenv) {
+ synthdata->listM_advenv.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_dynamicwaves) {
+ synthdata->listM_dynamicwaves.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_mcv) {
+ synthdata->listM_mcv.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_advmcv) {
+ synthdata->listM_advmcv.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_out) {
+ synthdata->moduleOutCount--;
+ if (!synthdata->moduleOutCount) {
+ sleep(1);
+ snd_pcm_close(synthdata->pcm_handle);
+ }
+ synthdata->outModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_jackout) {
+ synthdata->jackOutCount--;
+// if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+// synthdata->deactivateJack();
+// }
+ synthdata->jackoutModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_jackin) {
+ synthdata->jackInCount--;
+// if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+// synthdata->deactivateJack();
+// }
+ synthdata->jackinModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_wavout) {
+ synthdata->wavoutModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_midiout) {
+ synthdata->midioutModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_scope) {
+ synthdata->scopeModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_spectrum) {
+ synthdata->spectrumModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_in) {
+ synthdata->moduleInCount--;
+ if (!synthdata->moduleInCount) {
+ synthdata->doCapture = false;
+ sleep(1);
+ snd_pcm_close(synthdata->pcm_capture_handle);
+ }
+ }
+ listModule.removeRef(m);
+ delete(m);
+}
+
+void ModularSynth::deleteTextEdit() {
+
+ listTextEdit.removeRef((TextEdit *)sender());
+ delete((TextEdit *)sender());
+}
+
+void ModularSynth::deleteTextEdit(TextEdit *te) {
+
+ delete(te);
+}
+
+void ModularSynth::deleteModule(Module *m) {
+
+ midiWidget->deleteModule(m);
+ if (m->M_type == M_type_env) {
+ synthdata->listM_env.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_vcenv) {
+ synthdata->listM_vcenv.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_advenv) {
+ synthdata->listM_advenv.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_dynamicwaves) {
+ synthdata->listM_dynamicwaves.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_mcv) {
+ synthdata->listM_mcv.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_advmcv) {
+ synthdata->listM_advmcv.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_out) {
+ synthdata->moduleOutCount--;
+ if (!synthdata->moduleOutCount) {
+ sleep(1);
+ snd_pcm_close(synthdata->pcm_handle);
+ }
+ synthdata->outModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_jackout) {
+ synthdata->jackOutCount--;
+// if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+// synthdata->deactivateJack();
+// }
+ synthdata->jackoutModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_jackin) {
+ synthdata->jackInCount--;
+// if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+// synthdata->deactivateJack();
+// }
+ synthdata->jackinModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_wavout) {
+ synthdata->wavoutModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_midiout) {
+ synthdata->midioutModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_scope) {
+ synthdata->scopeModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_spectrum) {
+ synthdata->spectrumModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_in) {
+ synthdata->moduleInCount--;
+ if (!synthdata->moduleInCount) {
+ synthdata->doCapture = false;
+ sleep(1);
+ snd_pcm_close(synthdata->pcm_capture_handle);
+ }
+ }
+ delete(m);
+}
+
+void ModularSynth::clearConfig() {
+
+ int l1;
+ bool restartSynth;
+ QString qs;
+
+ qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d", clientid, portid);
+ mainWindow->setCaption(qs);
+ restartSynth = synthdata->doSynthesis;
+ synthdata->doSynthesis = false;
+ synthdata->doCapture = false;
+ if (!synthdata->withJack) {
+ while(synth->running()) {
+ sleep(1);
+ }
+ } else {
+// synthdata->deactivateJack();
+// sleep(1);
+ }
+ guiWidget->clearGui();
+// delete guiWidget;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ deleteModule(listModule.at(l1));
+ }
+ listModule.clear();
+ for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+ deleteTextEdit(listTextEdit.at(l1));
+ }
+ listTextEdit.clear();
+ synthdata->moduleID = 0;
+ synthdata->moduleCount = 0;
+// guiWidget = new GuiWidget(synthdata, NULL);
+// guiWidget->setCaption("AlsaModularSynth Parameter View");
+// synthdata->guiWidget = (QObject *)guiWidget;
+ if (restartSynth) {
+ synthdata->doSynthesis = true;
+ if (!synthdata->withJack) {
+ if (!synth->running()) {
+ synth->start();
+ } else {
+ fprintf(stderr, "Audio thread is already running...\n");
+ }
+ if (synthdata->moduleInCount) {
+ synthdata->doCapture = true;
+ if (!capture->running()) {
+ capture->start();
+ } else {
+ fprintf(stderr, "Capture thread is already running...\n");
+ }
+ }
+ }
+ }
+}
+
+void ModularSynth::load() {
+
+ QString config_fn;
+
+ if (presetPath.isEmpty()) {
+ if (!(config_fn = QString(QFileDialog::getOpenFileName(QString::null, "AlsaModularSynth files (*.ams)")))) {
+ return;
+ }
+ } else {
+ if (!(config_fn = QString(QFileDialog::getOpenFileName(presetPath, "AlsaModularSynth files (*.ams)")))) {
+ return;
+ }
+ }
+ load(&config_fn);
+}
+
+void ModularSynth::load(QString *presetName) {
+
+ int l1, l2;
+ int M_type, moduleID, index, value, x, y, w, h, subID1, subID2;
+ int index1, index2, moduleID1, moduleID2, midiSign;
+ int index_read1, index_read2, moduleID_read1, moduleID_read2;
+ int type, ch, param, isLogInt, midiIndex, sliderMin, sliderMax;
+ FILE *f;
+ QString config_fn, qs, qs2, ladspaLibName, pluginName, para, scalaName;
+ char sc[2048];
+ bool restartSynth, isLog, ladspaLoadErr, commentFlag, followConfig;
+ int newLadspaPolyFlag, textEditID;
+ Module *m;
+ int currentProgram;
+
+ restartSynth = synthdata->doSynthesis;
+ synthdata->doSynthesis = false;
+ followConfig = midiWidget->followConfig;
+ midiWidget->followConfig = false;
+ config_fn = *presetName;
+ currentProgram = -1;
+ if (!(f = fopen(config_fn, "r"))) {
+ QMessageBox::information( this, "AlsaModularSynth", "Could not open file.");
+ } else {
+ clearConfig();
+ qs2 = config_fn.mid(config_fn.findRev('/') + 1);
+ qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d - %s", clientid, portid, qs2.latin1());
+ mainWindow->setCaption(qs);
+ ladspaLoadErr = false;
+ commentFlag = false;
+ loadingPatch = true;
+ while(fscanf(f, "%s", sc) != EOF) {
+ qs = QString(sc);
+ if (qs.contains("#PARA#", false)) {
+ commentFlag = true;
+ }
+ if (qs.contains("#ARAP#", false)) {
+ commentFlag = false;
+ }
+ if (qs.contains("Module", false) && !commentFlag) {
+ fscanf(f, "%d", &M_type);
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &x);
+ fscanf(f, "%d", &y);
+ switch ((M_typeEnum)M_type) {
+ case M_type_ladspa:
+ fscanf(f, "%d", &newLadspaPolyFlag);
+ fscanf(f, "%s", sc);
+ ladspaLibName = QString(sc);
+ fgets(sc, 2048, f);
+ sc[strlen(sc)-1] = '\0';
+ pluginName = QString(sc+1);
+ fprintf(stderr, "Loading LADSPA plugin \"%s\" from library \"%s\".\n", pluginName.latin1(), ladspaLibName.latin1());
+ if (!synthdata->getLadspaIDs(ladspaLibName, pluginName, &subID1, &subID2)) {
+ sprintf(sc, "Could not find LADSPA plugin \"%s\" from library \"%s\".\n", pluginName.latin1(), ladspaLibName.latin1());
+ QMessageBox::information( this, "AlsaModularSynth", QString(sc));
+ ladspaLoadErr = true;
+ }
+ break;
+ case M_type_scquantizer:
+ fscanf(f, "%s", &sc);
+ scalaName = QString(sc);
+ break;
+ case M_type_scmcv:
+ fscanf(f, "%s", &sc);
+ scalaName = QString(sc);
+ break;
+ default:
+ fscanf(f, "%d", &subID1);
+ fscanf(f, "%d", &subID2);
+ break;
+ }
+ switch((M_typeEnum)M_type) {
+ case M_type_custom:
+ break;
+ case M_type_vco:
+ newM_vco();
+ break;
+ case M_type_vca:
+ if (subID1) {
+ newM_vca_exp();
+ } else {
+ newM_vca_lin();
+ }
+ break;
+ case M_type_vcf:
+ newM_vcf();
+ break;
+ case M_type_lfo:
+ newM_lfo();
+ break;
+ case M_type_noise:
+ newM_noise();
+ break;
+ case M_type_delay:
+ newM_delay();
+ break;
+ case M_type_seq:
+ newM_seq(subID1);
+ break;
+ case M_type_env:
+ newM_env();
+ break;
+ case M_type_vcenv:
+ newM_vcenv();
+ break;
+ case M_type_advenv:
+ newM_advenv();
+ break;
+ case M_type_mcv:
+ newM_mcv();
+ break;
+ case M_type_advmcv:
+ newM_advmcv();
+ break;
+ case M_type_scmcv:
+ newM_scmcv(&scalaName);
+ break;
+ case M_type_ringmod:
+ newM_ringmod();
+ break;
+ case M_type_inv:
+ newM_inv();
+ break;
+ case M_type_conv:
+ newM_conv();
+ break;
+ case M_type_sh:
+ newM_sh();
+ break;
+ case M_type_vcswitch:
+ newM_vcswitch();
+ break;
+ case M_type_cvs:
+ newM_cvs();
+ break;
+ case M_type_slew:
+ newM_slew();
+ break;
+ case M_type_quantizer:
+ newM_quantizer();
+ break;
+ case M_type_scquantizer:
+ newM_scquantizer(&scalaName);
+ break;
+ case M_type_mix:
+ newM_mix(subID1);
+ break;
+ case M_type_stereomix:
+ newM_stereomix(subID1);
+ break;
+ case M_type_vcorgan:
+ newM_vcorgan(subID1);
+ break;
+ case M_type_dynamicwaves:
+ newM_dynamicwaves(subID1);
+ break;
+ case M_type_ladspa:
+ if (!ladspaLoadErr) {
+ newM_ladspa(subID1, subID2, newLadspaPolyFlag & 2, newLadspaPolyFlag & 1);
+ }
+ break;
+ case M_type_out:
+ if (synthdata->withJack) {
+ newM_jackout();
+ } else {
+ newM_out();
+ }
+ break;
+ case M_type_jackout:
+ if (synthdata->withJack) {
+ newM_jackout();
+ } else {
+ newM_out();
+ }
+ break;
+ case M_type_jackin:
+ if (synthdata->withJack) {
+ newM_jackin();
+ } else {
+ newM_in();
+ }
+ break;
+ case M_type_wavout:
+ newM_wavout();
+ break;
+ case M_type_midiout:
+ newM_midiout();
+ break;
+ case M_type_scope:
+ newM_scope();
+ break;
+ case M_type_spectrum:
+ newM_spectrum();
+ break;
+ case M_type_in:
+ if (synthdata->withJack) {
+ newM_jackin();
+ } else {
+ newM_in();
+ }
+ break;
+ }
+ m = listModule.at(listModule.count()-1);
+ moveChild(m, x, y);
+ m->moduleID=moduleID;
+ qs = m->configDialog->caption();
+ qs2 = qs.left(qs.findRev(" "));
+ qs.sprintf(" %d", moduleID);
+ m->configDialog->setCaption(qs2+qs);
+ midiWidget->addModule(m);
+ if (synthdata->moduleID <= moduleID) {
+ synthdata->moduleID = moduleID+1;
+ }
+ }
+ if (qs.contains("Comment", false) && !commentFlag) {
+ fscanf(f, "%d", &textEditID);
+ fscanf(f, "%d", &textEditID); // TODO textEditID is not needed yet
+ fscanf(f, "%d", &x);
+ fscanf(f, "%d", &y);
+ fscanf(f, "%d", &w);
+ fscanf(f, "%d", &h);
+ new_textEdit(x, y, w, h);
+ }
+ }
+ rewind(f);
+ while((fscanf(f, "%s", sc) != EOF) && !ladspaLoadErr) {
+ qs = QString(sc);
+ if (qs.contains("Port", false)) {
+ fscanf(f, "%d", &index1);
+ fscanf(f, "%d", &index2);
+ fscanf(f, "%d", &moduleID1);
+ fscanf(f, "%d", &moduleID2);
+ moduleID_read1 = 0;
+ moduleID_read2 = 0;
+ index_read1 = 0;
+ index_read2 = 0;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID1) {
+ moduleID_read1 = l1;
+ }
+ if (listModule.at(l1)->moduleID == moduleID2) {
+ moduleID_read2 = l1;
+ }
+ }
+ for (l1 = 0; l1 < listModule.at(moduleID_read1)->portList.count(); l1++) {
+ if ((listModule.at(moduleID_read1)->portList.at(l1)->index == index1)
+ && (listModule.at(moduleID_read1)->portList.at(l1)->dir == PORT_IN)) {
+ index_read1 = l1;
+ }
+ }
+ for (l1 = 0; l1 < listModule.at(moduleID_read2)->portList.count(); l1++) {
+ if ((listModule.at(moduleID_read2)->portList.at(l1)->index == index2)
+ && (listModule.at(moduleID_read2)->portList.at(l1)->dir == PORT_OUT)) {
+ index_read2 = l1;
+ }
+ }
+ listModule.at(moduleID_read1)->portList.at(index_read1)->connectTo(listModule.at(moduleID_read2)->portList.at(index_read2));
+ listModule.at(moduleID_read2)->portList.at(index_read2)->connectTo(listModule.at(moduleID_read1)->portList.at(index_read1));
+ }
+ if (qs.contains("FSlider", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ fscanf(f, "%d", &isLogInt);
+ fscanf(f, "%d", &sliderMin);
+ fscanf(f, "%d", &sliderMax);
+ fscanf(f, "%d", &midiSign);
+ isLog = isLogInt == 1;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->setLogMode(isLog);
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->updateValue(value);
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->setLogMode(isLog);
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->setNewMin(sliderMin);
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->setNewMax(sliderMax);
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->midiSign = midiSign;
+ break;
+ }
+ }
+ }
+ if (qs.contains("ISlider", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ fscanf(f, "%d", &midiSign);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ listModule.at(l1)->configDialog->intMidiSliderList.at(index)->slider->setValue((int)value);
+ listModule.at(l1)->configDialog->intMidiSliderList.at(index)->midiSign = midiSign;
+ break;
+ }
+ }
+ }
+ if (qs.contains("LSlider", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ fscanf(f, "%d", &midiSign);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->slider->setValue((int)value);
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->midiSign = midiSign;
+ break;
+ }
+ }
+ }
+ if (qs.contains("ComboBox", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ fscanf(f, "%d", &midiSign);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ listModule.at(l1)->configDialog->midiComboBoxList.at(index)->comboBox->setCurrentItem(value);
+ listModule.at(l1)->configDialog->midiComboBoxList.at(index)->midiSign = midiSign;
+ break;
+ }
+ }
+ }
+ if (qs.contains("CheckBox", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ fscanf(f, "%d", &midiSign);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->checkBox->setChecked(value==1);
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->midiSign = midiSign;
+ break;
+ }
+ }
+ }
+ if (qs.contains("MIDI", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &type);
+ fscanf(f, "%d", &ch);
+ fscanf(f, "%d", ¶m);
+ MidiController *midiController = new MidiController(type, ch, param);
+ if (!midiWidget->midiControllerList.contains(midiController)) {
+ midiWidget->addMidiController(midiController);
+ } else {
+ midiIndex = midiWidget->midiControllerList.find(midiController);
+ delete(midiController);
+ midiController = midiWidget->midiControllerList.at(midiIndex);
+ }
+ if (qs.contains("FSMIDI", false)) {
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->connectToController(midiController);
+ }
+ if (qs.contains("ISMIDI", false)) {
+ listModule.at(l1)->configDialog->intMidiSliderList.at(index)->connectToController(midiController);
+ }
+ if (qs.contains("LSMIDI", false)) {
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->connectToController(midiController);
+ }
+ if (qs.contains("CMIDI", false)) {
+ listModule.at(l1)->configDialog->midiComboBoxList.at(index)->connectToController(midiController);
+ }
+ if (qs.contains("TMIDI", false)) {
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->connectToController(midiController);
+ }
+ }
+ if (qs.contains("#PARA#", false)) {
+ fscanf(f, "%d", &textEditID);
+ fscanf(f, "%d", &textEditID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%s", sc);
+ qs = QString(sc);
+ if (!qs.contains("#ARAP#", false)) {
+ para = QString(sc) + " ";
+ } else {
+ para = "\n";
+ }
+ while (!qs.contains("#ARAP#", false)) {
+ fscanf(f, "%s", sc);
+ qs = QString(sc);
+ if (!qs.contains("#ARAP#", false)) {
+ para.append(qs+" ");
+ }
+ }
+ listTextEdit.at(textEditID)->textEdit->insertParagraph(para, index);
+ }
+ if (qs.contains("Frame", false)) {
+ qs.truncate(0);
+ do {
+ fscanf(f, "%s", sc);
+ qs += QString(sc);
+ if (qs.right(1) != "\"") {
+ qs += " ";
+ }
+ } while (qs.right(1) != "\"");
+ qs = qs.mid(1, qs.length()-2);
+ guiWidget->addFrame(qs);
+ }
+ if (qs.contains("Parameter", false)) {
+ qs.truncate(0);
+ do {
+ fscanf(f, "%s", sc);
+ qs += QString(sc);
+ if (qs.right(1) != "\"") {
+ qs += " ";
+ }
+ } while (qs.right(1) != "\"");
+ qs = qs.mid(1, qs.length()-2);
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ guiWidget->addParameter(listModule.at(l1)->configDialog->midiGUIcomponentList.at(index), qs);
+ if (listModule.at(l1)->configDialog->midiGUIcomponentList.at(index)->componentType == GUIcomponentType_slider) {
+ fscanf(f, "%d", &sliderMin);
+ fscanf(f, "%d", &sliderMax);
+ fscanf(f, "%d", &isLogInt);
+ ((MidiSlider *)guiWidget->parameterList.last())->setNewMin(sliderMin);
+ ((MidiSlider *)guiWidget->parameterList.last())->setNewMax(sliderMax);
+ ((MidiSlider *)guiWidget->parameterList.last())->setLogMode(isLogInt == 1);
+ }
+ break;
+ }
+ }
+ }
+ if (qs.contains("Program", false)) {
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ if (index != currentProgram) {
+ currentProgram = index;
+ guiWidget->setPresetCount(currentProgram + 1);
+ }
+ guiWidget->presetList[currentProgram].append(value);
+ }
+ }
+ if (guiWidget->presetCount) {
+ guiWidget->setCurrentPreset(0);
+ }
+ fclose(f);
+ loadingPatch = false;
+ }
+ synthdata->doSynthesis = true;
+ if (!synthdata->withJack) {
+ if (restartSynth && !synth->running()) {
+ synth->start();
+ } else {
+ fprintf(stderr, "Audio thread is already running...\n");
+ }
+ if (synthdata->moduleInCount) {
+ synthdata->doCapture = true;
+ if (!capture->running()) {
+ capture->start();
+ } else {
+ fprintf(stderr, "Capture thread is already running...\n");
+ }
+ }
+ }
+ midiWidget->followConfig = followConfig;
+}
+
+void ModularSynth::save() {
+
+ Port *port[2];
+ int l1, l2, l3, value;
+ FILE *f;
+ QString config_fn, qs;
+ QValueList<int>::iterator it;
+
+ if (!(config_fn = QString(QFileDialog::getSaveFileName(savePath, "AlsaModularSynth files (*.ams)")))) {
+ return;
+ }
+ if (!(f = fopen(config_fn, "w"))) {
+ QMessageBox::information( this, "AlsaModularSynth", "Could not save file.");
+ } else {
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ fprintf(f, "Module %d %d %d %d ", (int)listModule.at(l1)->M_type, listModule.at(l1)->moduleID,
+ listModule.at(l1)->x(), listModule.at(l1)->y());
+ switch(listModule.at(l1)->M_type) {
+ case M_type_custom:
+ break;
+ case M_type_vca:
+ fprintf(f, "%d 0\n", (int)((M_vca *)listModule.at(l1))->expMode);
+ break;
+ case M_type_mix:
+ fprintf(f, "%d 0\n", ((M_mix *)listModule.at(l1))->in_channels);
+ break;
+ case M_type_stereomix:
+ fprintf(f, "%d 0\n", ((M_stereomix *)listModule.at(l1))->in_channels);
+ break;
+ case M_type_vcorgan:
+ fprintf(f, "%d 0\n", ((M_vcorgan *)listModule.at(l1))->oscCount);
+ break;
+ case M_type_dynamicwaves:
+ fprintf(f, "%d 0\n", ((M_dynamicwaves *)listModule.at(l1))->oscCount);
+ break;
+ case M_type_seq:
+ fprintf(f, "%d 0\n", ((M_seq *)listModule.at(l1))->seqLen);
+ break;
+ case M_type_ladspa:
+ fprintf(f, "%d %s %s\n", 2 * (int)((M_ladspa *)listModule.at(l1))->isPoly
+ + (int)((M_ladspa *)listModule.at(l1))->hasExtCtrlPorts,
+ synthdata->ladspa_lib_name[((M_ladspa *)listModule.at(l1))->ladspaDesFuncIndex].latin1(),
+ ((M_ladspa *)listModule.at(l1))->pluginName.latin1());
+ break;
+ case M_type_scquantizer:
+ qs = ((M_scquantizer *)listModule.at(l1))->sclname.latin1();
+ if (qs.contains("/")) {
+ qs = qs.mid(qs.findRev("/") + 1);
+ }
+ fprintf(f, "%s\n", qs.latin1());
+ break;
+ case M_type_scmcv:
+ qs = ((M_scmcv *)listModule.at(l1))->sclname.latin1();
+ if (qs.contains("/")) {
+ qs = qs.mid(qs.findRev("/") + 1);
+ }
+ fprintf(f, "%s\n", qs.latin1());
+ break;
+ default:
+ fprintf(f, "0 0\n");
+ break;
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->portList.count(); l2++) {
+ port[0] = listModule.at(l1)->portList.at(l2);
+ if ((port[0]->dir == PORT_IN) && port[0]->connectedPortList.count()) {
+ port[1] = port[0]->connectedPortList.at(0);
+ fprintf(f, "Port %d %d %d %d\n", port[0]->index, port[1]->index,
+ ((Module *)port[0]->parentModule)->moduleID, ((Module *)port[1]->parentModule)->moduleID);
+ }
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiSliderList.count(); l2++) {
+ fprintf(f, "FSlider %d %d %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->value(),
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->isLog,
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->minValue(),
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->maxValue(),
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiSign);
+ for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.count(); l3++) {
+ fprintf(f, "FSMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->type,
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->param);
+ }
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->configDialog->intMidiSliderList.count(); l2++) {
+ fprintf(f, "ISlider %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->slider->value(),
+ listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiSign);
+ for (l3 = 0; l3 < listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.count(); l3++) {
+ fprintf(f, "ISMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->type,
+ listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+ listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->param);
+ }
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->configDialog->floatIntMidiSliderList.count(); l2++) {
+ fprintf(f, "LSlider %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->slider->value(),
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiSign);
+ for (l3 = 0; l3 < listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.count(); l3++) {
+ fprintf(f, "LSMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->type,
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->param);
+ }
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiComboBoxList.count(); l2++) {
+ fprintf(f, "ComboBox %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->comboBox->currentItem(),
+ listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiSign);
+ for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.count(); l3++) {
+ fprintf(f, "CMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->type,
+ listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->ch,
+ listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->param);
+ }
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiCheckBoxList.count(); l2++) {
+ fprintf(f, "CheckBox %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ (int)(listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->checkBox->isChecked()),
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiSign);
+ for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.count(); l3++) {
+ fprintf(f, "TMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->type,
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->ch,
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->param);
+ }
+ }
+ }
+ for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+ fprintf(f, "Comment %d %d %d %d %d %d\n", listTextEdit.at(l1)->textEditID, l1,
+ listTextEdit.at(l1)->x(), listTextEdit.at(l1)->y(),
+ listTextEdit.at(l1)->width(), listTextEdit.at(l1)->height());
+ }
+ for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+ for (l2 = 0; l2 < listTextEdit.at(l1)->textEdit->paragraphs(); l2++) {
+ fprintf(f, "#PARA# %d %d %d\n", listTextEdit.at(l1)->textEditID, l1, l2);
+ fprintf(f, "%s\n", listTextEdit.at(l1)->textEdit->text(l2).latin1());
+ fprintf(f, "#ARAP#\n");
+ }
+ }
+
+ for (l1 = 0; l1 < guiWidget->frameBoxList.count(); l1++) {
+ fprintf(f, "Frame \"%s\"\n", guiWidget->frameBoxList.at(l1)->name());
+ for (l2 = 0; l2 < guiWidget->parameterList.count(); l2++) {
+ if (guiWidget->parameterList.at(l2)->parent() == guiWidget->frameBoxList.at(l1)) {
+ fprintf(f, "Parameter \"%s\" %d %d ", guiWidget->parameterList.at(l2)->name(),
+ ((Module *)guiWidget->parameterList.at(l2)->parentModule)->moduleID,
+ guiWidget->parameterList.at(l2)->midiGUIcomponentListIndex);
+ if (guiWidget->parameterList.at(l2)->componentType == GUIcomponentType_slider) {
+ fprintf(f, "%d %d %d\n", ((MidiSlider *)guiWidget->parameterList.at(l2))->slider->minValue(),
+ ((MidiSlider *)guiWidget->parameterList.at(l2))->slider->maxValue(),
+ ((MidiSlider *)guiWidget->parameterList.at(l2))->isLog);
+ } else {
+ fprintf(f, "\n");
+ }
+ }
+ }
+ }
+
+ for (l1 = 0; l1 < guiWidget->presetCount; l1++) {
+ for (it = guiWidget->presetList[l1].begin(); it != guiWidget->presetList[l1].end(); it++) {
+ value = *it;
+ fprintf(f, "Program %d %d\n", l1, value);
+ }
+ }
+
+ fclose(f);
+ }
+}
+
+void ModularSynth::allVoicesOff() {
+
+ int l1, l2;
+
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ if (synthdata->notePressed[l2]) {
+ synthdata->notePressed[l2] = false;
+ synthdata->noteActive[l2] = false;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ listModule.at(l1)->noteOffEvent(l2);
+ }
+ }
+ }
+}
+
+void ModularSynth::cleanUpSynth() {
+
+ fprintf(stderr, "Closing Synth...\n");
+ if (synthdata->withJack && synthdata->jackRunning) {
+ synthdata->deactivateJack();
+ }
+ fprintf(stderr, "Ready.\n");
+}
Added: ams/trunk/.#modularsynth.cpp.1.4
===================================================================
--- ams/trunk/.#modularsynth.cpp.1.4 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/.#modularsynth.cpp.1.4 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,2027 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <glob.h>
+#include <dlfcn.h>
+#include <qregexp.h>
+#include <qthread.h>
+#include <qwidget.h>
+#include <qstring.h>
+#include <qslider.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qvbox.h>
+#include <qpopupmenu.h>
+#include <qpointarray.h>
+#include <qmessagebox.h>
+#include <qsocketnotifier.h>
+#include <qfiledialog.h>
+#include <qmainwindow.h>
+#include <qimage.h>
+#include <qpen.h>
+#include <qscrollview.h>
+#include <qlistview.h>
+#include <alsa/asoundlib.h>
+#include <ladspa.h>
+#include <jack/jack.h>
+#include "modularsynth.h"
+#include "port.h"
+#include "midiwidget.h"
+#include "guiwidget.h"
+#include "midicontroller.h"
+#include "ladspadialog.h"
+
+ModularSynth::ModularSynth(int poly, int periodsize, QWidget *parent, const char *name)
+ : QScrollView(parent, name, Qt::WResizeNoErase | Qt::WRepaintNoErase | Qt::WStaticContents) {
+
+ firstPort = true;
+ connectingPort[0] = NULL;
+ connectingPort[1] = NULL;
+ connectorStyle = CONNECTOR_BEZIER;
+ aboutWidget = new QMessageBox(this);
+ mainWindow = (QMainWindow *)parent;
+ clientid = 0;
+ portid = 0;
+ jack_in_ports = 2;
+ jack_out_ports = 2;
+ synthdata = new SynthData(poly, periodsize);
+ midiWidget = new MidiWidget(synthdata, NULL);
+ midiWidget->setCaption("AlsaModularSynth Control Center");
+ synthdata->midiWidget = (QObject *)midiWidget;
+ guiWidget = new GuiWidget(synthdata, NULL);
+ guiWidget->setCaption("AlsaModularSynth Parameter View");
+ synthdata->guiWidget = (QObject *)guiWidget;
+ PCMname = DEFAULT_PCMNAME;
+ presetPath = "";
+ ladspaDialog = new LadspaDialog(synthdata, NULL);
+ QObject::connect(ladspaDialog, SIGNAL(createLadspaModule(int, int, bool, bool)),
+ this, SLOT(newM_ladspa(int, int, bool, bool)));
+ setPalette(QPalette(QColor(117, 67, 21), QColor(117, 67, 21)));
+ loadingPatch = false;
+}
+
+ModularSynth::~ModularSynth()
+{
+ delete synthdata;
+}
+
+void ModularSynth::viewportPaintEvent(QPaintEvent *pe) {
+
+ QPixmap pm(visibleWidth(), visibleHeight());
+ QPainter p(&pm);
+ QPen *pen;
+ QPointArray qpa(4);
+ int l1, l2;
+ Port *port[2];
+ int port_x[2], port_y[2];
+ QPoint port_pos[2];
+ int moduleX[2], moduleY[2];
+
+ pm.fill(QColor(130, 90, 25));
+ p.setPen(QColor(220, 216, 216));
+ pen = new QPen(QColor(220, 216, 216), 3);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ for (l2 = 0; l2 < listModule.at(l1)->portList.count(); l2++) {
+ port[0] = listModule.at(l1)->portList.at(l2);
+ if ((port[0]->dir == PORT_IN) && port[0]->connectedPortList.count()) {
+ port[1] = port[0]->connectedPortList.at(0);
+ port_pos[0] = port[0]->pos();
+ port_pos[1] = port[1]->pos();
+ contentsToViewport(childX(port[0]->parentModule), childY(port[0]->parentModule), moduleX[0], moduleY[0]);
+ contentsToViewport(childX(port[1]->parentModule), childY(port[1]->parentModule), moduleX[1], moduleY[1]);
+ port_x[0] = port_pos[0].x() + moduleX[0];
+ port_x[1] = port_pos[1].x() + port[1]->width() + moduleX[1];
+ port_y[0] = port_pos[0].y() + moduleY[0] + port[0]->height()/2;
+ port_y[1] = port_pos[1].y() + moduleY[1] + port[1]->height()/2;
+ if (connectorStyle == CONNECTOR_BEZIER) {
+ qpa.setPoint(0, port_x[0], port_y[0]);
+ qpa.setPoint(1, (port_x[1] - port_x[0]) / 2 + port_x[0],
+ (port_y[1] - port_y[0]) / 2 + port_y[0] + 50);
+ qpa.setPoint(2, port_x[1], port_y[1]);
+ qpa.setPoint(3, port_x[1], port_y[1]);
+ pen->setWidth(5);
+ pen->setColor(QColor(150, 140, 140));
+ p.setPen(*pen);
+ p.drawCubicBezier(qpa);
+ pen->setWidth(3);
+ pen->setColor(QColor(180, 170, 170));
+ p.setPen(*pen);
+ p.drawCubicBezier(qpa);
+ pen->setWidth(1);
+ pen->setColor(QColor(220, 216, 216));
+ p.setPen(*pen);
+ p.drawCubicBezier(qpa);
+ }
+ if (connectorStyle == CONNECTOR_STRAIGHT) {
+ p.drawLine(port_x[0], port_y[0], port_x[1], port_y[1]);
+ }
+ if (port[0]->parentModule->x() < port[1]->parentModule->x()) {
+ pen->setWidth(5);
+ pen->setColor(QColor(150, 140, 140));
+ p.setPen(*pen);
+ p.drawLine(port_x[0], port_y[0], port_x[0] - 5, port_y[0]);
+ pen->setWidth(3);
+ pen->setColor(QColor(180, 170, 170));
+ p.setPen(*pen);
+ p.drawLine(port_x[0], port_y[0], port_x[0] - 6, port_y[0]);
+ pen->setWidth(1);
+ pen->setColor(QColor(220, 216, 216));
+ p.setPen(*pen);
+ p.drawLine(port_x[0], port_y[0], port_x[0] - 7, port_y[0]);
+ }
+ if (port[1]->parentModule->x() > port[0]->parentModule->x()) {
+ pen->setWidth(5);
+ pen->setColor(QColor(150, 140, 140));
+ p.setPen(*pen);
+ p.drawLine(port_x[1], port_y[1], port_x[1] + 5, port_y[1]);
+ pen->setWidth(3);
+ pen->setColor(QColor(180, 170, 170));
+ p.setPen(*pen);
+ p.drawLine(port_x[1], port_y[1], port_x[1] + 6, port_y[1]);
+ pen->setWidth(1);
+ pen->setColor(QColor(220, 216, 216));
+ p.setPen(*pen);
+ p.drawLine(port_x[1], port_y[1], port_x[1] + 7, port_y[1]);
+ }
+ }
+ }
+ }
+ bitBlt(viewport(), 0, 0, &pm);
+ delete pen;
+}
+
+void ModularSynth::mousePressEvent(QMouseEvent *ev) {
+
+ switch (ev->button()) {
+ case Qt::LeftButton:
+ break;
+ case Qt::RightButton:
+ break;
+ case Qt::MidButton:
+ break;
+ default:
+ break;
+ }
+}
+
+void ModularSynth::mouseReleaseEvent(QMouseEvent *ev) {
+
+ switch (ev->button()) {
+ case Qt::LeftButton:
+ break;
+ case Qt::RightButton:
+ break;
+ case Qt::MidButton:
+ if (connectorStyle == CONNECTOR_STRAIGHT) {
+ connectorStyle = CONNECTOR_BEZIER;
+ } else {
+ connectorStyle = CONNECTOR_STRAIGHT;
+ }
+ repaintContents(false);
+ break;
+ default:
+ break;
+ }
+}
+
+QSize ModularSynth::sizeHint() const {
+
+ return QSize(SYNTH_MINIMUM_WIDTH, SYNTH_MINIMUM_HEIGHT);
+}
+
+QSizePolicy ModularSynth::sizePolicy() const {
+
+ return QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+}
+
+
+int ModularSynth::go(bool withJack) {
+
+ synthdata->seq_handle = open_seq();
+ initSeqNotifier();
+ if (withJack) {
+ synthdata->initJack(jack_in_ports, jack_out_ports);
+ synthdata->doSynthesis = true;
+ } else {
+ synth = new Synth(synthdata);
+ capture = new Capture(synthdata);
+ synthdata->doSynthesis = true;
+ synthdata->doCapture = false;
+ synth->start();
+ }
+ return(0);
+}
+
+void ModularSynth::displayAbout() {
+
+ aboutWidget->about(this, "About AlsaModularSynth", "AlsaModularSynth 1.6.0\n"
+ "by Matthias Nagorni\n"
+ "(c)2002-2003 SuSE AG Nuremberg\n\n"
+ "Documentation and examples can be found in\n"
+ "/usr/share/doc/packages/kalsatools\n\n"
+ "More presets and updates are available from\n"
+ "http://alsamodular.sourceforge.net"
+ "\n\nAcknowledgements\n"
+ "----------------------\n\n"
+ "The VCF Module uses the resonant low-pass filter by Paul Kellett\n"
+ "and the Cookbook formulae for audio EQ biquad filter coefficients\n"
+ "by Robert Bristow-Johnson. The experimental 24 dB Lowpass filters have\n"
+ "been taken from http://musicdsp.org. They are based on the CSound source\n"
+ "code, the paper by Stilson/Smith and modifications by Paul Kellett\n"
+ "and Timo Tossavainen. The pink noise conversion formula is by Paul\n"
+ "Kellett and has been taken from http://musicdsp.org as well.\n\n"
+ "The author is grateful to Takashi Iwai for instructions about ALSA.\n"
+ "Klaas Freitag, Helmut Herold, Stefan Hundhammer and Arvin Schnell\n"
+ "answered many questions about QT. Thanks to Jörg Arndt for valuable\n"
+ "hints regarding speed optimization. Torsten Rahn has helped to\n"
+ "improve the color scheme of the program. Thanks to Bernhard Kaindl\n"
+ "for helpful discussion. Fons Adriaensen has contributed patches for the\n"
+ "MCV and Spectrum View modules. He has also contributed many valuable ideas.\n");
+ aboutWidget->raise();
+}
+
+void ModularSynth::displayMidiController() {
+
+ midiWidget->show();
+ midiWidget->raise();
+}
+
+void ModularSynth::displayParameterView() {
+
+ guiWidget->show();
+ guiWidget->raise();
+}
+
+void ModularSynth::displayLadspaPlugins() {
+
+ ladspaDialog->show();
+ ladspaDialog->raise();
+}
+
+int ModularSynth::setPeriodsize(int p_periodsize){
+
+ synthdata->setPeriodsize(p_periodsize);
+ synthdata->setCycleSize(synthdata->periodsize); // TODO allow cyclesize < periodsize
+ fprintf(stderr, "Cyclesize: %d Periodsize: %d\n", synthdata->cyclesize, synthdata->periodsize);
+ return(0);
+}
+
+int ModularSynth::setPeriods(int p_periods){
+
+ synthdata->setPeriods(p_periods);
+ return(0);
+}
+
+int ModularSynth::setRate(int p_rate){
+
+ synthdata->setRate(p_rate);
+ return(0);
+}
+
+int ModularSynth::setChannels(int p_channels){
+
+ synthdata->setChannels(p_channels);
+ return(0);
+}
+
+int ModularSynth::setPCMname(QString p_name){
+
+ PCMname = p_name;
+ return(0);
+}
+
+int ModularSynth::setPresetPath(QString name) {
+
+ presetPath = name;
+ return(0);
+}
+
+int ModularSynth::setSavePath(QString name) {
+
+ savePath = name;
+ return(0);
+}
+
+snd_pcm_t *ModularSynth::open_pcm(bool openCapture) {
+
+ snd_pcm_t *pcm_handle;
+ snd_pcm_stream_t stream;
+ snd_pcm_hw_params_t *hwparams;
+ int buffersize_return;
+
+ stream = (openCapture) ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK;
+ if (snd_pcm_open(&pcm_handle, PCMname.latin1(), stream, 0) < 0) {
+ fprintf(stderr, "Error opening PCM device %s\n", PCMname.latin1());
+ exit(1);
+ }
+ snd_pcm_hw_params_alloca(&hwparams);
+ if (snd_pcm_hw_params_any(pcm_handle, hwparams) < 0) {
+ fprintf(stderr, "Can not configure this PCM device.\n");
+ exit(1);
+ }
+ if (snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) {
+ fprintf(stderr, "Error setting access.\n");
+ exit(1);
+ }
+ if (snd_pcm_hw_params_set_format(pcm_handle, hwparams, SND_PCM_FORMAT_S16_LE) < 0) {
+ fprintf(stderr, "Error setting format.\n");
+ exit(1);
+ }
+ if (snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, synthdata->rate, 0) < 0) {
+ fprintf(stderr, "Error setting rate.\n");
+ exit(1);
+ }
+ if (snd_pcm_hw_params_set_channels(pcm_handle, hwparams, synthdata->channels) < 0) {
+ fprintf(stderr, "Error setting channels.\n");
+ exit(1);
+ }
+ if (snd_pcm_hw_params_set_periods(pcm_handle, hwparams, synthdata->periods, 0) < 0) {
+ fprintf(stderr, "Error setting periods.\n");
+ exit(1);
+ }
+ if ((buffersize_return = snd_pcm_hw_params_set_buffer_size_near(pcm_handle, hwparams,
+ synthdata->periodsize * synthdata->periods)) < 0) {
+ fprintf(stderr, "Error setting buffersize.\n");
+ exit(1);
+ }
+ if (buffersize_return != synthdata->periodsize * synthdata->periods) {
+ fprintf(stderr, "Buffersize %d is not available on your hardware. Using %d instead.\n",
+ synthdata->periodsize, buffersize_return * synthdata->periods);
+ setPeriodsize(buffersize_return / synthdata->periods);
+ }
+ if (snd_pcm_hw_params(pcm_handle, hwparams) < 0) {
+ fprintf(stderr, "Error setting HW params.\n");
+ exit(1);
+ }
+ return(pcm_handle);
+}
+
+snd_seq_t *ModularSynth::open_seq() {
+
+ snd_seq_t *seq_handle;
+ int l1;
+ QString qs;
+
+ if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
+ fprintf(stderr, "Error opening ALSA sequencer.\n");
+ exit(1);
+ }
+ snd_seq_set_client_name(seq_handle, "AlsaModularSynth");
+ clientid = snd_seq_client_id(seq_handle);
+ if ((portid = snd_seq_create_simple_port(seq_handle, "ams",
+ SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE,
+ SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
+ fprintf(stderr, "Error creating sequencer port.\n");
+ exit(1);
+ }
+ for (l1 = 0; l1 < 2; l1++) {
+ if ((synthdata->midi_out_port[l1] = snd_seq_create_simple_port(seq_handle, "ams",
+ SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ,
+ SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
+ fprintf(stderr, "Error creating sequencer port.\n");
+ exit(1);
+ }
+ }
+ qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d", clientid, portid);
+ mainWindow->setCaption(qs);
+ synthdata->jackName.sprintf("ams_%d_%d", clientid, portid);
+ return(seq_handle);
+}
+
+int ModularSynth::initSeqNotifier() {
+
+ int alsaEventFd = 0;
+
+ struct pollfd pfd[1];
+ snd_seq_poll_descriptors(synthdata->seq_handle, pfd, 1, POLLIN);
+ alsaEventFd = pfd[0].fd;
+ seqNotifier = new QSocketNotifier(alsaEventFd, QSocketNotifier::Read);
+ QObject::connect(seqNotifier, SIGNAL(activated(int)),
+ this, SLOT(midiAction(int)));
+ return(0);
+}
+
+void ModularSynth::midiAction(int fd) {
+
+ snd_seq_event_t *ev;
+ QString qs;
+ int l1, l2, osc;
+ bool noteActive, foundOsc;
+ float min_e;
+ MidiController *midiController;
+
+ do {
+ snd_seq_event_input(synthdata->seq_handle, &ev);
+ if (midiWidget->isVisible()) {
+ if ((ev->type == SND_SEQ_EVENT_CONTROLLER)
+ ||(ev->type == SND_SEQ_EVENT_CONTROL14)
+ ||(ev->type == SND_SEQ_EVENT_PITCHBEND)) {
+ MidiController *midiController = new MidiController();
+ midiController->type = ev->type;
+ midiController->ch = ev->data.control.channel;
+ midiController->param = (ev->type==SND_SEQ_EVENT_PITCHBEND)
+ ? 0 : ev->data.control.param;
+ if (!midiWidget->midiControllerList.contains(midiController)) {
+ midiWidget->addMidiController(midiController);
+ } else {
+ delete midiController;
+ }
+ }
+ if (midiWidget->noteControllerEnabled &&((ev->type == SND_SEQ_EVENT_NOTEON)
+ ||(ev->type == SND_SEQ_EVENT_NOTEOFF))) {
+ MidiController *midiController = new MidiController();
+ midiController->type = ev->type;
+ midiController->ch = ev->data.control.channel;
+ midiController->param = ev->data.note.note;
+ if (!midiWidget->midiControllerList.contains(midiController)) {
+ midiWidget->addMidiController(midiController);
+ } else {
+ delete midiController;
+ }
+ }
+ }
+ if (midiWidget->followMidi) {
+ for(l1 = 0; l1 < midiWidget->midiControllerList.count(); l1++) {
+ midiController = midiWidget->midiControllerList.at(l1);
+ if ((midiController->type == ev->type)
+ &&(midiController->ch == ev->data.control.channel)) {
+ if (ev->type == SND_SEQ_EVENT_PITCHBEND) {
+ emit midiController->sendMidiValue((ev->data.control.value + 8192) / 128);
+ midiWidget->setSelectedController(midiController);
+ }
+ if ((ev->type == SND_SEQ_EVENT_CONTROL14)
+ && (midiController->param == ev->data.control.param)) {
+ emit midiController->sendMidiValue(ev->data.control.value / 128);
+ midiWidget->setSelectedController(midiController);
+ }
+ if ((ev->type == SND_SEQ_EVENT_CONTROLLER)
+ && (midiController->param == ev->data.control.param)) {
+ emit midiController->sendMidiValue(ev->data.control.value);
+ midiWidget->setSelectedController(midiController);
+ }
+ if ((ev->type == SND_SEQ_EVENT_NOTEON)
+ && (midiController->param == ev->data.note.note)) {
+ emit midiController->sendMidiValue(ev->data.note.velocity);
+ midiWidget->setSelectedController(midiController);
+ }
+ if ((ev->type == SND_SEQ_EVENT_NOTEOFF)
+ && (midiController->param == ev->data.note.note)) {
+ emit midiController->sendMidiValue(0);
+ midiWidget->setSelectedController(midiController);
+ }
+ }
+ }
+ } else {
+ for(l1 = 0; l1 < midiWidget->midiControllerList.count(); l1++) {
+ midiController = midiWidget->midiControllerList.at(l1);
+ if ((midiController->type == ev->type)
+ &&(midiController->ch == ev->data.control.channel)) {
+ if (ev->type == SND_SEQ_EVENT_PITCHBEND) {
+ emit midiController->sendMidiValue((ev->data.control.value + 8192) / 128);
+ }
+ if ((ev->type == SND_SEQ_EVENT_CONTROL14)
+ && (midiController->param == ev->data.control.param)) {
+ emit midiController->sendMidiValue(ev->data.control.value / 128);
+ }
+ if ((ev->type == SND_SEQ_EVENT_CONTROLLER)
+ && (midiController->param == ev->data.control.param)) {
+ emit midiController->sendMidiValue(ev->data.control.value);
+ }
+ if ((ev->type == SND_SEQ_EVENT_NOTEON)
+ && (midiController->param == ev->data.note.note)) {
+ emit midiController->sendMidiValue(ev->data.note.velocity);
+ }
+ if ((ev->type == SND_SEQ_EVENT_NOTEOFF)
+ && (midiController->param == ev->data.note.note)) {
+ emit midiController->sendMidiValue(0);
+ }
+ }
+ }
+ }
+ if (((ev->type == SND_SEQ_EVENT_NOTEON) || (ev->type == SND_SEQ_EVENT_NOTEOFF))
+ && ((synthdata->midiChannel < 0) || (synthdata->midiChannel == ev->data.control.channel))) {
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ noteActive = false;
+ for (l1 = 0; l1 < synthdata->listM_env.count(); l1++) {
+ if (((M_env *)synthdata->listM_env.at(l1))->noteActive[l2]) {
+ noteActive = true;
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_vcenv.count(); l1++) {
+ if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->noteActive[l2]) {
+ noteActive = true;
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_advenv.count(); l1++) {
+ if (((M_advenv *)synthdata->listM_advenv.at(l1))->noteActive[l2]) {
+ noteActive = true;
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_dynamicwaves.count(); l1++) {
+ if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->noteActive[l2]) {
+ noteActive = true;
+ }
+ }
+ synthdata->noteActive[l2] = noteActive || synthdata->notePressed[l2];
+ }
+ if ((ev->type == SND_SEQ_EVENT_NOTEON) && (ev->data.note.velocity > 0)) {
+ foundOsc = false;
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ if (!synthdata->noteActive[l2]) {
+ foundOsc = true;
+ synthdata->noteActive[l2] = true;
+ synthdata->notePressed[l2] = true;
+ synthdata->velocity[l2] = ev->data.note.velocity;
+ synthdata->channel[l2] = ev->data.note.channel;
+ synthdata->notes[l2] = ev->data.note.note;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ listModule.at(l1)->noteOnEvent(l2);
+ }
+ break;
+ }
+ }
+ if ((synthdata->listM_advenv.count()
+ || synthdata->listM_env.count()
+ || synthdata->listM_vcenv.count()
+ || synthdata->listM_dynamicwaves.count())
+ && !foundOsc) {
+ min_e = 1.0;
+ osc = 0;
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ for (l1 = 0; l1 < synthdata->listM_dynamicwaves.count(); l1++) {
+ if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->noteActive[l2]) {
+ if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->e[l2][0] < min_e) {
+ min_e = ((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->e[l2][0];
+ osc = l2;
+ }
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_env.count(); l1++) {
+ if (((M_env *)synthdata->listM_env.at(l1))->noteActive[l2]) {
+ if (((M_env *)synthdata->listM_env.at(l1))->e[l2] < min_e) {
+ min_e = ((M_env *)synthdata->listM_env.at(l1))->e[l2];
+ osc = l2;
+ }
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_vcenv.count(); l1++) {
+ if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->noteActive[l2]) {
+ if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->e[l2] < min_e) {
+ min_e = ((M_vcenv *)synthdata->listM_vcenv.at(l1))->e[l2];
+ osc = l2;
+ }
+ }
+ }
+ for (l1 = 0; l1 < synthdata->listM_advenv.count(); l1++) {
+ if (((M_advenv *)synthdata->listM_advenv.at(l1))->noteActive[l2]) {
+ if (((M_advenv *)synthdata->listM_advenv.at(l1))->e[l2] < min_e) {
+ min_e = ((M_advenv *)synthdata->listM_advenv.at(l1))->e[l2];
+ osc = l2;
+ }
+ }
+ }
+ }
+ synthdata->noteActive[osc] = true;
+ synthdata->notePressed[osc] = true;
+ synthdata->velocity[osc] = ev->data.note.velocity;
+ synthdata->channel[osc] = ev->data.note.channel;
+ synthdata->notes[osc] = ev->data.note.note;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ listModule.at(l1)->noteOnEvent(osc);
+ }
+ }
+ } else {
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ if ((synthdata->notes[l2] == ev->data.note.note)
+ && (synthdata->channel[l2] == ev->data.note.channel)) {
+ synthdata->notePressed[l2] = false;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ listModule.at(l1)->noteOffEvent(l2);
+ }
+ }
+ }
+ }
+ }
+ if ((ev->type == SND_SEQ_EVENT_CONTROLLER) && (ev->data.control.param == MIDI_CTL_ALL_NOTES_OFF)) {
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ if (synthdata->notePressed[l2] && (synthdata->channel[l2] == ev->data.note.channel)) {
+ synthdata->notePressed[l2] = false;
+ synthdata->noteActive[l2] = false;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ listModule.at(l1)->noteOffEvent(l2);
+ }
+ }
+ }
+ }
+ if (ev->type == SND_SEQ_EVENT_PGMCHANGE) {
+ guiWidget->setCurrentPreset(ev->data.control.value);
+ }
+ for (l1 = 0; l1 < synthdata->listM_advmcv.count(); l1++) {
+ switch (ev->type) {
+ case SND_SEQ_EVENT_CHANPRESS:
+ ((M_advmcv *)synthdata->listM_advmcv.at(l1))->aftertouchEvent(ev->data.note.channel, ev->data.control.value);
+ break;
+ case SND_SEQ_EVENT_PITCHBEND:
+ ((M_advmcv *)synthdata->listM_advmcv.at(l1))->pitchbendEvent(ev->data.note.channel, ev->data.control.value);
+ break;
+ case SND_SEQ_EVENT_CONTROLLER:
+ ((M_advmcv *)synthdata->listM_advmcv.at(l1))->controllerEvent(ev->data.note.channel, ev->data.control.param, ev->data.control.value);
+ break;
+ }
+ }
+ snd_seq_free_event(ev);
+ } while (snd_seq_event_input_pending(synthdata->seq_handle, 0) > 0);
+}
+
+void ModularSynth::initPorts(Module *m) {
+
+ int l1;
+
+ for (l1 = 0; l1 < m->portList.count(); l1++) {
+ QObject::connect(m->portList.at(l1), SIGNAL(portClicked()),
+ this, SLOT(portSelected()));
+ QObject::connect(m->portList.at(l1), SIGNAL(portDisconnected()),
+ this, SLOT(updatePortConnections()));
+ }
+}
+
+void ModularSynth::initNewModule(Module *m) {
+
+ int cx, cy;
+
+ addChild(m);
+ viewportToContents((visibleWidth()-m->width())>>1, (visibleHeight()-m->height())>>1, cx, cy);
+ moveChild(m, cx, cy);
+ m->show();
+ QObject::connect(m, SIGNAL(dragged(QPoint)), this, SLOT(moveModule(QPoint)));
+ QObject::connect(m, SIGNAL(removeModule()), this, SLOT(deleteModule()));
+ listModule.append(m);
+ if (!loadingPatch) {
+ midiWidget->addModule(m);
+ }
+ initPorts(m);
+}
+
+void ModularSynth::new_textEdit() {
+
+ int cx, cy;
+
+ TextEdit *te = new TextEdit(viewport(), "textEdit", synthdata);
+ addChild(te);
+ viewportToContents((visibleWidth()-te->width())>>1, (visibleHeight()-te->height())>>1, cx, cy);
+ moveChild(te, cx, cy);
+ te->show();
+ QObject::connect(te, SIGNAL(dragged(QPoint)), this, SLOT(moveTextEdit(QPoint)));
+ QObject::connect(te, SIGNAL(sizeDragged(QPoint)), this, SLOT(resizeTextEdit(QPoint)));
+ QObject::connect(te, SIGNAL(removeTextEdit()), this, SLOT(deleteTextEdit()));
+ listTextEdit.append(te);
+}
+
+void ModularSynth::new_textEdit(int x, int y, int w, int h) {
+
+ TextEdit *te = new TextEdit(viewport(), "textEdit", synthdata);
+ addChild(te);
+ te->setFixedSize(w, h);
+ moveChild(te, x, y);
+ te->show();
+ QObject::connect(te, SIGNAL(dragged(QPoint)), this, SLOT(moveTextEdit(QPoint)));
+ QObject::connect(te, SIGNAL(sizeDragged(QPoint)), this, SLOT(resizeTextEdit(QPoint)));
+ QObject::connect(te, SIGNAL(removeTextEdit()), this, SLOT(deleteTextEdit()));
+ listTextEdit.append(te);
+}
+
+void ModularSynth::startSynth() {
+
+ if (!synthdata->withJack) {
+ synthdata->doSynthesis = true;
+ if (!synth->running()) {
+ synth->start();
+ }
+ if (synthdata->moduleInCount) {
+ synthdata->doCapture = true;
+ if (!capture->running()) {
+ capture->start();
+ }
+ }
+ } else {
+ synthdata->doSynthesis = true;
+// if (!synthdata->jackRunning && (synthdata->jackOutCount + synthdata->jackInCount > 0)) {
+// synthdata->activateJack();
+// }
+ }
+}
+
+void ModularSynth::stopSynth() {
+
+ synthdata->doSynthesis = false;
+ synthdata->doCapture = false;
+// if (synthdata->withJack) {
+// synthdata->deactivateJack();
+// }
+}
+
+void ModularSynth::newM_seq(int seqLen) {
+
+ M_seq *m = new M_seq(seqLen, viewport(), "M_seq", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_seq_8() {
+
+ newM_seq(8);
+}
+
+void ModularSynth::newM_seq_12() {
+
+ newM_seq(12);
+}
+
+void ModularSynth::newM_seq_16() {
+
+ newM_seq(16);
+}
+
+void ModularSynth::newM_seq_24() {
+
+ newM_seq(24);
+}
+
+void ModularSynth::newM_seq_32() {
+
+ newM_seq(32);
+}
+
+void ModularSynth::newM_vcorgan(int oscCount) {
+
+ M_vcorgan *m = new M_vcorgan(oscCount, viewport(), "M_vcorgan", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcorgan_4() {
+
+ newM_vcorgan(4);
+}
+
+void ModularSynth::newM_vcorgan_6() {
+
+ newM_vcorgan(6);
+}
+
+void ModularSynth::newM_vcorgan_8() {
+
+ newM_vcorgan(8);
+}
+
+void ModularSynth::newM_dynamicwaves(int oscCount) {
+
+ M_dynamicwaves *m = new M_dynamicwaves(oscCount, viewport(), "M_dynamicwaves", synthdata);
+ synthdata->listM_dynamicwaves.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_dynamicwaves_4() {
+
+ newM_dynamicwaves(4);
+}
+
+void ModularSynth::newM_dynamicwaves_6() {
+
+ newM_dynamicwaves(6);
+}
+
+void ModularSynth::newM_dynamicwaves_8() {
+
+ newM_dynamicwaves(8);
+}
+
+void ModularSynth::newM_mcv() {
+
+ M_mcv *m = new M_mcv(viewport(), "M_mcv", synthdata);
+ synthdata->listM_mcv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_advmcv() {
+
+ M_advmcv *m = new M_advmcv(viewport(), "M_advmcv", synthdata);
+ synthdata->listM_advmcv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scmcv() {
+
+ M_scmcv *m = new M_scmcv(viewport(), "M_scmcv", synthdata);
+ synthdata->listM_scmcv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scmcv(QString *p_scalaName) {
+
+ M_scmcv *m = new M_scmcv(viewport(), "M_scmcv", synthdata, p_scalaName);
+ synthdata->listM_scmcv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_env() {
+
+ M_env *m = new M_env(viewport(), "M_env", synthdata);
+ synthdata->listM_env.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcenv() {
+
+ M_vcenv *m = new M_vcenv(viewport(), "M_vcenv", synthdata);
+ synthdata->listM_vcenv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_advenv() {
+
+ M_advenv *m = new M_advenv(viewport(), "M_advenv", synthdata);
+ synthdata->listM_advenv.append(m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vco() {
+
+ M_vco *m = new M_vco(viewport(), "M_vco", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vca_lin() {
+
+ M_vca *m = new M_vca(false, viewport(), "M_vca", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vca_exp() {
+
+ M_vca *m = new M_vca(true, viewport(), "M_vca", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_lfo() {
+
+ M_lfo *m = new M_lfo(viewport(), "M_lfo", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_noise() {
+
+ M_noise *m = new M_noise(viewport(), "M_noise", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_ringmod() {
+
+ M_ringmod *m = new M_ringmod(viewport(), "M_ringmod", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_inv() {
+
+ M_inv *m = new M_inv(viewport(), "M_inv", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_conv() {
+
+ M_conv *m = new M_conv(viewport(), "M_conv", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_cvs() {
+
+ M_cvs *m = new M_cvs(viewport(), "M_cvs", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_sh() {
+
+ M_sh *m = new M_sh(viewport(), "M_sh", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcswitch() {
+
+ M_vcswitch *m = new M_vcswitch(viewport(), "M_vcswitch", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_slew() {
+
+ M_slew *m = new M_slew(viewport(), "M_slew", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_quantizer() {
+
+ M_quantizer *m = new M_quantizer(viewport(), "M_quantizer", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scquantizer(QString *p_scalaName) {
+
+ M_scquantizer *m = new M_scquantizer(viewport(), "M_scquantizer", synthdata, p_scalaName);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scquantizer() {
+
+ M_scquantizer *m = new M_scquantizer(viewport(), "M_scquantizer", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_delay() {
+
+ M_delay *m = new M_delay(viewport(), "M_delay", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_mix(int in_channels) {
+
+ M_mix *m = new M_mix(in_channels, viewport(), "M_mix", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_stereomix(int in_channels) {
+
+ M_stereomix *m = new M_stereomix(in_channels, viewport(), "M_stereomix", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_mix_2() {
+
+ newM_mix(2);
+}
+
+void ModularSynth::newM_mix_4() {
+
+ newM_mix(4);
+}
+
+void ModularSynth::newM_mix_8() {
+
+ newM_mix(8);
+}
+
+void ModularSynth::newM_stereomix_2() {
+
+ newM_stereomix(2);
+}
+
+void ModularSynth::newM_stereomix_4() {
+
+ newM_stereomix(4);
+}
+
+void ModularSynth::newM_stereomix_8() {
+
+ newM_stereomix(8);
+}
+
+void ModularSynth::newM_ladspa(int p_ladspaDesFuncIndex, int n, bool p_newLadspaPoly, bool p_extCtrlPorts) {
+
+ QString qs;
+
+ qs.sprintf("%s", synthdata->ladspa_dsc_func_list[p_ladspaDesFuncIndex](n)->Name);
+ M_ladspa *m = new M_ladspa(viewport(), "M_ladspa", synthdata, p_ladspaDesFuncIndex, n, p_newLadspaPoly, p_extCtrlPorts);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_out() {
+
+ if (!synthdata->moduleOutCount) {
+ synthdata->pcm_handle = open_pcm(false);
+ }
+ M_out *m = new M_out(viewport(), "M_out", synthdata);
+ synthdata->outModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+ synthdata->moduleOutCount++;
+}
+
+void ModularSynth::newM_wavout() {
+
+ M_wavout *m = new M_wavout(viewport(), "M_wavout", synthdata);
+ synthdata->wavoutModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_midiout() {
+
+ M_midiout *m = new M_midiout(viewport(), "M_midiout", synthdata);
+ synthdata->midioutModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_jackout() {
+
+ M_jackout *m = new M_jackout(viewport(), "M_jackout", synthdata);
+ synthdata->jackoutModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+ synthdata->jackOutCount++;
+// if (!synthdata->jackRunning) {
+// synthdata->activateJack();
+// }
+}
+void ModularSynth::newM_jackin() {
+
+ M_jackin *m = new M_jackin(viewport(), "M_jackin", synthdata);
+ synthdata->jackinModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+ synthdata->jackInCount++;
+// if (!synthdata->jackRunning) {
+// synthdata->activateJack();
+// }
+}
+
+void ModularSynth::newM_scope() {
+
+ M_scope *m = new M_scope(viewport(), "M_scope", synthdata);
+ synthdata->scopeModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_spectrum() {
+
+ M_spectrum *m = new M_spectrum(viewport(), "M_spectrum", synthdata);
+ synthdata->spectrumModuleList.append((QObject *)m);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_in() {
+
+ if (!synthdata->moduleInCount) {
+ synthdata->pcm_capture_handle = open_pcm(true);
+ synthdata->doCapture = synthdata->doSynthesis;
+ if (!capture->running()) {
+ capture->start();
+ }
+ }
+ synthdata->moduleInCount++;
+ M_in *m = new M_in(viewport(), "M_in", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcf() {
+
+ M_vcf *m = new M_vcf(viewport(), "M_vcf", synthdata);
+ initNewModule((Module *)m);
+}
+
+void ModularSynth::moveModule(QPoint pos) {
+
+ int l1;
+ Module *m;
+ int cx, cy;
+
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if ((m=listModule.at(l1)) == sender()) {
+ viewportToContents(pos.x() - m->getMousePressPos().x() + m->pos().x(),
+ pos.y() - m->getMousePressPos().y() + m->pos().y(),
+ cx, cy);
+ moveChild(m, cx, cy);
+ }
+ }
+}
+
+void ModularSynth::moveTextEdit(QPoint pos) {
+
+ int l1;
+ TextEdit *te;
+ int cx, cy;
+
+ for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+ if ((te=listTextEdit.at(l1)) == sender()) {
+ viewportToContents(pos.x() - te->getMousePressPos().x() + te->pos().x(),
+ pos.y() - te->getMousePressPos().y() + te->pos().y(),
+ cx, cy);
+ moveChild(te, cx, cy);
+ }
+ }
+}
+
+void ModularSynth::resizeTextEdit(QPoint pos) {
+
+ int l1;
+ TextEdit *te;
+ int cx, cy;
+
+ for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+ if ((te=listTextEdit.at(l1)) == sender()) {
+ cx = pos.x();
+ cy = pos.y();
+ if ((cx > 200) && (cy > 170)) {
+ te->setFixedSize(cx + 3, cy + 3);
+ }
+ }
+ }
+}
+
+void ModularSynth::portSelected() {
+
+ if (firstPort) {
+ firstPort = false;
+ connectingPort[0] = (Port *)sender();
+ connectingPort[0]->highlighted = true;
+ connectingPort[0]->repaint(false);
+ } else {
+ firstPort = true;
+ connectingPort[1] = (Port *)sender();
+ connectingPort[0]->highlighted = false;
+ connectingPort[0]->repaint(false);
+ connectingPort[1]->highlighted = false;
+ connectingPort[1]->repaint(false);
+ if ((((connectingPort[0]->dir == PORT_IN) && (connectingPort[1]->dir == PORT_OUT))
+ ||((connectingPort[1]->dir == PORT_IN) && (connectingPort[0]->dir == PORT_OUT)))
+ && (connectingPort[0]->parentModule != connectingPort[1]->parentModule)) {
+ connectingPort[0]->connectTo(connectingPort[1]);
+ connectingPort[1]->connectTo(connectingPort[0]);
+ repaintContents(false);
+ } else {
+ printf("Connection refused.\n");
+ connectingPort[0] = NULL;
+ connectingPort[1] = NULL;
+ }
+ }
+}
+
+void ModularSynth::updatePortConnections() {
+
+ repaintContents(false);
+}
+
+void ModularSynth::deleteModule() {
+
+ Module *m;
+
+ connectingPort[0] = NULL;
+ connectingPort[1] = NULL;
+ firstPort = true;
+ m = (Module *)sender();
+ midiWidget->deleteModule(m);
+ if (m->M_type == M_type_env) {
+ synthdata->listM_env.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_vcenv) {
+ synthdata->listM_vcenv.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_advenv) {
+ synthdata->listM_advenv.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_dynamicwaves) {
+ synthdata->listM_dynamicwaves.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_mcv) {
+ synthdata->listM_mcv.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_advmcv) {
+ synthdata->listM_advmcv.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_out) {
+ synthdata->moduleOutCount--;
+ if (!synthdata->moduleOutCount) {
+ sleep(1);
+ snd_pcm_close(synthdata->pcm_handle);
+ }
+ synthdata->outModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_jackout) {
+ synthdata->jackOutCount--;
+// if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+// synthdata->deactivateJack();
+// }
+ synthdata->jackoutModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_jackin) {
+ synthdata->jackInCount--;
+// if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+// synthdata->deactivateJack();
+// }
+ synthdata->jackinModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_wavout) {
+ synthdata->wavoutModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_midiout) {
+ synthdata->midioutModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_scope) {
+ synthdata->scopeModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_spectrum) {
+ synthdata->spectrumModuleList.removeRef((QObject *)sender());
+ }
+ if (m->M_type == M_type_in) {
+ synthdata->moduleInCount--;
+ if (!synthdata->moduleInCount) {
+ synthdata->doCapture = false;
+ sleep(1);
+ snd_pcm_close(synthdata->pcm_capture_handle);
+ }
+ }
+ listModule.removeRef(m);
+ delete(m);
+}
+
+void ModularSynth::deleteTextEdit() {
+
+ listTextEdit.removeRef((TextEdit *)sender());
+ delete((TextEdit *)sender());
+}
+
+void ModularSynth::deleteTextEdit(TextEdit *te) {
+
+ delete(te);
+}
+
+void ModularSynth::deleteModule(Module *m) {
+
+ midiWidget->deleteModule(m);
+ if (m->M_type == M_type_env) {
+ synthdata->listM_env.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_vcenv) {
+ synthdata->listM_vcenv.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_advenv) {
+ synthdata->listM_advenv.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_dynamicwaves) {
+ synthdata->listM_dynamicwaves.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_mcv) {
+ synthdata->listM_mcv.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_advmcv) {
+ synthdata->listM_advmcv.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_out) {
+ synthdata->moduleOutCount--;
+ if (!synthdata->moduleOutCount) {
+ sleep(1);
+ snd_pcm_close(synthdata->pcm_handle);
+ }
+ synthdata->outModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_jackout) {
+ synthdata->jackOutCount--;
+// if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+// synthdata->deactivateJack();
+// }
+ synthdata->jackoutModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_jackin) {
+ synthdata->jackInCount--;
+// if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+// synthdata->deactivateJack();
+// }
+ synthdata->jackinModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_wavout) {
+ synthdata->wavoutModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_midiout) {
+ synthdata->midioutModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_scope) {
+ synthdata->scopeModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_spectrum) {
+ synthdata->spectrumModuleList.removeRef((QObject *)m);
+ }
+ if (m->M_type == M_type_in) {
+ synthdata->moduleInCount--;
+ if (!synthdata->moduleInCount) {
+ synthdata->doCapture = false;
+ sleep(1);
+ snd_pcm_close(synthdata->pcm_capture_handle);
+ }
+ }
+ delete(m);
+}
+
+void ModularSynth::clearConfig() {
+
+ int l1;
+ bool restartSynth;
+ QString qs;
+
+ qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d", clientid, portid);
+ mainWindow->setCaption(qs);
+ restartSynth = synthdata->doSynthesis;
+ synthdata->doSynthesis = false;
+ synthdata->doCapture = false;
+ if (!synthdata->withJack) {
+ while(synth->running()) {
+ sleep(1);
+ }
+ } else {
+// synthdata->deactivateJack();
+// sleep(1);
+ }
+ guiWidget->clearGui();
+// delete guiWidget;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ deleteModule(listModule.at(l1));
+ }
+ listModule.clear();
+ for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+ deleteTextEdit(listTextEdit.at(l1));
+ }
+ listTextEdit.clear();
+ synthdata->moduleID = 0;
+ synthdata->moduleCount = 0;
+// guiWidget = new GuiWidget(synthdata, NULL);
+// guiWidget->setCaption("AlsaModularSynth Parameter View");
+// synthdata->guiWidget = (QObject *)guiWidget;
+ if (restartSynth) {
+ synthdata->doSynthesis = true;
+ if (!synthdata->withJack) {
+ if (!synth->running()) {
+ synth->start();
+ } else {
+ fprintf(stderr, "Audio thread is already running...\n");
+ }
+ if (synthdata->moduleInCount) {
+ synthdata->doCapture = true;
+ if (!capture->running()) {
+ capture->start();
+ } else {
+ fprintf(stderr, "Capture thread is already running...\n");
+ }
+ }
+ }
+ }
+}
+
+void ModularSynth::load() {
+
+ QString config_fn;
+
+ if (presetPath.isEmpty()) {
+ if (!(config_fn = QString(QFileDialog::getOpenFileName(QString::null, "AlsaModularSynth files (*.ams)")))) {
+ return;
+ }
+ } else {
+ if (!(config_fn = QString(QFileDialog::getOpenFileName(presetPath, "AlsaModularSynth files (*.ams)")))) {
+ return;
+ }
+ }
+ load(&config_fn);
+}
+
+void ModularSynth::load(QString *presetName) {
+
+ int l1, l2;
+ int M_type, moduleID, index, value, x, y, w, h, subID1, subID2;
+ int index1, index2, moduleID1, moduleID2, midiSign;
+ int index_read1, index_read2, moduleID_read1, moduleID_read2;
+ int type, ch, param, isLogInt, midiIndex, sliderMin, sliderMax;
+ FILE *f;
+ QString config_fn, qs, qs2, ladspaLibName, pluginName, para, scalaName;
+ char sc[2048];
+ bool restartSynth, isLog, ladspaLoadErr, commentFlag, followConfig;
+ int newLadspaPolyFlag, textEditID;
+ Module *m;
+ int currentProgram;
+
+ restartSynth = synthdata->doSynthesis;
+ synthdata->doSynthesis = false;
+ followConfig = midiWidget->followConfig;
+ midiWidget->followConfig = false;
+ config_fn = *presetName;
+ currentProgram = -1;
+ if (!(f = fopen(config_fn, "r"))) {
+ QMessageBox::information( this, "AlsaModularSynth", "Could not open file.");
+ } else {
+ clearConfig();
+ qs2 = config_fn.mid(config_fn.findRev('/') + 1);
+ qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d - %s", clientid, portid, qs2.latin1());
+ mainWindow->setCaption(qs);
+ ladspaLoadErr = false;
+ commentFlag = false;
+ loadingPatch = true;
+ while(fscanf(f, "%s", sc) != EOF) {
+ qs = QString(sc);
+ if (qs.contains("#PARA#", false)) {
+ commentFlag = true;
+ }
+ if (qs.contains("#ARAP#", false)) {
+ commentFlag = false;
+ }
+ if (qs.contains("Module", false) && !commentFlag) {
+ fscanf(f, "%d", &M_type);
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &x);
+ fscanf(f, "%d", &y);
+ switch ((M_typeEnum)M_type) {
+ case M_type_ladspa:
+ fscanf(f, "%d", &newLadspaPolyFlag);
+ fscanf(f, "%s", sc);
+ ladspaLibName = QString(sc);
+ fgets(sc, 2048, f);
+ sc[strlen(sc)-1] = '\0';
+ pluginName = QString(sc+1);
+ fprintf(stderr, "Loading LADSPA plugin \"%s\" from library \"%s\".\n", pluginName.latin1(), ladspaLibName.latin1());
+ if (!synthdata->getLadspaIDs(ladspaLibName, pluginName, &subID1, &subID2)) {
+ sprintf(sc, "Could not find LADSPA plugin \"%s\" from library \"%s\".\n", pluginName.latin1(), ladspaLibName.latin1());
+ QMessageBox::information( this, "AlsaModularSynth", QString(sc));
+ ladspaLoadErr = true;
+ }
+ break;
+ case M_type_scquantizer:
+ fscanf(f, "%s", &sc);
+ scalaName = QString(sc);
+ break;
+ case M_type_scmcv:
+ fscanf(f, "%s", &sc);
+ scalaName = QString(sc);
+ break;
+ default:
+ fscanf(f, "%d", &subID1);
+ fscanf(f, "%d", &subID2);
+ break;
+ }
+ switch((M_typeEnum)M_type) {
+ case M_type_custom:
+ break;
+ case M_type_vco:
+ newM_vco();
+ break;
+ case M_type_vca:
+ if (subID1) {
+ newM_vca_exp();
+ } else {
+ newM_vca_lin();
+ }
+ break;
+ case M_type_vcf:
+ newM_vcf();
+ break;
+ case M_type_lfo:
+ newM_lfo();
+ break;
+ case M_type_noise:
+ newM_noise();
+ break;
+ case M_type_delay:
+ newM_delay();
+ break;
+ case M_type_seq:
+ newM_seq(subID1);
+ break;
+ case M_type_env:
+ newM_env();
+ break;
+ case M_type_vcenv:
+ newM_vcenv();
+ break;
+ case M_type_advenv:
+ newM_advenv();
+ break;
+ case M_type_mcv:
+ newM_mcv();
+ break;
+ case M_type_advmcv:
+ newM_advmcv();
+ break;
+ case M_type_scmcv:
+ newM_scmcv(&scalaName);
+ break;
+ case M_type_ringmod:
+ newM_ringmod();
+ break;
+ case M_type_inv:
+ newM_inv();
+ break;
+ case M_type_conv:
+ newM_conv();
+ break;
+ case M_type_sh:
+ newM_sh();
+ break;
+ case M_type_vcswitch:
+ newM_vcswitch();
+ break;
+ case M_type_cvs:
+ newM_cvs();
+ break;
+ case M_type_slew:
+ newM_slew();
+ break;
+ case M_type_quantizer:
+ newM_quantizer();
+ break;
+ case M_type_scquantizer:
+ newM_scquantizer(&scalaName);
+ break;
+ case M_type_mix:
+ newM_mix(subID1);
+ break;
+ case M_type_stereomix:
+ newM_stereomix(subID1);
+ break;
+ case M_type_vcorgan:
+ newM_vcorgan(subID1);
+ break;
+ case M_type_dynamicwaves:
+ newM_dynamicwaves(subID1);
+ break;
+ case M_type_ladspa:
+ if (!ladspaLoadErr) {
+ newM_ladspa(subID1, subID2, newLadspaPolyFlag & 2, newLadspaPolyFlag & 1);
+ }
+ break;
+ case M_type_out:
+ if (synthdata->withJack) {
+ newM_jackout();
+ } else {
+ newM_out();
+ }
+ break;
+ case M_type_jackout:
+ if (synthdata->withJack) {
+ newM_jackout();
+ } else {
+ newM_out();
+ }
+ break;
+ case M_type_jackin:
+ if (synthdata->withJack) {
+ newM_jackin();
+ } else {
+ newM_in();
+ }
+ break;
+ case M_type_wavout:
+ newM_wavout();
+ break;
+ case M_type_midiout:
+ newM_midiout();
+ break;
+ case M_type_scope:
+ newM_scope();
+ break;
+ case M_type_spectrum:
+ newM_spectrum();
+ break;
+ case M_type_in:
+ if (synthdata->withJack) {
+ newM_jackin();
+ } else {
+ newM_in();
+ }
+ break;
+ }
+ m = listModule.at(listModule.count()-1);
+ moveChild(m, x, y);
+ m->moduleID=moduleID;
+ qs = m->configDialog->caption();
+ qs2 = qs.left(qs.findRev(" "));
+ qs.sprintf(" %d", moduleID);
+ m->configDialog->setCaption(qs2+qs);
+ midiWidget->addModule(m);
+ if (synthdata->moduleID <= moduleID) {
+ synthdata->moduleID = moduleID+1;
+ }
+ }
+ if (qs.contains("Comment", false) && !commentFlag) {
+ fscanf(f, "%d", &textEditID);
+ fscanf(f, "%d", &textEditID); // TODO textEditID is not needed yet
+ fscanf(f, "%d", &x);
+ fscanf(f, "%d", &y);
+ fscanf(f, "%d", &w);
+ fscanf(f, "%d", &h);
+ new_textEdit(x, y, w, h);
+ }
+ }
+ rewind(f);
+ while((fscanf(f, "%s", sc) != EOF) && !ladspaLoadErr) {
+ qs = QString(sc);
+ if (qs.contains("Port", false)) {
+ fscanf(f, "%d", &index1);
+ fscanf(f, "%d", &index2);
+ fscanf(f, "%d", &moduleID1);
+ fscanf(f, "%d", &moduleID2);
+ moduleID_read1 = 0;
+ moduleID_read2 = 0;
+ index_read1 = 0;
+ index_read2 = 0;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID1) {
+ moduleID_read1 = l1;
+ }
+ if (listModule.at(l1)->moduleID == moduleID2) {
+ moduleID_read2 = l1;
+ }
+ }
+ for (l1 = 0; l1 < listModule.at(moduleID_read1)->portList.count(); l1++) {
+ if ((listModule.at(moduleID_read1)->portList.at(l1)->index == index1)
+ && (listModule.at(moduleID_read1)->portList.at(l1)->dir == PORT_IN)) {
+ index_read1 = l1;
+ }
+ }
+ for (l1 = 0; l1 < listModule.at(moduleID_read2)->portList.count(); l1++) {
+ if ((listModule.at(moduleID_read2)->portList.at(l1)->index == index2)
+ && (listModule.at(moduleID_read2)->portList.at(l1)->dir == PORT_OUT)) {
+ index_read2 = l1;
+ }
+ }
+ listModule.at(moduleID_read1)->portList.at(index_read1)->connectTo(listModule.at(moduleID_read2)->portList.at(index_read2));
+ listModule.at(moduleID_read2)->portList.at(index_read2)->connectTo(listModule.at(moduleID_read1)->portList.at(index_read1));
+ }
+ if (qs.contains("FSlider", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ fscanf(f, "%d", &isLogInt);
+ fscanf(f, "%d", &sliderMin);
+ fscanf(f, "%d", &sliderMax);
+ fscanf(f, "%d", &midiSign);
+ isLog = isLogInt == 1;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->setLogMode(isLog);
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->updateValue(value);
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->setLogMode(isLog);
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->setNewMin(sliderMin);
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->setNewMax(sliderMax);
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->midiSign = midiSign;
+ break;
+ }
+ }
+ }
+ if (qs.contains("ISlider", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ fscanf(f, "%d", &midiSign);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ listModule.at(l1)->configDialog->intMidiSliderList.at(index)->slider->setValue((int)value);
+ listModule.at(l1)->configDialog->intMidiSliderList.at(index)->midiSign = midiSign;
+ break;
+ }
+ }
+ }
+ if (qs.contains("LSlider", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ fscanf(f, "%d", &midiSign);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->slider->setValue((int)value);
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->midiSign = midiSign;
+ break;
+ }
+ }
+ }
+ if (qs.contains("ComboBox", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ fscanf(f, "%d", &midiSign);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ listModule.at(l1)->configDialog->midiComboBoxList.at(index)->comboBox->setCurrentItem(value);
+ listModule.at(l1)->configDialog->midiComboBoxList.at(index)->midiSign = midiSign;
+ break;
+ }
+ }
+ }
+ if (qs.contains("CheckBox", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ fscanf(f, "%d", &midiSign);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->checkBox->setChecked(value==1);
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->midiSign = midiSign;
+ break;
+ }
+ }
+ }
+ if (qs.contains("MIDI", false)) {
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &type);
+ fscanf(f, "%d", &ch);
+ fscanf(f, "%d", ¶m);
+ MidiController *midiController = new MidiController(type, ch, param);
+ if (!midiWidget->midiControllerList.contains(midiController)) {
+ midiWidget->addMidiController(midiController);
+ } else {
+ midiIndex = midiWidget->midiControllerList.find(midiController);
+ delete(midiController);
+ midiController = midiWidget->midiControllerList.at(midiIndex);
+ }
+ if (qs.contains("FSMIDI", false)) {
+ listModule.at(l1)->configDialog->midiSliderList.at(index)->connectToController(midiController);
+ }
+ if (qs.contains("ISMIDI", false)) {
+ listModule.at(l1)->configDialog->intMidiSliderList.at(index)->connectToController(midiController);
+ }
+ if (qs.contains("LSMIDI", false)) {
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->connectToController(midiController);
+ }
+ if (qs.contains("CMIDI", false)) {
+ listModule.at(l1)->configDialog->midiComboBoxList.at(index)->connectToController(midiController);
+ }
+ if (qs.contains("TMIDI", false)) {
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->connectToController(midiController);
+ }
+ }
+ if (qs.contains("#PARA#", false)) {
+ fscanf(f, "%d", &textEditID);
+ fscanf(f, "%d", &textEditID);
+ fscanf(f, "%d", &index);
+ fscanf(f, "%s", sc);
+ qs = QString(sc);
+ if (!qs.contains("#ARAP#", false)) {
+ para = QString(sc) + " ";
+ } else {
+ para = "\n";
+ }
+ while (!qs.contains("#ARAP#", false)) {
+ fscanf(f, "%s", sc);
+ qs = QString(sc);
+ if (!qs.contains("#ARAP#", false)) {
+ para.append(qs+" ");
+ }
+ }
+ listTextEdit.at(textEditID)->textEdit->insertParagraph(para, index);
+ }
+ if (qs.contains("Frame", false)) {
+ qs.truncate(0);
+ do {
+ fscanf(f, "%s", sc);
+ qs += QString(sc);
+ if (qs.right(1) != "\"") {
+ qs += " ";
+ }
+ } while (qs.right(1) != "\"");
+ qs = qs.mid(1, qs.length()-2);
+ guiWidget->addFrame(qs);
+ }
+ if (qs.contains("Parameter", false)) {
+ qs.truncate(0);
+ do {
+ fscanf(f, "%s", sc);
+ qs += QString(sc);
+ if (qs.right(1) != "\"") {
+ qs += " ";
+ }
+ } while (qs.right(1) != "\"");
+ qs = qs.mid(1, qs.length()-2);
+ fscanf(f, "%d", &moduleID);
+ fscanf(f, "%d", &index);
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ if (listModule.at(l1)->moduleID == moduleID) {
+ guiWidget->addParameter(listModule.at(l1)->configDialog->midiGUIcomponentList.at(index), qs);
+ if (listModule.at(l1)->configDialog->midiGUIcomponentList.at(index)->componentType == GUIcomponentType_slider) {
+ fscanf(f, "%d", &sliderMin);
+ fscanf(f, "%d", &sliderMax);
+ fscanf(f, "%d", &isLogInt);
+ ((MidiSlider *)guiWidget->parameterList.last())->setNewMin(sliderMin);
+ ((MidiSlider *)guiWidget->parameterList.last())->setNewMax(sliderMax);
+ ((MidiSlider *)guiWidget->parameterList.last())->setLogMode(isLogInt == 1);
+ }
+ break;
+ }
+ }
+ }
+ if (qs.contains("Program", false)) {
+ fscanf(f, "%d", &index);
+ fscanf(f, "%d", &value);
+ if (index != currentProgram) {
+ currentProgram = index;
+ guiWidget->setPresetCount(currentProgram + 1);
+ }
+ guiWidget->presetList[currentProgram].append(value);
+ }
+ }
+ if (guiWidget->presetCount) {
+ guiWidget->setCurrentPreset(0);
+ }
+ fclose(f);
+ loadingPatch = false;
+ }
+ synthdata->doSynthesis = true;
+ if (!synthdata->withJack) {
+ if (restartSynth && !synth->running()) {
+ synth->start();
+ } else {
+ fprintf(stderr, "Audio thread is already running...\n");
+ }
+ if (synthdata->moduleInCount) {
+ synthdata->doCapture = true;
+ if (!capture->running()) {
+ capture->start();
+ } else {
+ fprintf(stderr, "Capture thread is already running...\n");
+ }
+ }
+ }
+ midiWidget->followConfig = followConfig;
+}
+
+void ModularSynth::save() {
+
+ Port *port[2];
+ int l1, l2, l3, value;
+ FILE *f;
+ QString config_fn, qs;
+ QValueList<int>::iterator it;
+
+ if (!(config_fn = QString(QFileDialog::getSaveFileName(savePath, "AlsaModularSynth files (*.ams)")))) {
+ return;
+ }
+ if (!(f = fopen(config_fn, "w"))) {
+ QMessageBox::information( this, "AlsaModularSynth", "Could not save file.");
+ } else {
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ fprintf(f, "Module %d %d %d %d ", (int)listModule.at(l1)->M_type, listModule.at(l1)->moduleID,
+ listModule.at(l1)->x(), listModule.at(l1)->y());
+ switch(listModule.at(l1)->M_type) {
+ case M_type_custom:
+ break;
+ case M_type_vca:
+ fprintf(f, "%d 0\n", (int)((M_vca *)listModule.at(l1))->expMode);
+ break;
+ case M_type_mix:
+ fprintf(f, "%d 0\n", ((M_mix *)listModule.at(l1))->in_channels);
+ break;
+ case M_type_stereomix:
+ fprintf(f, "%d 0\n", ((M_stereomix *)listModule.at(l1))->in_channels);
+ break;
+ case M_type_vcorgan:
+ fprintf(f, "%d 0\n", ((M_vcorgan *)listModule.at(l1))->oscCount);
+ break;
+ case M_type_dynamicwaves:
+ fprintf(f, "%d 0\n", ((M_dynamicwaves *)listModule.at(l1))->oscCount);
+ break;
+ case M_type_seq:
+ fprintf(f, "%d 0\n", ((M_seq *)listModule.at(l1))->seqLen);
+ break;
+ case M_type_ladspa:
+ fprintf(f, "%d %s %s\n", 2 * (int)((M_ladspa *)listModule.at(l1))->isPoly
+ + (int)((M_ladspa *)listModule.at(l1))->hasExtCtrlPorts,
+ synthdata->ladspa_lib_name[((M_ladspa *)listModule.at(l1))->ladspaDesFuncIndex].latin1(),
+ ((M_ladspa *)listModule.at(l1))->pluginName.latin1());
+ break;
+ case M_type_scquantizer:
+ qs = ((M_scquantizer *)listModule.at(l1))->sclname.latin1();
+ if (qs.contains("/")) {
+ qs = qs.mid(qs.findRev("/") + 1);
+ }
+ fprintf(f, "%s\n", qs.latin1());
+ break;
+ case M_type_scmcv:
+ qs = ((M_scmcv *)listModule.at(l1))->sclname.latin1();
+ if (qs.contains("/")) {
+ qs = qs.mid(qs.findRev("/") + 1);
+ }
+ fprintf(f, "%s\n", qs.latin1());
+ break;
+ default:
+ fprintf(f, "0 0\n");
+ break;
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->portList.count(); l2++) {
+ port[0] = listModule.at(l1)->portList.at(l2);
+ if ((port[0]->dir == PORT_IN) && port[0]->connectedPortList.count()) {
+ port[1] = port[0]->connectedPortList.at(0);
+ fprintf(f, "Port %d %d %d %d\n", port[0]->index, port[1]->index,
+ ((Module *)port[0]->parentModule)->moduleID, ((Module *)port[1]->parentModule)->moduleID);
+ }
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiSliderList.count(); l2++) {
+ fprintf(f, "FSlider %d %d %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->value(),
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->isLog,
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->minValue(),
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->maxValue(),
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiSign);
+ for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.count(); l3++) {
+ fprintf(f, "FSMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->type,
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+ listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->param);
+ }
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->configDialog->intMidiSliderList.count(); l2++) {
+ fprintf(f, "ISlider %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->slider->value(),
+ listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiSign);
+ for (l3 = 0; l3 < listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.count(); l3++) {
+ fprintf(f, "ISMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->type,
+ listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+ listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->param);
+ }
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->configDialog->floatIntMidiSliderList.count(); l2++) {
+ fprintf(f, "LSlider %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->slider->value(),
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiSign);
+ for (l3 = 0; l3 < listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.count(); l3++) {
+ fprintf(f, "LSMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->type,
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+ listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->param);
+ }
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiComboBoxList.count(); l2++) {
+ fprintf(f, "ComboBox %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->comboBox->currentItem(),
+ listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiSign);
+ for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.count(); l3++) {
+ fprintf(f, "CMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->type,
+ listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->ch,
+ listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->param);
+ }
+ }
+ for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiCheckBoxList.count(); l2++) {
+ fprintf(f, "CheckBox %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ (int)(listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->checkBox->isChecked()),
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiSign);
+ for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.count(); l3++) {
+ fprintf(f, "TMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->type,
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->ch,
+ listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->param);
+ }
+ }
+ }
+ for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+ fprintf(f, "Comment %d %d %d %d %d %d\n", listTextEdit.at(l1)->textEditID, l1,
+ listTextEdit.at(l1)->x(), listTextEdit.at(l1)->y(),
+ listTextEdit.at(l1)->width(), listTextEdit.at(l1)->height());
+ }
+ for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+ for (l2 = 0; l2 < listTextEdit.at(l1)->textEdit->paragraphs(); l2++) {
+ fprintf(f, "#PARA# %d %d %d\n", listTextEdit.at(l1)->textEditID, l1, l2);
+ fprintf(f, "%s\n", listTextEdit.at(l1)->textEdit->text(l2).latin1());
+ fprintf(f, "#ARAP#\n");
+ }
+ }
+
+ for (l1 = 0; l1 < guiWidget->frameBoxList.count(); l1++) {
+ fprintf(f, "Frame \"%s\"\n", guiWidget->frameBoxList.at(l1)->name());
+ for (l2 = 0; l2 < guiWidget->parameterList.count(); l2++) {
+ if (guiWidget->parameterList.at(l2)->parent() == guiWidget->frameBoxList.at(l1)) {
+ fprintf(f, "Parameter \"%s\" %d %d ", guiWidget->parameterList.at(l2)->name(),
+ ((Module *)guiWidget->parameterList.at(l2)->parentModule)->moduleID,
+ guiWidget->parameterList.at(l2)->midiGUIcomponentListIndex);
+ if (guiWidget->parameterList.at(l2)->componentType == GUIcomponentType_slider) {
+ fprintf(f, "%d %d %d\n", ((MidiSlider *)guiWidget->parameterList.at(l2))->slider->minValue(),
+ ((MidiSlider *)guiWidget->parameterList.at(l2))->slider->maxValue(),
+ ((MidiSlider *)guiWidget->parameterList.at(l2))->isLog);
+ } else {
+ fprintf(f, "\n");
+ }
+ }
+ }
+ }
+
+ for (l1 = 0; l1 < guiWidget->presetCount; l1++) {
+ for (it = guiWidget->presetList[l1].begin(); it != guiWidget->presetList[l1].end(); it++) {
+ value = *it;
+ fprintf(f, "Program %d %d\n", l1, value);
+ }
+ }
+
+ fclose(f);
+ }
+}
+
+void ModularSynth::allVoicesOff() {
+
+ int l1, l2;
+
+ for (l2 = 0; l2 < synthdata->poly; l2++) {
+ if (synthdata->notePressed[l2]) {
+ synthdata->notePressed[l2] = false;
+ synthdata->noteActive[l2] = false;
+ for (l1 = 0; l1 < listModule.count(); l1++) {
+ listModule.at(l1)->noteOffEvent(l2);
+ }
+ }
+ }
+}
+
+void ModularSynth::cleanUpSynth() {
+
+ fprintf(stderr, "Closing Synth...\n");
+ if (synthdata->withJack && synthdata->jackRunning) {
+ synthdata->deactivateJack();
+ }
+ fprintf(stderr, "Ready.\n");
+}
Added: ams/trunk/debian/.#changelog.1.3
===================================================================
--- ams/trunk/debian/.#changelog.1.3 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/.#changelog.1.3 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,42 @@
+ams (1.6.0-0test3) unstable; urgency=low
+
+ * added watch file
+ * ams will open /usr/share/ams as the default patch directory
+ * removed ams.examples; all the patches are now in /usr/share/ams
+ * debian/control: added dpatch and libqt3-compat-headers build dependency
+
+ -- Free Ekanayaka <free@agnula.org> Thu, 4 Dec 2003 11:23:31 +0600
+
+ams (1.6.0-0test2) unstable; urgency=low
+
+ * debian/ams.1: added manpage (submitted by <d.phillips@agnula.org>)
+ * depends on libjack-dev instead than libjack0.71.2-dev
+ * debian/ams: small script to export the correct value for LADSPA_PATH
+
+ -- Andrea Glorioso <andrea.glorioso@agnula.org> Fri, 21 Nov 2003 12:08:10 +0100
+
+ams (1.6.0-0test1) unstable; urgency=low
+
+ * New upstream version.
+ * Using dpatch from now on.
+
+ -- Andrea Glorioso <andrea.glorioso@agnula.org> Thu, 20 Nov 2003 12:16:00 +0100
+
+ams (1.5.9-1.agnula-1) unstable; urgency=low
+
+ * Repackaged for AGNULA.
+
+ -- Free Ekanayaka <free@centrotemporeale.it> Tue, 22 Jul 2003 11:13:36 +0200
+
+ams (1.5.9-1) unstable; urgency=low
+
+ * New upstream.
+
+ -- Free Ekanayaka <free@centrotemporeale.it> Fri, 4 Jul 2003 10:01:37 +0200
+
+ams (1.4.12-1) unstable; urgency=low
+
+ * Initial Release.
+
+ -- Free Ekanayaka <free@centrotemporeale.it> Wed, 25 Sep 2002 12:14:00 +0000
+
Added: ams/trunk/debian/ams.1
===================================================================
--- ams/trunk/debian/ams.1 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/ams.1 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,119 @@
+.\" Copyright (c) 2003 Dave Phillips
+.\"
+.\" This is free documentation; 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.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual 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 manual; if not, write to the Free
+.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+.\" USA.
+.\"
+.TH AlsaModularSynth 1 "November 2003"
+.SH NAME
+AlsaModularSynth (AMS) - A software synthesizer modeled after modular patching synthesizers
+.SH SYNOPSIS
+.BI "ams [" OPTIONS "]"
+.SH DESCRIPTION
+The
+.B AlsaModularSynth
+(AMS) is a software synthesizer designed after the great analog modular synths of the 1960s. It employs
+virtual control voltages (VC) for each module's parameter control, using the the
+.B Moog
+synthesizer's 1V/oct logarithmic control scale for its oscillator and filter functions.
+
+Following the modular synth model
+.B AMS
+supplies the user with a variety of sound-producing and sound-processing software modules
+such as digital oscillators, filters, amplifiers, and DSP effects. These modules are linked together
+(patched) to create complex audio synthesis networks. These network patches can be played in
+realtime via MIDI or internal control structures, and they may be saved and reloaded at will.
+
+.SH OPTIONS
+Runtime options for
+.B AMS
+are shown here with their default values in brackets.
+
+.TP 10
+.B --jack
+Enable JACK I/O
+
+.TP 10
+.BI "--in " <num>
+Number of JACK input ports
+
+.TP 10
+.BI "--out " <num>
+Number of JACK output ports
+
+.TP 10
+.BI "--poly " <num>
+Polyphony [1]
+
+.TP 10
+.BI "--periodsize " <frames>
+Period size [1024]
+
+.TP 10
+.BI "--frag " <num>
+Number of fragments [2]
+
+.TP 10
+.BI "--rate " <samples/s>
+Sample rate [44100]
+
+.TP 10
+.BI "--edge " <0...10>
+VCO edge [1.0]
+
+.TP 10
+.BI "--soundcard " <plug>
+Soundcard [plughw:0,0]
+
+.TP 10
+.BI "--preset " <file>
+Preset file
+
+.TP 10
+.BI "--presetpath " <path>
+Preset path
+
+.TP 10
+.B --nogui
+Start without GUI
+
+.SH FILES
+Numerous example patches can be found in
+.I /usr/share/ams
+or
+.I /usr/local/share/ams.
+
+Tutorial documentation is available at
+.I http://alsamodular.sourceforge.net/alsamodularsynth_doc.html.
+
+.SH BUGS
+Please send bug reports or any other feedback to Matthias Nagorni <mana@suse.de>
+
+.SH AUTHOR
+.B AMS
+is written and maintained by Dr. Matthias Nagorni.
+
+.SH COPYRIGHT
+Copyright and license information for
+.B AMS:
+
+.B AlsaModularSynth
+by Matthias Nagorni (c) 2002-2003 SuSE AG Nuremberg.
+Licensed under the
+.B GNU Public License.
Added: ams/trunk/debian/changelog
===================================================================
--- ams/trunk/debian/changelog 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/changelog 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,83 @@
+ams (1.8.7-1) unstable; urgency=low
+
+ * New upstream release
+ * First Debian upload (closes: #203902), sponsored by
+ Cosimo Alfarano <kalfa@debian.org>
+ * Updated Standards-Version to 3.6.1.1
+
+ -- Free Ekanayaka <free@agnula.org> Tue, 31 Aug 2004 14:21:00 +0200
+
+ams (1.8.6-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Free Ekanayaka <free@free> Tue, 20 Jul 2004 14:35:18 +0200
+
+ams (1.7.7-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Free Ekanayaka <free@agnula.org> Wed, 14 Apr 2004 14:27:17 +0200
+
+ams (1.7.6-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Free Ekanayaka <free@agnula.org> Fri, 12 Mar 2004 14:39:28 +0100
+
+ams (1.7.1-0test2) unstable; urgency=low
+
+ * the /usr/bin/ams wrapper script wasn't considering command line
+ paramenters when launching /usr/share/ams.real. fixed adding a
+ simple $\@
+
+ -- Free Ekanayaka <free@agnula.org> Fri, 16 Jan 2004 13:10:26 +0100
+
+ams (1.7.1-0test1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Free Ekanayaka <free@agnula.org> Sat, 20 Dec 2003 11:37:11 +0600
+
+ams (1.6.0-0test3) unstable; urgency=low
+
+ * added watch file
+ * ams will open /usr/share/ams as the default patch directory
+ * removed ams.examples; all the patches are now in /usr/share/ams
+ * debian/control: added dpatch and libqt3-compat-headers build dependency
+
+ -- Free Ekanayaka <free@agnula.org> Thu, 4 Dec 2003 11:23:31 +0600
+
+ams (1.6.0-0test2) unstable; urgency=low
+
+ * debian/ams.1: added manpage (submitted by <d.phillips@agnula.org>)
+ * depends on libjack-dev instead than libjack0.71.2-dev
+ * debian/ams: small script to export the correct value for LADSPA_PATH
+
+ -- Andrea Glorioso <andrea.glorioso@agnula.org> Fri, 21 Nov 2003 12:08:10 +0100
+
+ams (1.6.0-0test1) unstable; urgency=low
+
+ * New upstream version.
+ * Using dpatch from now on.
+
+ -- Andrea Glorioso <andrea.glorioso@agnula.org> Thu, 20 Nov 2003 12:16:00 +0100
+
+ams (1.5.9-1.agnula-1) unstable; urgency=low
+
+ * Repackaged for AGNULA.
+
+ -- Free Ekanayaka <free@centrotemporeale.it> Tue, 22 Jul 2003 11:13:36 +0200
+
+ams (1.5.9-1) unstable; urgency=low
+
+ * New upstream.
+
+ -- Free Ekanayaka <free@centrotemporeale.it> Fri, 4 Jul 2003 10:01:37 +0200
+
+ams (1.4.12-1) unstable; urgency=low
+
+ * Initial Release.
+
+ -- Free Ekanayaka <free@centrotemporeale.it> Wed, 25 Sep 2002 12:14:00 +0000
+
Added: ams/trunk/debian/control
===================================================================
--- ams/trunk/debian/control 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/control 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,14 @@
+Source: ams
+Section: sound
+Priority: optional
+Maintainer: Free Ekanayaka <free@agnula.org>
+Build-Depends: debhelper (>> 3.0.0), libqt3-mt-dev, ladspa-sdk, libc6-dev, libasound2-dev, libjack-dev, fftw-dev, sfftw-dev, dpatch, libqt3-compat-headers, libclalsadrv-dev
+Standards-Version: 3.6.1.1
+
+Package: ams
+Architecture: any
+Depends: ${shlibs:Depends}, debconf
+Suggests: swh-plugins, cmt
+Description: Realtime modular synthesizer for ALSA
+ This is a soft synth with a Qt GUI. All parameters can be modified in
+ realtime via MIDI.
Added: ams/trunk/debian/copyright
===================================================================
--- ams/trunk/debian/copyright 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/copyright 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,14 @@
+This package was debianized by Free Ekanayaka <free@centrotemporeale.it> on
+Wed, 25 Sep 2002 12:14:00 +0000.
+
+It was downloaded from http://alsamodular.sourceforge.net
+
+Upstream Author: Matthias Nagorni <mana@suse.de>
+
+Copyright:
+
+This software is copyright by Matthias Nagorni <mana@suse.de>
+You are free to distribute this software under the terms of
+the GNU General Public License.
+On Debian systems, the complete text of the GNU General Public
+License can be found in /usr/share/common-licenses/GPL file.
Added: ams/trunk/debian/dirs
===================================================================
--- ams/trunk/debian/dirs 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/dirs 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,2 @@
+usr/bin
+usr/lib/ams
Added: ams/trunk/debian/docs
===================================================================
--- ams/trunk/debian/docs 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/docs 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,5 @@
+README
+THANKS
+demos/
+instruments/
+tutorial/
Added: ams/trunk/debian/manpages
===================================================================
--- ams/trunk/debian/manpages 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/manpages 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1 @@
+debian/ams.1
Added: ams/trunk/debian/menu
===================================================================
--- ams/trunk/debian/menu 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/menu 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,2 @@
+?package(ams):needs="X11" section="Apps/Sound"\
+ title="ALSA modular synth" command="/usr/bin/ams" hints="Softsynth"
Added: ams/trunk/debian/patches/00list
===================================================================
--- ams/trunk/debian/patches/00list 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/patches/00list 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,2 @@
+10makefile
+11ams_launch_script
Added: ams/trunk/debian/patches/10makefile.dpatch
===================================================================
--- ams/trunk/debian/patches/10makefile.dpatch 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/patches/10makefile.dpatch 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,65 @@
+#! /bin/sh -e
+## 10makefile.dpatch by Free Ekanayaka <free@agnula.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+if [ $# -lt 1 ]; then
+ echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"
+
+case "$1" in
+ -patch) patch -p1 ${patch_opts} < $0;;
+ -unpatch) patch -R -p1 ${patch_opts} < $0;;
+ *)
+ echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/free/demudi/packages/ams/ams-1.8.7/Makefile ams-1.8.7/Makefile
+--- /home/free/demudi/packages/ams/ams-1.8.7/Makefile 2004-08-31 14:31:35.000000000 +0200
++++ ams-1.8.7/Makefile 2004-08-31 14:42:38.000000000 +0200
+@@ -1,10 +1,14 @@
+-QT_BASE_DIR=/usr/lib/qt3
+-QT_LIB_DIR=$(QT_BASE_DIR)/lib
++QT_BASE_DIR=/usr
++QT_LIB_DIR=$(QT_BASE_DIR)/lib/qt3
+ QT_BIN_DIR=$(QT_BASE_DIR)/bin
+-QT_INCLUDE_DIR=$(QT_BASE_DIR)/include
++QT_INCLUDE_DIR=$(QT_BASE_DIR)/include/qt3
+ X11_LIB_DIR=/usr/X11R6/lib
+ LADSPA_PATH?=/usr/lib/ladspa:/usr/local/lib/ladspa
+-VERSION=1.8.6
++VERSION=1.8.7
++
++BINARY = ams.real
++DESTDIR =
++BIN = $(DESTDIR)/usr/lib/ams
+
+ #CXXFLAGS=-DQT_THREAD_SUPPORT -I$(QT_INCLUDE_DIR) -DLADSPA_PATH=\"$(LADSPA_PATH)\" -I/usr/X11R6/include -I. -O2 -g -Wall
+ CXXFLAGS=-DQT_THREAD_SUPPORT -I$(QT_INCLUDE_DIR) -DLADSPA_PATH=\"$(LADSPA_PATH)\" -I/usr/X11R6/include -I. -O2 -Wall
+@@ -77,11 +81,15 @@
+ modularsynth.o modularsynth.moc.o \
+ main.o
+
+-ams: $(AMS_O)
+- gcc -g -o ams $(AMS_O) \
++$(BINARY): $(AMS_O)
++ gcc -g -o $(BINARY) $(AMS_O) \
+ -L$(QT_LIB_DIR) -L$(X11_LIB_DIR) \
+ -lqt-mt -lclalsadrv -ljack -lasound -lsrfftw -lsfftw -lm
+
++install: $(BINARY)
++ install -d $(BIN)
++ install $(BINARY) $(BIN)
++
+ clean:
+ /bin/rm -f *.o *.moc.cpp *~
+
Added: ams/trunk/debian/patches/11ams_launch_script.dpatch
===================================================================
--- ams/trunk/debian/patches/11ams_launch_script.dpatch 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/patches/11ams_launch_script.dpatch 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+## 11ams_launch_script.dpatch by Free Ekanayaka <free@agnula.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+if [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+ -patch) patch $patch_opts -p1 < $0;;
+ -unpatch) patch $patch_opts -p1 -R < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/demudi/buster/ams/ams/ams ams/ams
+--- /home/demudi/buster/ams/ams/ams 1970-01-01 01:00:00.000000000 +0100
++++ ams/ams 2004-01-16 13:08:40.000000000 +0100
+@@ -0,0 +1,18 @@
++#!/bin/sh
++#
++# Little script to set up the environment before launching ams
++#
++# Copyright (C) 2003 Andrea Glorioso <andrea.glorioso@agnula.org>
++#
++# This script is licensed under the GNU GPL v2 - you can find a
++# complete copy of the license under /usr/share/common-licenses/GPL-2
++
++LADSPA_DEFAULT_PATH=/usr/lib/ladspa
++
++set | grep LADSPA_PATH | grep LADSPA_DEFAULT_PATH
++
++if [ $? -ne 0 ]; then
++ export LADSPA_PATH=${LADSPA_DEFAULT_PATH}:${LADSPA_PATH}
++fi
++
++/usr/lib/ams/ams.real $@
Added: ams/trunk/debian/patches/12default_patch_dir.dpatch
===================================================================
--- ams/trunk/debian/patches/12default_patch_dir.dpatch 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/patches/12default_patch_dir.dpatch 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,37 @@
+#!/bin/sh -e
+## 12default_patch_dir.dpatch by <free@agnula.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+if [ $# -ne 1 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+ -patch) patch $patch_opts -p1 < $0;;
+ -unpatch) patch $patch_opts -p1 -R < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/demudi/buster/ams/ams-1.6.0/modularsynth.cpp ams-1.6.0/modularsynth.cpp
+--- /home/demudi/buster/ams/ams-1.6.0/modularsynth.cpp 2003-11-27 21:02:36.000000000 +0600
++++ ams-1.6.0/modularsynth.cpp 2003-11-27 21:02:57.000000000 +0600
+@@ -1363,7 +1363,7 @@
+ QString config_fn;
+
+ if (presetPath.isEmpty()) {
+- if (!(config_fn = QString(QFileDialog::getOpenFileName(QString::null, "AlsaModularSynth files (*.ams)")))) {
++ if (!(config_fn = QString(QFileDialog::getOpenFileName("/usr/share/ams", "AlsaModularSynth files (*.ams)")))) {
+ return;
+ }
+ } else {
Added: ams/trunk/debian/rules
===================================================================
--- ams/trunk/debian/rules 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/rules 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,98 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# This is the debhelper compatibility version to use.
+export DH_COMPAT=3
+
+include /usr/share/dpatch/dpatch.make
+
+ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -g
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+ INSTALL_PROGRAM += -s
+endif
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ # Add here commands to configure the package.
+
+ touch configure-stamp
+
+
+build: build-stamp
+
+build-stamp: configure-stamp patch-stamp
+ dh_testdir
+
+ # Add here commands to compile the package.
+ $(MAKE)
+ #/usr/bin/docbook-to-man debian/ams.sgml > ams.1
+
+ touch build-stamp
+
+clean: unpatch
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+
+ # Add here commands to clean up after the build process.
+ -$(MAKE) clean
+ # This is a horrible hack because the patch for clean target
+ # is unapplied before we arrive here
+ rm -f *.o *.cpp.moc ams.real
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ # Add here commands to install the package into debian/ams.
+ $(MAKE) install DESTDIR=$(CURDIR)/debian/ams
+ cp ams $(CURDIR)/debian/ams/usr/bin
+ chmod +x $(CURDIR)/debian/ams/usr/bin/ams
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installdebconf
+ dh_installdocs
+ dh_installexamples
+ dh_installmenu
+# dh_installlogrotate
+# dh_installemacsen
+# dh_installpam
+# dh_installmime
+# dh_installinit
+ dh_installcron
+ dh_installman
+ dh_installinfo
+# dh_undocumented
+ dh_installchangelogs
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+# dh_makeshlibs
+ dh_installdeb
+# dh_perl
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
Property changes on: ams/trunk/debian/rules
___________________________________________________________________
Name: svn:executable
+ *
Added: ams/trunk/debian/watch
===================================================================
--- ams/trunk/debian/watch 2004-10-28 11:12:27 UTC (rev 39)
+++ ams/trunk/debian/watch 2004-10-28 11:14:07 UTC (rev 40)
@@ -0,0 +1,4 @@
+version=2
+
+# Pattern
+ftp://sourceforge.cs.umn.edu/pub/sourceforge/a/al/alsamodular/ams-(.*)\.tar\.bz2 debian uupdate