Browse Source

Remove Carla, now in https://github.com/falkTX/Carla

tags/v0.9.0
falkTX 10 years ago
parent
commit
ef367894bc
100 changed files with 150 additions and 45058 deletions
  1. +29
    -33
      INSTALL.md
  2. +118
    -236
      Makefile
  3. +0
    -12
      README.md
  4. +3
    -37
      c++/Makefile.mk
  5. +0
    -36
      c++/caitlib/Makefile
  6. +0
    -697
      c++/caitlib/caitlib.c
  7. +0
    -287
      c++/caitlib/caitlib.doxygen
  8. +0
    -268
      c++/caitlib/caitlib.h
  9. +0
    -33
      c++/caitlib/caitlib.pro
  10. +0
    -874
      c++/caitlib/list.h
  11. +0
    -357
      c++/caitlib/memory_atomic.c
  12. +0
    -105
      c++/caitlib/memory_atomic.h
  13. +0
    -106
      c++/carla-backend/Makefile
  14. +0
    -287
      c++/carla-backend/carla_backend.doxygen
  15. +0
    -581
      c++/carla-backend/carla_backend.hpp
  16. +0
    -54
      c++/carla-backend/carla_backend.pro
  17. +0
    -1948
      c++/carla-backend/carla_backend_standalone.cpp
  18. +0
    -186
      c++/carla-backend/carla_backend_standalone.hpp
  19. +0
    -459
      c++/carla-backend/carla_backend_utils.hpp
  20. +0
    -480
      c++/carla-bridge/Makefile
  21. +0
    -287
      c++/carla-bridge/carla_bridge.doxygen
  22. +0
    -34
      c++/carla-bridge/carla_bridge.hpp
  23. +0
    -335
      c++/carla-bridge/carla_bridge_client.cpp
  24. +0
    -153
      c++/carla-bridge/carla_bridge_client.hpp
  25. +0
    -409
      c++/carla-bridge/carla_bridge_osc.cpp
  26. +0
    -137
      c++/carla-bridge/carla_bridge_osc.hpp
  27. +0
    -1150
      c++/carla-bridge/carla_bridge_plugin.cpp
  28. +0
    -245
      c++/carla-bridge/carla_bridge_toolkit-gtk.cpp
  29. +0
    -334
      c++/carla-bridge/carla_bridge_toolkit-qt.cpp
  30. +0
    -49
      c++/carla-bridge/carla_bridge_toolkit.cpp
  31. +0
    -63
      c++/carla-bridge/carla_bridge_toolkit.hpp
  32. +0
    -1118
      c++/carla-bridge/carla_bridge_ui-lv2.cpp
  33. +0
    -595
      c++/carla-bridge/carla_bridge_ui-vst.cpp
  34. +0
    -43
      c++/carla-bridge/qtcreator/carla-bridge-lv2-gtk2.pro
  35. +0
    -43
      c++/carla-bridge/qtcreator/carla-bridge-lv2-gtk3.pro
  36. +0
    -43
      c++/carla-bridge/qtcreator/carla-bridge-lv2-qt4.pro
  37. +0
    -43
      c++/carla-bridge/qtcreator/carla-bridge-lv2-qt5.pro
  38. +0
    -47
      c++/carla-bridge/qtcreator/carla-bridge-lv2-x11.pro
  39. +0
    -100
      c++/carla-bridge/qtcreator/carla-bridge-plugin.pro
  40. +0
    -42
      c++/carla-bridge/qtcreator/carla-bridge-vst-x11.pro
  41. +0
    -91
      c++/carla-discovery/Makefile
  42. +0
    -1337
      c++/carla-discovery/carla-discovery.cpp
  43. +0
    -35
      c++/carla-discovery/carla-discovery.pro
  44. +0
    -35
      c++/carla-engine/DistrhoPluginInfo.h
  45. +0
    -74
      c++/carla-engine/Makefile
  46. +0
    -1930
      c++/carla-engine/carla_engine.cpp
  47. +0
    -287
      c++/carla-engine/carla_engine.doxygen
  48. +0
    -985
      c++/carla-engine/carla_engine.hpp
  49. +0
    -71
      c++/carla-engine/carla_engine.pro
  50. +0
    -683
      c++/carla-engine/carla_engine_osc.cpp
  51. +0
    -169
      c++/carla-engine/carla_engine_osc.hpp
  52. +0
    -157
      c++/carla-engine/carla_engine_thread.cpp
  53. +0
    -77
      c++/carla-engine/carla_engine_thread.hpp
  54. +0
    -1149
      c++/carla-engine/jack.cpp
  55. +0
    -539
      c++/carla-engine/plugin.cpp
  56. +0
    -57
      c++/carla-engine/rtaudio-4.0.11/Makefile.in
  57. +0
    -8363
      c++/carla-engine/rtaudio-4.0.11/RtAudio.cpp
  58. +0
    -1014
      c++/carla-engine/rtaudio-4.0.11/RtAudio.h
  59. +0
    -60
      c++/carla-engine/rtaudio-4.0.11/RtError.h
  60. +0
    -1371
      c++/carla-engine/rtaudio-4.0.11/config/config.guess
  61. +0
    -1362
      c++/carla-engine/rtaudio-4.0.11/config/config.sub
  62. +0
    -0
      c++/carla-engine/rtaudio-4.0.11/config/install.sh
  63. +0
    -6580
      c++/carla-engine/rtaudio-4.0.11/configure
  64. +0
    -166
      c++/carla-engine/rtaudio-4.0.11/configure.ac
  65. +0
    -70
      c++/carla-engine/rtaudio-4.0.11/contrib/python/pyrtaudio/PyRtAudioTest.py
  66. +0
    -57
      c++/carla-engine/rtaudio-4.0.11/contrib/python/pyrtaudio/readme
  67. +0
    -605
      c++/carla-engine/rtaudio-4.0.11/contrib/python/pyrtaudio/rtaudiomodule.cpp
  68. +0
    -58
      c++/carla-engine/rtaudio-4.0.11/contrib/python/pyrtaudio/setup.py
  69. +0
    -1572
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/Doxyfile
  70. +0
    -28
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/acknowledge.txt
  71. +0
    -39
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/apinotes.txt
  72. +0
    -84
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/compiling.txt
  73. +0
    -76
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/duplex.txt
  74. +0
    -5
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/error.txt
  75. +0
    -8
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/footer.html
  76. +0
    -10
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/header.html
  77. +0
    -30
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/license.txt
  78. +0
    -7
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/multi.txt
  79. +0
    -82
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/playback.txt
  80. +0
    -70
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/probe.txt
  81. +0
    -68
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/recording.txt
  82. +0
    -48
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/settings.txt
  83. +0
    -54
      c++/carla-engine/rtaudio-4.0.11/doc/doxygen/tutorial.txt
  84. +0
    -641
      c++/carla-engine/rtaudio-4.0.11/doc/html/RtAudio_8h-source.html
  85. +0
    -148
      c++/carla-engine/rtaudio-4.0.11/doc/html/RtAudio_8h.html
  86. +0
    -677
      c++/carla-engine/rtaudio-4.0.11/doc/html/RtAudio_8h_source.html
  87. +0
    -65
      c++/carla-engine/rtaudio-4.0.11/doc/html/RtError_8h-source.html
  88. +0
    -65
      c++/carla-engine/rtaudio-4.0.11/doc/html/RtError_8h_source.html
  89. +0
    -62
      c++/carla-engine/rtaudio-4.0.11/doc/html/acknowledge.html
  90. +0
    -28
      c++/carla-engine/rtaudio-4.0.11/doc/html/annotated.html
  91. +0
    -45
      c++/carla-engine/rtaudio-4.0.11/doc/html/apinotes.html
  92. +0
    -57
      c++/carla-engine/rtaudio-4.0.11/doc/html/bugs.html
  93. +0
    -51
      c++/carla-engine/rtaudio-4.0.11/doc/html/classRtAudio-members.html
  94. +0
    -534
      c++/carla-engine/rtaudio-4.0.11/doc/html/classRtAudio.html
  95. +0
    -40
      c++/carla-engine/rtaudio-4.0.11/doc/html/classRtError-members.html
  96. +0
    -127
      c++/carla-engine/rtaudio-4.0.11/doc/html/classRtError.html
  97. +0
    -27
      c++/carla-engine/rtaudio-4.0.11/doc/html/classes.html
  98. +0
    -50
      c++/carla-engine/rtaudio-4.0.11/doc/html/compiling.html
  99. +0
    -532
      c++/carla-engine/rtaudio-4.0.11/doc/html/doxygen.css
  100. BIN
      c++/carla-engine/rtaudio-4.0.11/doc/html/doxygen.png

+ 29
- 33
INSTALL.md View File

@@ -19,41 +19,26 @@ Packagers can make use of the 'PREFIX' and 'DESTDIR' variable during install, li
The required build dependencies are: <i>(devel packages of these)</i>

- JACK
- liblo
- Qt4
- PyQt4
- Python3
- PyQt4 (Py3 version)

Optional but recommended:

- FluidSynth
- LinuxSampler

Optional for extended LV2 UIs support:

- Gtk2
- Gtk3
- Suil

On Debian and Ubuntu, use these commands to install all dependencies: <br/>
`$ sudo apt-get install libjack-dev liblo-dev libqt4-dev libfluidsynth-dev` <br/>
On Debian and Ubuntu, use these commands to install all build dependencies: <br/>
`$ sudo apt-get install libjack-dev libqt4-dev` <br/>
`$ sudo apt-get install qt4-dev-tools python-qt4-dev python3-pyqt4 pyqt4-dev-tools`

NOTE: linuxsampler is not packaged in either Debian or Ubuntu, but it's available in KXStudio. <br/>
<br/>

To run all the apps/tools, you'll additionally need:

- python3-dbus
- python3-liblo
- python3-dbus.mainloop.qt

Optional but recommended:

- a2jmidid
- jack-capture
- python3-rdflib
- pulseaudio-module-jack
- pulseaudio[-module-jack]

The 'Cadence' and 'Catia' apps rely on jackdbus to work properly (either JACK2 or JACK1+DBus patch). <br/>
The 'Cadence' app relies on jackdbus to work properly (either JACK2 or JACK1+DBus patch). <br/>
Claudia is a LADISH frontend, so it will obviously require LADISH to run.

The python version used and tested is python3.2. <br/>
@@ -67,28 +52,39 @@ All tools require Python3 and Qt4, some of them work on Windows and Mac. <br/>
Here's the required run-time dependencies of each of the main tools:

### Cadence
Recommends a2jmidid (>= 8) and jackdbus <br/>
Recommends a2jmidid (>= 7) and jackdbus <br/>
Suggests pulseaudio[-module-jack] <br/>
<br/>

### Cadence-JackMeter
Requires jack <br/>
<br/>

### Cadence-JackSettings
Requires jackdbus <br/>
<br/>

### Cadence-Logs
No special requirements <br/>
<br/>

### Cadence-Render
Requires jack-capture <br/>
<br/>

### Cadence-XY Controller
Requires jack <br/>
<br/>

### Catarina
No special requirements <br/>
<br/>

### Catia
Recommends a2jmidid (>= 8) and jackdbus <br/>
Recommends a2jmidid (>= 7) and jackdbus <br/>
<br/>

### Claudia [Linux only] <br/>
Requires jackdbus and ladish <br/>
Recommends a2jmidid <br/>
<br/>

### Carla
Requires liblo <br/>
Recommends python3-rdflib (for LADSPA-RDF support) <br/>
<br/>

### Carla-Control
Requires python3-liblo <br/>
<br/>

+ 118
- 236
Makefile View File

@@ -24,7 +24,7 @@ all: UI RES CPP

# ------------------------------------------------------------------------------------------------------------------------------------------------------

UI: cadence catarina catia claudia carla tools
UI: cadence catarina catia claudia tools

cadence: src/ui_cadence.py \
src/ui_cadence_tb_jack.py src/ui_cadence_tb_alsa.py src/ui_cadence_tb_a2j.py src/ui_cadence_tb_pa.py \
@@ -42,132 +42,126 @@ claudia: src/ui_claudia.py \
src/ui_claudia_createroom.py src/ui_claudia_projectname.py src/ui_claudia_projectproperties.py \
src/ui_claudia_runcustom.py src/ui_claudia_launcher.py src/ui_claudia_launcher_app.py

carla: src/ui_carla.py src/ui_carla_control.py \
src/ui_carla_about.py src/ui_carla_database.py src/ui_carla_edit.py src/ui_carla_parameter.py src/ui_carla_plugin.py src/ui_carla_refresh.py \
src/ui_inputdialog_value.py

caitlyn: src/ui_caitlyn.py

tools: \
src/ui_logs.py src/ui_render.py \
src/ui_settings_app.py src/ui_settings_jack.py

src/ui_cadence.py: resources/ui/cadence.ui
$(PYUIC) $< -o $@
src/ui_cadence_tb_jack.py: resources/ui/cadence_tb_jack.ui
$(PYUIC) $< -o $@
src/ui_cadence_tb_alsa.py: resources/ui/cadence_tb_alsa.ui
$(PYUIC) $< -o $@
src/ui_cadence_tb_a2j.py: resources/ui/cadence_tb_a2j.ui
$(PYUIC) $< -o $@
src/ui_cadence_tb_pa.py: resources/ui/cadence_tb_pa.ui
$(PYUIC) $< -o $@
src/ui_cadence_rwait.py: resources/ui/cadence_rwait.ui
$(PYUIC) $< -o $@
src/ui_catarina.py: resources/ui/catarina.ui
$(PYUIC) $< -o $@
src/ui_catarina_addgroup.py: resources/ui/catarina_addgroup.ui
$(PYUIC) $< -o $@
src/ui_catarina_removegroup.py: resources/ui/catarina_removegroup.ui
$(PYUIC) $< -o $@
src/ui_catarina_renamegroup.py: resources/ui/catarina_renamegroup.ui
$(PYUIC) $< -o $@
src/ui_catarina_addport.py: resources/ui/catarina_addport.ui
$(PYUIC) $< -o $@
src/ui_catarina_removeport.py: resources/ui/catarina_removeport.ui
$(PYUIC) $< -o $@
src/ui_catarina_renameport.py: resources/ui/catarina_renameport.ui
$(PYUIC) $< -o $@
src/ui_catarina_connectports.py: resources/ui/catarina_connectports.ui
$(PYUIC) $< -o $@
src/ui_catarina_disconnectports.py: resources/ui/catarina_disconnectports.ui
$(PYUIC) $< -o $@
src/ui_catia.py: resources/ui/catia.ui
$(PYUIC) $< -o $@
src/ui_claudia.py: resources/ui/claudia.ui
$(PYUIC) $< -o $@
src/ui_claudia_studioname.py: resources/ui/claudia_studioname.ui
$(PYUIC) $< -o $@
src/ui_claudia_studiolist.py: resources/ui/claudia_studiolist.ui
$(PYUIC) $< -o $@
src/ui_claudia_createroom.py: resources/ui/claudia_createroom.ui
$(PYUIC) $< -o $@
src/ui_claudia_projectname.py: resources/ui/claudia_projectname.ui
$(PYUIC) $< -o $@
src/ui_claudia_projectproperties.py: resources/ui/claudia_projectproperties.ui
$(PYUIC) $< -o $@
src/ui_claudia_runcustom.py: resources/ui/claudia_runcustom.ui
$(PYUIC) $< -o $@
src/ui_claudia_launcher.py: resources/ui/claudia_launcher.ui
$(PYUIC) $< -o $@
src/ui_claudia_launcher_app.py: resources/ui/claudia_launcher_app.ui
$(PYUIC) $< -o $@
src/ui_caitlyn.py: resources/ui/caitlyn.ui
$(PYUIC) $< -o $@
src/ui_carla.py: resources/ui/carla.ui
$(PYUIC) $< -o $@
src/ui_carla_control.py: resources/ui/carla_control.ui
$(PYUIC) $< -o $@
src/ui_carla_about.py: resources/ui/carla_about.ui
$(PYUIC) $< -o $@
src/ui_carla_database.py: resources/ui/carla_database.ui
$(PYUIC) $< -o $@
src/ui_carla_edit.py: resources/ui/carla_edit.ui
$(PYUIC) $< -o $@
src/ui_carla_parameter.py: resources/ui/carla_parameter.ui
$(PYUIC) $< -o $@
src/ui_carla_plugin.py: resources/ui/carla_plugin.ui
$(PYUIC) $< -o $@
src/ui_carla_refresh.py: resources/ui/carla_refresh.ui
$(PYUIC) $< -o $@
src/ui_logs.py: resources/ui/logs.ui
$(PYUIC) $< -o $@
src/ui_render.py: resources/ui/render.ui
$(PYUIC) $< -o $@
src/ui_settings_app.py: resources/ui/settings_app.ui
$(PYUIC) $< -o $@
src/ui_settings_jack.py: resources/ui/settings_jack.ui
$(PYUIC) $< -o $@
src/ui_inputdialog_value.py: resources/ui/inputdialog_value.ui
$(PYUIC) $< -o $@
src/ui_%.py: resources/ui/%.ui
$(PYUIC) $< -o $@
#
# src/ui_cadence_tb_jack.py: resources/ui/cadence_tb_jack.ui
# $(PYUIC) $< -o $@
#
# src/ui_cadence_tb_alsa.py: resources/ui/cadence_tb_alsa.ui
# $(PYUIC) $< -o $@
#
# src/ui_cadence_tb_a2j.py: resources/ui/cadence_tb_a2j.ui
# $(PYUIC) $< -o $@
#
# src/ui_cadence_tb_pa.py: resources/ui/cadence_tb_pa.ui
# $(PYUIC) $< -o $@
#
# src/ui_cadence_rwait.py: resources/ui/cadence_rwait.ui
# $(PYUIC) $< -o $@
#
# src/ui_catarina.py: resources/ui/catarina.ui
# $(PYUIC) $< -o $@
#
# src/ui_catarina_addgroup.py: resources/ui/catarina_addgroup.ui
# $(PYUIC) $< -o $@
#
# src/ui_catarina_removegroup.py: resources/ui/catarina_removegroup.ui
# $(PYUIC) $< -o $@
#
# src/ui_catarina_renamegroup.py: resources/ui/catarina_renamegroup.ui
# $(PYUIC) $< -o $@
#
# src/ui_catarina_addport.py: resources/ui/catarina_addport.ui
# $(PYUIC) $< -o $@
#
# src/ui_catarina_removeport.py: resources/ui/catarina_removeport.ui
# $(PYUIC) $< -o $@
#
# src/ui_catarina_renameport.py: resources/ui/catarina_renameport.ui
# $(PYUIC) $< -o $@
#
# src/ui_catarina_connectports.py: resources/ui/catarina_connectports.ui
# $(PYUIC) $< -o $@
#
# src/ui_catarina_disconnectports.py: resources/ui/catarina_disconnectports.ui
# $(PYUIC) $< -o $@
#
# src/ui_catia.py: resources/ui/catia.ui
# $(PYUIC) $< -o $@
#
# src/ui_claudia.py: resources/ui/claudia.ui
# $(PYUIC) $< -o $@
#
# src/ui_claudia_studioname.py: resources/ui/claudia_studioname.ui
# $(PYUIC) $< -o $@
#
# src/ui_claudia_studiolist.py: resources/ui/claudia_studiolist.ui
# $(PYUIC) $< -o $@
#
# src/ui_claudia_createroom.py: resources/ui/claudia_createroom.ui
# $(PYUIC) $< -o $@
#
# src/ui_claudia_projectname.py: resources/ui/claudia_projectname.ui
# $(PYUIC) $< -o $@
#
# src/ui_claudia_projectproperties.py: resources/ui/claudia_projectproperties.ui
# $(PYUIC) $< -o $@
#
# src/ui_claudia_runcustom.py: resources/ui/claudia_runcustom.ui
# $(PYUIC) $< -o $@
#
# src/ui_claudia_launcher.py: resources/ui/claudia_launcher.ui
# $(PYUIC) $< -o $@
#
# src/ui_claudia_launcher_app.py: resources/ui/claudia_launcher_app.ui
# $(PYUIC) $< -o $@
#
# src/ui_caitlyn.py: resources/ui/caitlyn.ui
# $(PYUIC) $< -o $@
#
# src/ui_carla.py: resources/ui/carla.ui
# $(PYUIC) $< -o $@
#
# src/ui_carla_control.py: resources/ui/carla_control.ui
# $(PYUIC) $< -o $@
#
# src/ui_carla_about.py: resources/ui/carla_about.ui
# $(PYUIC) $< -o $@
#
# src/ui_carla_database.py: resources/ui/carla_database.ui
# $(PYUIC) $< -o $@
#
# src/ui_carla_edit.py: resources/ui/carla_edit.ui
# $(PYUIC) $< -o $@
#
# src/ui_carla_parameter.py: resources/ui/carla_parameter.ui
# $(PYUIC) $< -o $@
#
# src/ui_carla_plugin.py: resources/ui/carla_plugin.ui
# $(PYUIC) $< -o $@
#
# src/ui_carla_refresh.py: resources/ui/carla_refresh.ui
# $(PYUIC) $< -o $@
#
# src/ui_logs.py: resources/ui/logs.ui
# $(PYUIC) $< -o $@
#
# src/ui_render.py: resources/ui/render.ui
# $(PYUIC) $< -o $@
#
# src/ui_settings_app.py: resources/ui/settings_app.ui
# $(PYUIC) $< -o $@
#
# src/ui_settings_jack.py: resources/ui/settings_jack.ui
# $(PYUIC) $< -o $@
#
# src/ui_inputdialog_value.py: resources/ui/inputdialog_value.ui
# $(PYUIC) $< -o $@

# ------------------------------------------------------------------------------------------------------------------------------------------------------

@@ -178,34 +172,7 @@ src/resources_rc.py: resources/resources.qrc

# ------------------------------------------------------------------------------------------------------------------------------------------------------

CPP: caitlib carla-backend carla-bridge carla-discovery jackmeter xycontroller

caitlib:
$(MAKE) -C c++/caitlib

carla-backend: carla-engine carla-native carla-plugin
$(MAKE) -C c++/carla-backend

carla-bridge:
$(MAKE) -C c++/carla-bridge

carla-discovery:
$(MAKE) -C c++/carla-discovery NATIVE=1

carla-engine:
$(MAKE) -C c++/carla-engine

carla-lilv:
$(MAKE) -C c++/carla-lilv

carla-native:
$(MAKE) -C c++/carla-native

carla-plugin:
$(MAKE) -C c++/carla-plugin

carla-rtmempool:
$(MAKE) -C c++/carla-rtmempool
CPP: jackmeter xycontroller

jackmeter:
$(MAKE) -C c++/jackmeter
@@ -218,62 +185,16 @@ xycontroller:
debug:
$(MAKE) DEBUG=true

doxygen:
$(MAKE) doxygen -C c++/caitlib
$(MAKE) doxygen -C c++/carla-backend
$(MAKE) doxygen -C c++/carla-bridge
$(MAKE) doxygen -C c++/carla-engine
$(MAKE) doxygen -C c++/carla-native
$(MAKE) doxygen -C c++/carla-plugin

# ------------------------------------------------------------------------------------------------------------------------------------------------------

posix32:
$(MAKE) -C c++/carla-bridge posix32
$(MAKE) -C c++/carla-discovery posix32

posix64:
$(MAKE) -C c++/carla-bridge posix64
$(MAKE) -C c++/carla-discovery posix64

win32:
$(MAKE) -C c++/carla-bridge win32
$(MAKE) -C c++/carla-discovery win32

win64:
$(MAKE) -C c++/carla-bridge win64
$(MAKE) -C c++/carla-discovery win64

wine32:
$(MAKE) -C c++/carla-jackbridge wine32
cp c++/carla-jackbridge/libcarla-jackbridge-win32.dll.so c++/carla-bridge/libcarla-jackbridge-win32.dll

wine64:
$(MAKE) -C c++/carla-jackbridge wine64
cp c++/carla-jackbridge/libcarla-jackbridge-win64.dll.so c++/carla-bridge/libcarla-jackbridge-win64.dll

# ------------------------------------------------------------------------------------------------------------------------------------------------------

clean:
$(MAKE) clean -C c++/caitlib
$(MAKE) clean -C c++/carla-backend
$(MAKE) clean -C c++/carla-bridge
$(MAKE) clean -C c++/carla-discovery
$(MAKE) clean -C c++/carla-engine
$(MAKE) clean -C c++/carla-jackbridge
$(MAKE) clean -C c++/carla-lilv
$(MAKE) clean -C c++/carla-native
$(MAKE) clean -C c++/carla-plugin
$(MAKE) clean -C c++/carla-rtmempool
$(MAKE) clean -C c++/jackmeter
$(MAKE) clean -C c++/xycontroller
rm -f *~ src/*~ src/*.pyc src/ui_*.py src/resources_rc.py
rm -rf c++/*/doxygen

install:
# Create directories
install -d $(DESTDIR)$(PREFIX)/bin/
install -d $(DESTDIR)$(PREFIX)/lib/cadence/
install -d $(DESTDIR)$(PREFIX)/share/applications/
install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/
install -d $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/
@@ -300,14 +221,9 @@ install:
data/catia \
data/claudia \
data/claudia-launcher \
data/carla \
data/carla-control \
data/carla-standalone \
data/caitlyn \
c++/jackmeter/cadence-jackmeter \
c++/xycontroller/cadence-xycontroller \
$(DESTDIR)$(PREFIX)/bin/
# data/cadence-cpufreq

# Install desktop files
install -m 644 data/*.desktop $(DESTDIR)$(PREFIX)/share/applications/
@@ -318,8 +234,6 @@ install:
install -m 644 resources/16x16/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/
install -m 644 resources/16x16/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/
install -m 644 resources/16x16/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/
install -m 644 resources/16x16/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/
install -m 644 resources/16x16/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/16x16/apps/

# Install icons, 48x48
install -m 644 resources/48x48/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/
@@ -327,8 +241,6 @@ install:
install -m 644 resources/48x48/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/
install -m 644 resources/48x48/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/
install -m 644 resources/48x48/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/
install -m 644 resources/48x48/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/
install -m 644 resources/48x48/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/48x48/apps/

# Install icons, 128x128
install -m 644 resources/128x128/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/
@@ -336,8 +248,6 @@ install:
install -m 644 resources/128x128/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/
install -m 644 resources/128x128/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/
install -m 644 resources/128x128/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/
install -m 644 resources/128x128/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/
install -m 644 resources/128x128/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/128x128/apps/

# Install icons, 256x256
install -m 644 resources/256x256/cadence.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/
@@ -345,8 +255,6 @@ install:
install -m 644 resources/256x256/catia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/
install -m 644 resources/256x256/claudia.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/
install -m 644 resources/256x256/claudia-launcher.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/
install -m 644 resources/256x256/carla.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/
install -m 644 resources/256x256/carla-control.png $(DESTDIR)$(PREFIX)/share/icons/hicolor/256x256/apps/

# Install icons, scalable
install -m 644 resources/scalable/cadence.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/
@@ -354,19 +262,10 @@ install:
install -m 644 resources/scalable/catia.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/
install -m 644 resources/scalable/claudia.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/
install -m 644 resources/scalable/claudia-launcher.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/
install -m 644 resources/scalable/carla.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/
install -m 644 resources/scalable/carla-control.svg $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/

# Install main code
install -m 755 src/*.py $(DESTDIR)$(PREFIX)/share/cadence/src/

install -m 755 \
c++/caitlib/*.so \
c++/carla-backend/*.so \
c++/carla-bridge/carla-bridge-* \
c++/carla-discovery/carla-discovery-* \
$(DESTDIR)$(PREFIX)/lib/cadence/

# Install addtional stuff for Cadence
install -m 644 data/pulse2jack/* $(DESTDIR)$(PREFIX)/share/cadence/pulse2jack/
install -m 644 data/70cadence-plugin-paths $(X11_RC_DIR)
@@ -389,47 +288,30 @@ install:
$(DESTDIR)$(PREFIX)/bin/catia \
$(DESTDIR)$(PREFIX)/bin/claudia \
$(DESTDIR)$(PREFIX)/bin/claudia-launcher \
$(DESTDIR)$(PREFIX)/bin/carla \
$(DESTDIR)$(PREFIX)/bin/carla-control \
$(DESTDIR)$(PREFIX)/bin/carla-standalone \
$(DESTDIR)$(PREFIX)/bin/caitlyn \
$(X11_RC_DIR)/70cadence-plugin-paths \
$(X11_RC_DIR)/99cadence-session-start
# $(DESTDIR)$(PREFIX)/bin/cadence-cpufreq

# Remove unfinished
rm $(DESTDIR)$(PREFIX)/bin/caitlyn
rm $(DESTDIR)$(PREFIX)/share/applications/caitlyn.desktop

uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/cadence*
rm -f $(DESTDIR)$(PREFIX)/bin/catarina
rm -f $(DESTDIR)$(PREFIX)/bin/catia
rm -f $(DESTDIR)$(PREFIX)/bin/claudia*
rm -f $(DESTDIR)$(PREFIX)/bin/carla*
rm -f $(DESTDIR)$(PREFIX)/share/applications/cadence.desktop
rm -f $(DESTDIR)$(PREFIX)/share/applications/catarina.desktop
rm -f $(DESTDIR)$(PREFIX)/share/applications/catia.desktop
rm -f $(DESTDIR)$(PREFIX)/share/applications/claudia.desktop
rm -f $(DESTDIR)$(PREFIX)/share/applications/claudia-launcher.desktop
rm -f $(DESTDIR)$(PREFIX)/share/applications/carla.desktop
rm -f $(DESTDIR)$(PREFIX)/share/applications/carla-control.desktop
rm -f $(DESTDIR)$(PREFIX)/share/applications/caitlyn.desktop
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/*/apps/cadence.png
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/*/apps/catarina.png
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/*/apps/catia.png
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/*/apps/claudia.png
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/*/apps/claudia-launcher.png
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/*/apps/carla.png
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/*/apps/carla-control.png
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/cadence.svg
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/catarina.svg
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/catia.svg
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/claudia.svg
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/claudia-launcher.svg
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/carla.svg
rm -f $(DESTDIR)$(PREFIX)/share/icons/hicolor/scalable/apps/carla-control.svg
rm -f $(X11_RC_DIR)/70cadence-plugin-paths
rm -f $(X11_RC_DIR)/99cadence-session-start
rm -rf $(DESTDIR)$(PREFIX)/lib/cadence/
rm -rf $(DESTDIR)$(PREFIX)/share/cadence/

+ 0
- 12
README.md View File

@@ -7,8 +7,6 @@ The tools share the same base source code, so most of them look quite similar (w
Also, lots of custom widgets were coded when needed (like pixmapdial, pixmapkeyboard, patchcanvas and systray). <br/>
They can be re-used in other projects. Contact the author if you need help on that.

Note that the main focus goes to JACK2 (or JACK1+DBus); JACK1 (raw) may not work properly at this point.


===== DESCRIPTIONS =====
------------------------
@@ -57,13 +55,3 @@ A multimedia application launcher with LADISH support. <br/>
It searches for installed packages (not binaries), and displays the respective content as a launcher. <br/>
The content is got through an hardcoded database, created and/or modified to suit the target distribution. <br/>
Currently supports Debian and ArchLinux based distros.

### [Carla](http://kxstudio.sourceforge.net/KXStudio:Applications:Carla)
Multi-plugin host for JACK. <br/>
It has some nice features like automation of parameters via MIDI CCs (and send control outputs back to MIDI too) and full OSC control. <br/>
Currently supports LADSPA (including LRDF), DSSI, LV2, and VST plugin formats, with additional GIG, SF2 and SFZ file support via FluidSynth and LinuxSampler.

### [Carla-Control](http://kxstudio.sourceforge.net/KXStudio:Applications:Carla-Control)
An OSC Control GUI for Carla (you get the OSC address from the Carla's about dialog, and connect to it).<br/>
Supports controlling main UI components (Dry/Wet, Volume and Balance), and all plugins parameters. <br/>
Peak values and control outputs are displayed as well.

+ 3
- 37
c++/Makefile.mk View File

@@ -26,9 +26,6 @@ BASE_FLAGS = -O2 -ffast-math -mtune=generic -msse -mfpmath=sse -Wall -Wextra
BASE_FLAGS += -DNDEBUG
endif

32BIT_FLAGS = -m32
64BIT_FLAGS = -m64

BUILD_C_FLAGS = $(BASE_FLAGS) -std=c99 $(CFLAGS)
BUILD_CXX_FLAGS = $(BASE_FLAGS) -std=c++0x $(CXXFLAGS)
LINK_FLAGS = $(LDFLAGS)
@@ -37,40 +34,9 @@ ifneq ($(DEBUG),true)
BUILD_CXX_FLAGS += -DQT_NO_DEBUG -DQT_NO_DEBUG_STREAM -DQT_NO_DEBUG_OUTPUT
endif

# --------------------------------------------------------------
# Modify to enable/disable specific features

# Support for LADSPA, DSSI, LV2 and VST plugins
CARLA_PLUGIN_SUPPORT = true

# Support for GIG, SF2 and SFZ sample banks (through fluidsynth and linuxsampler)
CARLA_SAMPLERS_SUPPORT = true

# Support for Native Audio (ALSA and/or PulseAudio in Linux)
CARLA_RTAUDIO_SUPPORT = true

# Comment this line to not use vestige header
BUILD_CXX_FLAGS += -DVESTIGE_HEADER

# --------------------------------------------------------------

HAVE_QT5 = $(shell pkg-config --atleast-version 5 QtCore && echo true)

HAVE_JACK = $(shell pkg-config --exists jack && echo true)
# HAVE_JACKSESSION = $(shell pkg-config --atleast-version=0.121.0 jack && echo true)

ifeq ($(CARLA_PLUGIN_SUPPORT),true)
HAVE_SUIL = $(shell pkg-config --exists suil-0 && echo true)
endif

ifeq ($(CARLA_SAMPLERS_SUPPORT),true)
HAVE_FLUIDSYNTH = $(shell pkg-config --exists fluidsynth && echo true)
HAVE_LINUXSAMPLER = $(shell pkg-config --exists linuxsampler && echo true)
endif

ifeq ($(CARLA_RTAUDIO_SUPPORT),true)
HAVE_ALSA = $(shell pkg-config --exists alsa && echo true)
HAVE_PULSEAUDIO = $(shell pkg-config --exists libpulse-simple && echo true)
endif
HAVE_QT5 = $(shell pkg-config --atleast-version 5 QtCore && echo true)

HAVE_ZYN_DEPS = $(shell pkg-config --exists fftw3 mxml && echo true)
# Currently broken
# HAVE_JACKSESSION = $(shell pkg-config --atleast-version=0.121.0 jack && echo true)

+ 0
- 36
c++/caitlib/Makefile View File

@@ -1,36 +0,0 @@
#!/usr/bin/make -f
# Makefile for caitlib #
# ----------------------------- #
# Created by falkTX
#

include ../Makefile.mk

BUILD_C_FLAGS += -D_GNU_SOURCE -I.
BUILD_C_FLAGS += -fvisibility=hidden -fPIC -std=gnu99 -Werror
BUILD_C_FLAGS += $(shell pkg-config --cflags jack)

LINK_FLAGS += -fPIC -shared -lm -lpthread
LINK_FLAGS += $(shell pkg-config --libs jack)

OBJS = \
caitlib.o \
memory_atomic.o \

# --------------------------------------------------------------

all: caitlib.so

caitlib.so: $(OBJS)
$(CC) $^ $(LINK_FLAGS) -o $@ && $(STRIP) $@

doxygen: caitlib.doxygen
doxygen $<

# --------------------------------------------------------------

.c.o:
$(CC) -c $< $(BUILD_C_FLAGS) -o $@

clean:
rm -f $(OBJS) *.so *.dll

+ 0
- 697
c++/caitlib/caitlib.c View File

@@ -1,697 +0,0 @@
/*
* Caitlib
* Copyright (C) 2007 Nedko Arnaudov <nedko@arnaudov.name>
* Copyright (C) 2012 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; 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
* any later version.
*
* This program 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.
*
* For a full copy of the GNU General Public License see the COPYING file
*/

#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <jack/jack.h>
#include <jack/midiport.h>

#include "caitlib.h"
#include "list.h"
#include "memory_atomic.h"

#define MAX_EVENT_DATA_SIZE 100
#define MIN_PREALLOCATED_EVENT_COUNT 100
#define MAX_PREALLOCATED_EVENT_COUNT 1000

//#define USE_LIST_HEAD_OUTS // incomplete

// ------------------------------------------------------------------------------------------

typedef struct list_head ListHead;
typedef pthread_mutex_t Mutex;

typedef struct _RawMidiEvent {
ListHead siblings;

jack_midi_data_t data[MAX_EVENT_DATA_SIZE];
size_t dataSize;
jack_nframes_t time;
double value; // used for special events
} RawMidiEvent;

typedef struct _CaitlibOutPort {
#ifdef USE_LIST_HEAD_OUTS
ListHead siblings;
#endif
uint32_t id;
ListHead queue;
jack_port_t* port;
} CaitlibOutPort;

typedef struct _CaitlibInstance {
bool doProcess, wantEvents;

jack_client_t* client;
jack_port_t* midiIn;

#ifdef USE_LIST_HEAD_OUTS
ListHead outPorts;
#else
uint32_t midiOutCount;
CaitlibOutPort** midiOuts;
#endif

ListHead inQueue;
ListHead inQueuePendingRT;
Mutex mutex;

rtsafe_memory_pool_handle mempool;
} CaitlibInstance;

// ------------------------------------------------------------------------------------------

#define handlePtr ((CaitlibInstance*)ptr)

static
int jack_process(jack_nframes_t nframes, void* ptr)
{
if (! handlePtr->doProcess)
return 0;

void* portBuffer;
RawMidiEvent* eventPtr;

jack_position_t transportPos;
jack_transport_state_t transportState = jack_transport_query(handlePtr->client, &transportPos);

if (transportPos.unique_1 != transportPos.unique_2)
transportPos.frame = 0;

// MIDI In
if (handlePtr->wantEvents)
{
jack_midi_event_t inEvent;
jack_nframes_t inEventCount;

portBuffer = jack_port_get_buffer(handlePtr->midiIn, nframes);
inEventCount = jack_midi_get_event_count(portBuffer);

for (jack_nframes_t i = 0 ; i < inEventCount; i++)
{
if (jack_midi_event_get(&inEvent, portBuffer, i) != 0)
break;

if (inEvent.size > MAX_EVENT_DATA_SIZE)
continue;

/* allocate memory for buffer copy */
eventPtr = rtsafe_memory_pool_allocate(handlePtr->mempool);
if (eventPtr == NULL)
{
//LOG_ERROR("Ignored midi event with size %u because memory allocation failed.", (unsigned int)inEvent.size);
continue;
}

/* copy buffer data */
memcpy(eventPtr->data, inEvent.buffer, inEvent.size);
eventPtr->dataSize = inEvent.size;
eventPtr->time = transportPos.frame + inEvent.time;

/* Add event buffer to inQueuePendingRT list */
list_add(&eventPtr->siblings, &handlePtr->inQueuePendingRT);
}
}

if (pthread_mutex_trylock(&handlePtr->mutex) != 0)
return 0;

if (handlePtr->wantEvents)
list_splice_init(&handlePtr->inQueuePendingRT, &handlePtr->inQueue);

#ifdef USE_LIST_HEAD_OUTS
if (transportState == JackTransportRolling)
{
}
#else
// MIDI Out
if (transportState == JackTransportRolling && handlePtr->midiOutCount > 0)
{
ListHead* entryPtr;
CaitlibOutPort* outPortPtr;

for (uint32_t i = 0; i < handlePtr->midiOutCount; i++)
{
outPortPtr = handlePtr->midiOuts[i];
portBuffer = jack_port_get_buffer(outPortPtr->port, nframes);
jack_midi_clear_buffer(portBuffer);

list_for_each(entryPtr, &outPortPtr->queue)
{
eventPtr = list_entry(entryPtr, RawMidiEvent, siblings);

if (transportPos.frame > eventPtr->time || transportPos.frame + nframes <= eventPtr->time)
continue;

if (jack_midi_event_write(portBuffer, eventPtr->time - transportPos.frame, eventPtr->data, eventPtr->dataSize) != 0)
break;
}
}
}
#endif

pthread_mutex_unlock(&handlePtr->mutex);

return 0;
}

#undef handlePtr

// ------------------------------------------------------------------------------------------
// Initialization

CaitlibHandle caitlib_init(const char* instanceName)
{
CaitlibInstance* handlePtr = (CaitlibInstance*)malloc(sizeof(CaitlibInstance));

if (handlePtr == NULL)
goto fail;

handlePtr->doProcess = true;
handlePtr->wantEvents = false;

#ifdef USE_LIST_HEAD_OUTS
INIT_LIST_HEAD(&handlePtr->outPorts);
#else
handlePtr->midiOuts = NULL;
handlePtr->midiOutCount = 0;
#endif

INIT_LIST_HEAD(&handlePtr->inQueue);
INIT_LIST_HEAD(&handlePtr->inQueuePendingRT);

if (! rtsafe_memory_pool_create(sizeof(RawMidiEvent), MIN_PREALLOCATED_EVENT_COUNT, MAX_PREALLOCATED_EVENT_COUNT, &handlePtr->mempool))
goto fail_free;

pthread_mutex_init(&handlePtr->mutex, NULL);

handlePtr->client = jack_client_open(instanceName, JackNullOption, 0);

if (handlePtr->client == NULL)
goto fail_destroyMutex;

handlePtr->midiIn = jack_port_register(handlePtr->client, "midi-in", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput, 0);

if (handlePtr->midiIn == NULL)
goto fail_closeJack;

if (jack_set_process_callback(handlePtr->client, jack_process, handlePtr) != 0)
goto fail_closeJack;

if (jack_activate(handlePtr->client) != 0)
goto fail_closeJack;

return handlePtr;

fail_closeJack:
jack_client_close(handlePtr->client);

fail_destroyMutex:
pthread_mutex_destroy(&handlePtr->mutex);

//fail_destroy_pool:
rtsafe_memory_pool_destroy(handlePtr->mempool);

fail_free:
free(handlePtr);

fail:
return NULL;
}

#define handlePtr ((CaitlibInstance*)handle)

void caitlib_close(CaitlibHandle handle)
{
// wait for jack processing to end
handlePtr->doProcess = false;
pthread_mutex_lock(&handlePtr->mutex);

if (handlePtr->client)
{
#ifdef USE_LIST_HEAD_OUTS
ListHead* entryPtr;
CaitlibOutPort* outPortPtr;
#endif

jack_deactivate(handlePtr->client);
jack_port_unregister(handlePtr->client, handlePtr->midiIn);

#ifdef USE_LIST_HEAD_OUTS
list_for_each(entryPtr, &handlePtr->outPorts)
{
outPortPtr = list_entry(entryPtr, CaitlibOutPort, siblings);
jack_port_unregister(handlePtr->client, outPortPtr->port);
}
#else
for (uint32_t i = 0; i < handlePtr->midiOutCount; i++)
{
jack_port_unregister(handlePtr->client, handlePtr->midiOuts[i]->port);
free(handlePtr->midiOuts[i]);
}
#endif

jack_client_close(handlePtr->client);
}

pthread_mutex_unlock(&handlePtr->mutex);
pthread_mutex_destroy(&handlePtr->mutex);

rtsafe_memory_pool_destroy(handlePtr->mempool);

free(handlePtr);
}

uint32_t caitlib_create_port(CaitlibHandle handle, const char* portName)
{
uint32_t nextId = 0;

// wait for jack processing to end
handlePtr->doProcess = false;
pthread_mutex_lock(&handlePtr->mutex);

// re-allocate pointers (midiOutCount + 1) and find next available ID
{
#ifdef USE_LIST_HEAD_OUTS
ListHead* entryPtr;
CaitlibOutPort* outPortPtr;

list_for_each(entryPtr, &handlePtr->outPorts)
{
outPortPtr = list_entry(entryPtr, CaitlibOutPort, siblings);

if (outPortPtr->id == nextId)
{
nextId++;
continue;
}
}
#else
CaitlibOutPort* oldMidiOuts[handlePtr->midiOutCount];

for (uint32_t i = 0; i < handlePtr->midiOutCount; i++)
{
oldMidiOuts[i] = handlePtr->midiOuts[i];

if (handlePtr->midiOuts[i]->id == nextId)
nextId++;
}

if (handlePtr->midiOuts)
free(handlePtr->midiOuts);

handlePtr->midiOuts = (CaitlibOutPort**)malloc(sizeof(CaitlibOutPort*) * (handlePtr->midiOutCount+1));

for (uint32_t i = 0; i < handlePtr->midiOutCount; i++)
handlePtr->midiOuts[i] = oldMidiOuts[i];
#endif
}

// we can continue normal operation now
pthread_mutex_unlock(&handlePtr->mutex);
handlePtr->doProcess = true;

#ifdef USE_LIST_HEAD_OUTS
#else
// create new port
{
CaitlibOutPort* newPort = (CaitlibOutPort*)malloc(sizeof(CaitlibOutPort));

newPort->id = nextId;
newPort->port = jack_port_register(handlePtr->client, portName, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
INIT_LIST_HEAD(&newPort->queue);

handlePtr->midiOuts[handlePtr->midiOutCount++] = newPort;
}
#endif

return nextId;
}

void caitlib_destroy_port(CaitlibHandle handle, uint32_t port)
{
// wait for jack processing to end
handlePtr->doProcess = false;
pthread_mutex_lock(&handlePtr->mutex);

#ifdef USE_LIST_HEAD_OUTS
#else
// re-allocate pointers (midiOutCount - 1)
{
CaitlibOutPort* oldMidiOuts[handlePtr->midiOutCount];

for (uint32_t i = 0; i < handlePtr->midiOutCount; i++)
oldMidiOuts[i] = handlePtr->midiOuts[i];

if (handlePtr->midiOuts)
free(handlePtr->midiOuts);

if (handlePtr->midiOutCount == 1)
{
handlePtr->midiOuts = NULL;
}
else
{
handlePtr->midiOuts = (CaitlibOutPort**)malloc(sizeof(CaitlibOutPort*) * (handlePtr->midiOutCount-1));

for (uint32_t i = 0, j = 0; i < handlePtr->midiOutCount; i++)
{
if (oldMidiOuts[i]->id != port)
handlePtr->midiOuts[j++] = oldMidiOuts[i];
}
}

handlePtr->midiOutCount--;
}
#endif

pthread_mutex_unlock(&handlePtr->mutex);
handlePtr->doProcess = true;

return;
(void)port;
}

// ------------------------------------------------------------------------------------------
// Input

void caitlib_want_events(CaitlibHandle handle, bool yesNo)
{
pthread_mutex_lock(&handlePtr->mutex);
handlePtr->wantEvents = yesNo;
pthread_mutex_unlock(&handlePtr->mutex);
}

MidiEvent* caitlib_get_event(CaitlibHandle handle)
{
static MidiEvent midiEvent;

ListHead* nodePtr;
RawMidiEvent* rawEventPtr;

pthread_mutex_lock(&handlePtr->mutex);
if (list_empty(&handlePtr->inQueue))
{
pthread_mutex_unlock(&handlePtr->mutex);
return NULL;
}

nodePtr = handlePtr->inQueue.prev;

list_del(nodePtr);

rawEventPtr = list_entry(nodePtr, RawMidiEvent, siblings);

pthread_mutex_unlock(&handlePtr->mutex);

midiEvent.channel = rawEventPtr->data[0] & 0x0F;
midiEvent.time = rawEventPtr->time;

// note off
if (rawEventPtr->dataSize == 3 && (rawEventPtr->data[0] & 0xF0) == MIDI_EVENT_TYPE_NOTE_OFF)
{
midiEvent.type = MIDI_EVENT_TYPE_NOTE_OFF;
midiEvent.data.note.note = rawEventPtr->data[1];
midiEvent.data.note.velocity = rawEventPtr->data[2];
}

// note on
else if (rawEventPtr->dataSize == 3 && (rawEventPtr->data[0] & 0xF0) == MIDI_EVENT_TYPE_NOTE_ON)
{
midiEvent.type = MIDI_EVENT_TYPE_NOTE_ON;
midiEvent.data.note.note = rawEventPtr->data[1];
midiEvent.data.note.velocity = rawEventPtr->data[2];
}

// aftertouch
else if (rawEventPtr->dataSize == 3 && (rawEventPtr->data[0] & 0xF0) == MIDI_EVENT_TYPE_AFTER_TOUCH)
{
midiEvent.type = MIDI_EVENT_TYPE_AFTER_TOUCH;
midiEvent.data.note.note = rawEventPtr->data[1];
midiEvent.data.note.velocity = rawEventPtr->data[2];
}

// control
else if (rawEventPtr->dataSize == 3 && (rawEventPtr->data[0] & 0xF0) == MIDI_EVENT_TYPE_CONTROL)
{
midiEvent.type = MIDI_EVENT_TYPE_CONTROL;
midiEvent.data.control.controller = rawEventPtr->data[1];
midiEvent.data.control.value = rawEventPtr->data[2];
}

// program
else if (rawEventPtr->dataSize == 2 && (rawEventPtr->data[0] & 0xF0) == MIDI_EVENT_TYPE_PROGRAM)
{
midiEvent.type = MIDI_EVENT_TYPE_PROGRAM;
midiEvent.data.program.value = rawEventPtr->data[1];
}

// channel pressure
else if (rawEventPtr->dataSize == 2 && (rawEventPtr->data[0] & 0xF0) == MIDI_EVENT_TYPE_CHANNEL_PRESSURE)
{
midiEvent.type = MIDI_EVENT_TYPE_CHANNEL_PRESSURE;
midiEvent.data.pressure.value = rawEventPtr->data[1];
}

// pitch wheel
else if (rawEventPtr->dataSize == 3 && (rawEventPtr->data[0] & 0xF0) == MIDI_EVENT_TYPE_PITCH_WHEEL)
{
midiEvent.type = MIDI_EVENT_TYPE_PITCH_WHEEL;
midiEvent.data.pitchwheel.value = ((rawEventPtr->data[2] << 7) | rawEventPtr->data[1]) - 8192;
}

else
{
midiEvent.type = MIDI_EVENT_TYPE_NULL;
}

rtsafe_memory_pool_deallocate(handlePtr->mempool, rawEventPtr);

return &midiEvent;
}

// ------------------------------------------------------------------------------------------
// Output (utils)

void caitlib_midi_encode_control(RawMidiEvent* eventPtr, uint8_t channel, uint8_t control, uint8_t value)
{
eventPtr->data[0] = MIDI_EVENT_TYPE_CONTROL | (channel & 0x0F);
eventPtr->data[1] = control;
eventPtr->data[2] = value;
eventPtr->dataSize = 3;
}

void caitlib_midi_encode_note_on(RawMidiEvent* eventPtr, uint8_t channel, uint8_t note, uint8_t velocity)
{
eventPtr->data[0] = MIDI_EVENT_TYPE_NOTE_ON | (channel & 0x0F);
eventPtr->data[1] = note;
eventPtr->data[2] = velocity;
eventPtr->dataSize = 3;
}

void caitlib_midi_encode_note_off(RawMidiEvent* eventPtr, uint8_t channel, uint8_t note, uint8_t velocity)
{
eventPtr->data[0] = MIDI_EVENT_TYPE_NOTE_OFF | (channel & 0x0F);
eventPtr->data[1] = note;
eventPtr->data[2] = velocity;
eventPtr->dataSize = 3;
}

void caitlib_midi_encode_aftertouch(RawMidiEvent* eventPtr, uint8_t channel, uint8_t note, uint8_t pressure)
{
eventPtr->data[0] = MIDI_EVENT_TYPE_AFTER_TOUCH | (channel & 0x0F);
eventPtr->data[1] = note;
eventPtr->data[2] = pressure;
eventPtr->dataSize = 3;
}

void caitlib_midi_encode_channel_pressure(RawMidiEvent* eventPtr, uint8_t channel, uint8_t pressure)
{
eventPtr->data[0] = MIDI_EVENT_TYPE_CHANNEL_PRESSURE | (channel & 0x0F);
eventPtr->data[1] = pressure;
eventPtr->dataSize = 2;
}

void caitlib_midi_encode_program(RawMidiEvent* eventPtr, uint8_t channel, uint8_t program)
{
eventPtr->data[0] = MIDI_EVENT_TYPE_PROGRAM | (channel & 0x0F);
eventPtr->data[1] = program;
eventPtr->dataSize = 2;
}

void caitlib_midi_encode_pitchwheel(RawMidiEvent* eventPtr, uint8_t channel, int16_t pitchwheel)
{
pitchwheel += 8192;
eventPtr->data[0] = MIDI_EVENT_TYPE_PITCH_WHEEL | (channel & 0x0F);
eventPtr->data[1] = pitchwheel & 0x7F;
eventPtr->data[2] = pitchwheel >> 7;
eventPtr->dataSize = 3;
}

// ------------------------------------------------------------------------------------------
// Output

void caitlib_put_event(CaitlibHandle handle, uint32_t port, const MidiEvent* event)
{
#ifdef USE_LIST_HEAD_OUTS
ListHead* entryPtr;
#endif
RawMidiEvent* eventPtr;
CaitlibOutPort* outPortPtr;
bool portFound = false;

eventPtr = rtsafe_memory_pool_allocate_sleepy(handlePtr->mempool);
eventPtr->time = event->time;

switch (event->type)
{
case MIDI_EVENT_TYPE_CONTROL:
caitlib_midi_encode_control(eventPtr, event->channel, event->data.control.controller, event->data.control.value);
break;
case MIDI_EVENT_TYPE_NOTE_ON:
caitlib_midi_encode_note_on(eventPtr, event->channel, event->data.note.note, event->data.note.velocity);
break;
case MIDI_EVENT_TYPE_NOTE_OFF:
caitlib_midi_encode_note_off(eventPtr, event->channel, event->data.note.note, event->data.note.velocity);
break;
case MIDI_EVENT_TYPE_AFTER_TOUCH:
caitlib_midi_encode_aftertouch(eventPtr, event->channel, event->data.note.note, event->data.note.velocity);
break;
case MIDI_EVENT_TYPE_CHANNEL_PRESSURE:
caitlib_midi_encode_channel_pressure(eventPtr, event->channel, event->data.pressure.value);
break;
case MIDI_EVENT_TYPE_PROGRAM:
caitlib_midi_encode_program(eventPtr, event->channel, event->data.program.value);
break;
case MIDI_EVENT_TYPE_PITCH_WHEEL:
caitlib_midi_encode_pitchwheel(eventPtr, event->channel, event->data.pitchwheel.value);
break;
default:
return;
}

pthread_mutex_lock(&handlePtr->mutex);

#ifdef USE_LIST_HEAD_OUTS
list_for_each(entryPtr, &handlePtr->outPorts)
{
outPortPtr = list_entry(entryPtr, CaitlibOutPort, siblings);

if (outPortPtr->id == port)
{
list_add_tail(&eventPtr->siblings, &outPortPtr->queue);
break;
}
}
#else
for (uint32_t i = 0; i < handlePtr->midiOutCount; i++)
{
outPortPtr = handlePtr->midiOuts[i];

if (outPortPtr->id == port)
{
portFound = true;
list_add_tail(&eventPtr->siblings, &outPortPtr->queue);
break;
}
}
#endif

if (! portFound)
printf("caitlib_put_event(%p, %i, %p) - failed to find port", handle, port, event);

pthread_mutex_unlock(&handlePtr->mutex);
}

void caitlib_put_control(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t control, uint8_t value)
{
MidiEvent event;
event.type = MIDI_EVENT_TYPE_CONTROL;
event.channel = channel;
event.time = time;
event.data.control.controller = control;
event.data.control.value = value;
caitlib_put_event(handle, port, &event);
}

void caitlib_put_note_on(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t note, uint8_t velocity)
{
MidiEvent event;
event.type = MIDI_EVENT_TYPE_NOTE_ON;
event.channel = channel;
event.time = time;
event.data.note.note = note;
event.data.note.velocity = velocity;
caitlib_put_event(handle, port, &event);
}

void caitlib_put_note_off(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t note, uint8_t velocity)
{
MidiEvent event;
event.type = MIDI_EVENT_TYPE_NOTE_OFF;
event.channel = channel;
event.time = time;
event.data.note.note = note;
event.data.note.velocity = velocity;
caitlib_put_event(handle, port, &event);
}

void caitlib_put_aftertouch(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t note, uint8_t pressure)
{
MidiEvent event;
event.type = MIDI_EVENT_TYPE_AFTER_TOUCH;
event.channel = channel;
event.time = time;
event.data.note.note = note;
event.data.note.velocity = pressure;
caitlib_put_event(handle, port, &event);
}

void caitlib_put_channel_pressure(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t pressure)
{
MidiEvent event;
event.type = MIDI_EVENT_TYPE_CHANNEL_PRESSURE;
event.channel = channel;
event.time = time;
event.data.pressure.value = pressure;
caitlib_put_event(handle, port, &event);
}

void caitlib_put_program(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t program)
{
MidiEvent event;
event.type = MIDI_EVENT_TYPE_PROGRAM;
event.channel = channel;
event.time = time;
event.data.program.value = program;
caitlib_put_event(handle, port, &event);
}

void caitlib_put_pitchwheel(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, int16_t value)
{
MidiEvent event;
event.type = MIDI_EVENT_TYPE_PITCH_WHEEL;
event.channel = channel;
event.time = time;
event.data.pitchwheel.value = value;
caitlib_put_event(handle, port, &event);
}

+ 0
- 287
c++/caitlib/caitlib.doxygen View File

@@ -1,287 +0,0 @@
# Doxyfile 1.7.6.1

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "Caitlib"
PROJECT_NUMBER =
PROJECT_BRIEF =
PROJECT_LOGO =
OUTPUT_DIRECTORY = ../../doc/caitlib
CREATE_SUBDIRS = NO
OUTPUT_LANGUAGE = English
BRIEF_MEMBER_DESC = YES
REPEAT_BRIEF = YES
ABBREVIATE_BRIEF =
ALWAYS_DETAILED_SEC = NO
INLINE_INHERITED_MEMB = NO
FULL_PATH_NAMES = YES
STRIP_FROM_PATH =
STRIP_FROM_INC_PATH =
SHORT_NAMES = NO
JAVADOC_AUTOBRIEF = NO
QT_AUTOBRIEF = NO
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS = YES
SEPARATE_MEMBER_PAGES = NO
TAB_SIZE = 4
ALIASES =
TCL_SUBST =
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
EXTENSION_MAPPING =
BUILTIN_STL_SUPPORT = NO
CPP_CLI_SUPPORT = NO
SIP_SUPPORT = NO
IDL_PROPERTY_SUPPORT = YES
DISTRIBUTE_GROUP_DOC = NO
SUBGROUPING = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS = NO
TYPEDEF_HIDES_STRUCT = NO
SYMBOL_CACHE_SIZE = 0
LOOKUP_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_PRIVATE = NO
EXTRACT_STATIC = NO
EXTRACT_LOCAL_CLASSES = YES
EXTRACT_LOCAL_METHODS = NO
EXTRACT_ANON_NSPACES = NO
HIDE_UNDOC_MEMBERS = NO
HIDE_UNDOC_CLASSES = NO
HIDE_FRIEND_COMPOUNDS = NO
HIDE_IN_BODY_DOCS = NO
INTERNAL_DOCS = NO
CASE_SENSE_NAMES = YES
HIDE_SCOPE_NAMES = NO
SHOW_INCLUDE_FILES = YES
FORCE_LOCAL_INCLUDES = NO
INLINE_INFO = YES
SORT_MEMBER_DOCS = NO
SORT_BRIEF_DOCS = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES = NO
SORT_BY_SCOPE_NAME = NO
STRICT_PROTO_MATCHING = NO
GENERATE_TODOLIST = YES
GENERATE_TESTLIST = YES
GENERATE_BUGLIST = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS =
MAX_INITIALIZER_LINES = 30
SHOW_USED_FILES = YES
SHOW_DIRECTORIES = NO
SHOW_FILES = YES
SHOW_NAMESPACES = YES
FILE_VERSION_FILTER =
LAYOUT_FILE =
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = NO
WARN_FORMAT = "$file:$line: $text"
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT =
INPUT_ENCODING = UTF-8
FILE_PATTERNS =
RECURSIVE = NO
EXCLUDE = caitlib.c list.h memory_atomic.h memory_atomic.c
EXCLUDE_SYMLINKS = NO
EXCLUDE_PATTERNS =
EXCLUDE_SYMBOLS =
EXAMPLE_PATH =
EXAMPLE_PATTERNS =
EXAMPLE_RECURSIVE = NO
IMAGE_PATH =
INPUT_FILTER =
FILTER_PATTERNS =
FILTER_SOURCE_FILES = NO
FILTER_SOURCE_PATTERNS =
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = NO
INLINE_SOURCES = NO
STRIP_CODE_COMMENTS = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION = NO
REFERENCES_LINK_SOURCE = YES
USE_HTAGS = NO
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX = YES
COLS_IN_ALPHA_INDEX = 5
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = .
HTML_FILE_EXTENSION = .html
HTML_HEADER =
HTML_FOOTER =
HTML_STYLESHEET =
HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100
HTML_COLORSTYLE_GAMMA = 80
HTML_TIMESTAMP = YES
HTML_ALIGN_MEMBERS = YES
HTML_DYNAMIC_SECTIONS = NO
GENERATE_DOCSET = NO
DOCSET_FEEDNAME = "Doxygen generated docs"
DOCSET_BUNDLE_ID = org.doxygen.Project
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
DOCSET_PUBLISHER_NAME = Publisher
GENERATE_HTMLHELP = NO
CHM_FILE =
HHC_LOCATION =
GENERATE_CHI = NO
CHM_INDEX_ENCODING =
BINARY_TOC = NO
TOC_EXPAND = NO
GENERATE_QHP = NO
QCH_FILE =
QHP_NAMESPACE = org.doxygen.Project
QHP_VIRTUAL_FOLDER = doc
QHP_CUST_FILTER_NAME =
QHP_CUST_FILTER_ATTRS =
QHP_SECT_FILTER_ATTRS =
QHG_LOCATION =
GENERATE_ECLIPSEHELP = NO
ECLIPSE_DOC_ID = org.doxygen.Project
DISABLE_INDEX = NO
GENERATE_TREEVIEW = NO
ENUM_VALUES_PER_LINE = 4
USE_INLINE_TREES = NO
TREEVIEW_WIDTH = 250
EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
FORMULA_TRANSPARENT = YES
USE_MATHJAX = NO
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
MATHJAX_EXTENSIONS =
SEARCHENGINE = YES
SERVER_BASED_SEARCH = NO
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX = NO
LATEX_OUTPUT = latex
LATEX_CMD_NAME = latex
MAKEINDEX_CMD_NAME = makeindex
COMPACT_LATEX = NO
PAPER_TYPE = a4
EXTRA_PACKAGES =
LATEX_HEADER =
LATEX_FOOTER =
PDF_HYPERLINKS = YES
USE_PDFLATEX = YES
LATEX_BATCHMODE = NO
LATEX_HIDE_INDICES = NO
LATEX_SOURCE_CODE = NO
LATEX_BIB_STYLE = plain
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF = NO
RTF_OUTPUT = rtf
COMPACT_RTF = NO
RTF_HYPERLINKS = NO
RTF_STYLESHEET_FILE =
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN = NO
MAN_OUTPUT = man
MAN_EXTENSION = .3
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = NO
XML_OUTPUT = xml
XML_SCHEMA =
XML_DTD =
XML_PROGRAMLISTING = YES
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD = NO
PERLMOD_LATEX = NO
PERLMOD_PRETTY = YES
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING = YES
MACRO_EXPANSION = NO
EXPAND_ONLY_PREDEF = NO
SEARCH_INCLUDES = YES
INCLUDE_PATH =
INCLUDE_FILE_PATTERNS =
PREDEFINED = DOXYGEN
EXPAND_AS_DEFINED =
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::additions related to external references
#---------------------------------------------------------------------------
TAGFILES =
GENERATE_TAGFILE =
ALLEXTERNALS = NO
EXTERNAL_GROUPS = YES
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS = YES
MSCGEN_PATH =
HIDE_UNDOC_RELATIONS = YES
HAVE_DOT = NO
DOT_NUM_THREADS = 0
DOT_FONTNAME = Helvetica
DOT_FONTSIZE = 10
DOT_FONTPATH =
CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES
GROUP_GRAPHS = YES
UML_LOOK = NO
TEMPLATE_RELATIONS = NO
INCLUDE_GRAPH = YES
INCLUDED_BY_GRAPH = YES
CALL_GRAPH = NO
CALLER_GRAPH = NO
GRAPHICAL_HIERARCHY = YES
DIRECTORY_GRAPH = YES
DOT_IMAGE_FORMAT = png
INTERACTIVE_SVG = NO
DOT_PATH =
DOTFILE_DIRS =
MSCFILE_DIRS =
DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
DOT_TRANSPARENT = NO
DOT_MULTI_TARGETS = YES
GENERATE_LEGEND = YES
DOT_CLEANUP = YES

+ 0
- 268
c++/caitlib/caitlib.h View File

@@ -1,268 +0,0 @@
/*
* Caitlib
* Copyright (C) 2007 Nedko Arnaudov <nedko@arnaudov.name>
* Copyright (C) 2012 Filipe Coelho <falktx@falktx.com>
*
* This program is free software; 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
* any later version.
*
* This program 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.
*
* For a full copy of the GNU General Public License see the COPYING file
*/

#ifndef CAITLIB_INCLUDED
#define CAITLIB_INCLUDED

#ifdef __cplusplus
extern "C" {
#else
# include <stdbool.h>
#endif

#include <stdint.h>

#ifdef _WIN32
# define CAITLIB_EXPORT __declspec (dllexport)
#else
# define CAITLIB_EXPORT __attribute__ ((visibility("default")))
#endif

/*!
* @defgroup CaitlibAPI Caitlib API
*
* The Caitlib API
*
* @{
*/

/*!
* Native handle for all Caitlib calls.
*/
typedef void* CaitlibHandle;

/*!
* @defgroup MidiEventType MidiEvent Type
* @{
*/
#define MIDI_EVENT_TYPE_NULL 0x00 //!< Null Event.
#define MIDI_EVENT_TYPE_NOTE_OFF 0x80 //!< Note-Off Event, uses Note data.
#define MIDI_EVENT_TYPE_NOTE_ON 0x90 //!< Note-On Event, uses Note data.
#define MIDI_EVENT_TYPE_AFTER_TOUCH 0xA0 //!< [Key] AfterTouch Event, uses Note data.
#define MIDI_EVENT_TYPE_CONTROL 0xB0 //!< Control Event, uses Control data.
#define MIDI_EVENT_TYPE_PROGRAM 0xC0 //!< Program Event, uses Program data.
#define MIDI_EVENT_TYPE_CHANNEL_PRESSURE 0xD0 //!< Channel Pressure Event, uses Pressure data.
#define MIDI_EVENT_TYPE_PITCH_WHEEL 0xE0 //!< PitchWheel Event, uses PitchWheel data.
#define MIDI_EVENT_TYPE_TIME 0xF1 //!< Time Event, uses Time Data.
/**@}*/

/*!
* MidiEvent in Caitlib
*/
typedef struct _MidiEvent
{
/*!
* MidiEvent Type
*/
uint16_t type;

/*!
* MidiEvent Channel (0 - 16)
*/
uint8_t channel;

/*!
* MidiEvent Data (values depend on type).
* \note Time event types ignore channel value.
*/
union MidiEventData {
struct MidiEventControl {
uint8_t controller;
uint8_t value;
} control;

struct MidiEventNote {
uint8_t note;
uint8_t velocity;
} note;

struct MidiEventPressure {
uint8_t value;
} pressure;

struct MidiEventProgram {
uint8_t value;
} program;

struct MidiEventPitchWheel {
int16_t value;
} pitchwheel;

struct MidiEventTime {
double bpm;
uint8_t sigNum;
uint8_t sigDenum;
} time;

#ifndef DOXYGEN
// padding for future events
struct _MidiEventPadding {
uint8_t pad[128];
} __padding;
#endif
} data;

/*!
* MidiEvent Time (in frames)
*/
uint32_t time;

} MidiEvent;

// ------------------------------------------------------------------------------------------

/*!
* @defgroup Initialization
*
* Functions for initialization and destruction of Caitlib instances.
* @{
*/

/*!
* Initialize a new Caitlib instance with name \a instanceName.\n
* Must be closed when no longer needed with caitlib_close().
*
* \note MIDI Input is disabled by default, call caitlib_want_events() to enable them.
* \note There are no MIDI Output ports by default, call caitlib_create_port() for that.
*/
CAITLIB_EXPORT
CaitlibHandle caitlib_init(const char* instanceName);

/*!
* Close a previously opened Caitlib instance.\n
*/
CAITLIB_EXPORT
void caitlib_close(CaitlibHandle handle);

/*!
* Create a new MIDI Output port with name \a portName.\n
* The return value is the ID for the port, which must be passed for any functions in the Output group.\n
* The ID will be >= 0 for a valid port, or -1 if an error occurred.
*/
CAITLIB_EXPORT
uint32_t caitlib_create_port(CaitlibHandle handle, const char* portName);

/*!
* Close a previously opened Caitlib instance.\n
* There's no need to call this function before caitlib_close().
*/
CAITLIB_EXPORT
void caitlib_destroy_port(CaitlibHandle handle, uint32_t port);

/**@}*/

// ------------------------------------------------------------------------------------------

/*!
* @defgroup Input
*
* Functions for MIDI Input handling.
* @{
*/

/*!
* Tell a Caitlib instance wherever if we're interested in MIDI Input.\n
* By default MIDI Input is disabled.\n
* It's safe to call this function multiple times during the lifetime of an instance.
*/
CAITLIB_EXPORT
void caitlib_want_events(CaitlibHandle handle, bool yesNo);

/*!
* Get a MidiEvent from a Caitlib instance buffer.\n
* When there are no more messages in the buffer, this function returns NULL.
*/
CAITLIB_EXPORT
MidiEvent* caitlib_get_event(CaitlibHandle handle);

/**@}*/

// ------------------------------------------------------------------------------------------

/*!
* @defgroup Output
*
* Functions for putting data into Caitlib instances (MIDI Output).
* @{
*/

/*!
* Put a MIDI event into a Caitlib instance port.
*/
CAITLIB_EXPORT
void caitlib_put_event(CaitlibHandle handle, uint32_t port, const MidiEvent* event);

/*!
* Put a MIDI Control event into a Caitlib instance port.
*/
CAITLIB_EXPORT
void caitlib_put_control(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t controller, uint8_t value);

/*!
* Put a MIDI Note On event into a Caitlib instance port.
*/
CAITLIB_EXPORT
void caitlib_put_note_on(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t note, uint8_t velocity);

/*!
* Put a MIDI Note Off event into a Caitlib instance port.
*/
CAITLIB_EXPORT
void caitlib_put_note_off(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t note, uint8_t velocity);

/*!
* Put a MIDI AfterTouch event into a Caitlib instance port.
*/
CAITLIB_EXPORT
void caitlib_put_aftertouch(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t note, uint8_t pressure);

/*!
* Put a MIDI Channel Pressure event into a Caitlib instance port.
*/
CAITLIB_EXPORT
void caitlib_put_channel_pressure(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t pressure);

/*!
* Put a MIDI Program event into a Caitlib instance port.
*/
CAITLIB_EXPORT
void caitlib_put_program(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, uint8_t program);

/*!
* Put a MIDI PitchWheel event into a Caitlib instance port.
*/
CAITLIB_EXPORT
void caitlib_put_pitchwheel(CaitlibHandle handle, uint32_t port, uint32_t time, uint8_t channel, int16_t value);

/*!
* Put a MIDI Time event into a Caitlib instance.
*/
CAITLIB_EXPORT
void caitlib_put_time(CaitlibHandle handle, uint32_t time, double bpm, uint8_t sigNum, uint8_t sigDenum);

/**@}*/

// ------------------------------------------------------------------------------------------

/**@}*/

#ifdef __cplusplus
}
#endif

#endif // CAITLIB_INCLUDED

+ 0
- 33
c++/caitlib/caitlib.pro View File

@@ -1,33 +0,0 @@
# QtCreator project file

CONFIG = debug
CONFIG += link_pkgconfig warn_on # plugin shared

DEFINES = DEBUG
DEFINES += QTCREATOR_TEST

DEFINES += _GNU_SOURCE

PKGCONFIG = jack

TARGET = caitlib
TEMPLATE = app # lib
VERSION = 0.0.1

SOURCES = \
caitlib.c \
memory_atomic.c

SOURCES += \
test.c

HEADERS = \
caitlib.h

INCLUDEPATH = .

QMAKE_CFLAGS *= -fvisibility=hidden -fPIC -Wextra -Werror -std=gnu99

unix {
LIBS = -lm -lpthread
}

+ 0
- 874
c++/caitlib/list.h View File

@@ -1,874 +0,0 @@
/* -*- Mode: C ; c-basic-offset: 2 -*- */
/*****************************************************************************
*
* Linux kernel header adapted for user-mode
* The 2.6.17-rt1 version was used.
*